1
0

Added a to be completed Mindflow SQLite3 DB and queries.

This commit is contained in:
Alexander Andreev 2023-05-10 03:21:29 +04:00
parent 6b54005169
commit 1bf5dfba6a
Signed by: Arav
GPG Key ID: D22A817D95815393
7 changed files with 140 additions and 0 deletions

View File

@ -0,0 +1,90 @@
package sqlite
import (
"database/sql"
_ "embed"
"fmt"
"github.com/pkg/errors"
)
var (
//go:embed queries/schema.sql
querySchema string
//go:embed queries/categoryById.sql
queryCategoryById string
//go:embed queries/categoryNew.sql
queryCategoryNew string
//go:embed queries/postGetAll.sql
queryPostGetAll string
//go:embed queries/postNew.sql
queryPostNew string
//go:embed queries/postEdit.sql
queryPostEdit string
)
var (
stmtCategoryById *sql.Stmt
stmtCategoryNew *sql.Stmt
stmtPostGetAll *sql.Stmt
stmtPostNew *sql.Stmt
stmtPostEdit *sql.Stmt
)
func initDBStatements(db *sql.DB) error {
db.Exec("PRAGMA foreign_keys = ON;")
_, err := db.Exec(querySchema)
if err != nil {
return errors.Wrap(err, "failed to init schema")
}
stmtCategoryById, err = db.Prepare(queryCategoryById)
if err != nil {
return errors.Wrap(err, "failed to prepare queryCategoryById")
}
stmtCategoryNew, err = db.Prepare(queryCategoryNew)
if err != nil {
return errors.Wrap(err, "failed to prepare queryCategoryNew")
}
stmtPostGetAll, err = db.Prepare(queryPostGetAll)
if err != nil {
return errors.Wrap(err, "failed to prepare queryPostGetAll")
}
stmtPostNew, err = db.Prepare(queryPostNew)
if err != nil {
return errors.Wrap(err, "failed to prepare queryPostNew")
}
stmtPostEdit, err = db.Prepare(queryPostEdit)
if err != nil {
return errors.Wrap(err, "failed to prepare queryPostEdit")
}
return nil
}
type SQLiteMindflow struct {
db *sql.DB
}
func NewSQLiteMindflow(path string) (*SQLiteMindflow, error) {
db, err := sql.Open("sqlite3", dsn(path))
if err != nil {
return nil, err
}
if err := initDBStatements(db); err != nil {
return nil, err
}
return &SQLiteMindflow{db: db}, nil
}
func dsn(filePath string) string {
return fmt.Sprintf("file:%s?_journal=WAL&_mutex=full", filePath)
}

View File

@ -0,0 +1,4 @@
SELECT
`name`
FROM `category`
WHERE `category_id` = ?;

View File

@ -0,0 +1,3 @@
INSERT INTO `category`
(`name`)
VALUES (?);

View File

@ -0,0 +1,5 @@
UPDATE OR REPLACE `post`
SET
`title` = ?,
`body` = ?
WHERE `post_id` = ?;

View File

@ -0,0 +1,9 @@
SELECT
`post`.`post_id`,
`category`.`name` AS `category`,
`post`.`date`,
`post`.`title`,
`post`.`body`
FROM `post`
LEFT JOIN `category`
ON `post`.`post_id` = `category`.`category_id`;

View File

@ -0,0 +1,4 @@
INSERT INTO `post`
(`category_id`, `date`, `title`, `body`)
VALUES
(?, ?, ?, ?);

View File

@ -0,0 +1,25 @@
-- SQLite3
CREATE TABLE IF NOT EXISTS `category` (
`category_id` INTEGER NOT NULL,
`name` TEXT NOT NULL,
PRIMARY KEY (`category_id`),
UNIQUE (`name`)
);
INSERT INTO `category`
VALUES
(1, 'Update'),
(2, 'Diary');
CREATE TABLE IF NOT EXISTS `post` (
`post_id` INTEGER NOT NULL,
`category_id` INTEGER NOT NULL,
`date` INTEGER NOT NULL,
`title` TEXT NOT NULL,
`body` TEXT NOT NULL,
PRIMARY KEY (`post_id`),
FOREIGN KEY (`category_id`)
REFERENCES `category` (`category_id`)
ON DELETE CASCADE
ON UPDATE CASCADE );
);