Added a to be completed Mindflow SQLite3 DB and queries.
This commit is contained in:
parent
6b54005169
commit
1bf5dfba6a
90
pkg/mindflow/database/sqlite/db.go
Normal file
90
pkg/mindflow/database/sqlite/db.go
Normal 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)
|
||||||
|
}
|
4
pkg/mindflow/database/sqlite/queries/categoryById.sql
Normal file
4
pkg/mindflow/database/sqlite/queries/categoryById.sql
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
SELECT
|
||||||
|
`name`
|
||||||
|
FROM `category`
|
||||||
|
WHERE `category_id` = ?;
|
3
pkg/mindflow/database/sqlite/queries/categoryNew.sql
Normal file
3
pkg/mindflow/database/sqlite/queries/categoryNew.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
INSERT INTO `category`
|
||||||
|
(`name`)
|
||||||
|
VALUES (?);
|
5
pkg/mindflow/database/sqlite/queries/postEdit.sql
Normal file
5
pkg/mindflow/database/sqlite/queries/postEdit.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
UPDATE OR REPLACE `post`
|
||||||
|
SET
|
||||||
|
`title` = ?,
|
||||||
|
`body` = ?
|
||||||
|
WHERE `post_id` = ?;
|
9
pkg/mindflow/database/sqlite/queries/postGetAll.sql
Normal file
9
pkg/mindflow/database/sqlite/queries/postGetAll.sql
Normal 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`;
|
4
pkg/mindflow/database/sqlite/queries/postNew.sql
Normal file
4
pkg/mindflow/database/sqlite/queries/postNew.sql
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
INSERT INTO `post`
|
||||||
|
(`category_id`, `date`, `title`, `body`)
|
||||||
|
VALUES
|
||||||
|
(?, ?, ?, ?);
|
25
pkg/mindflow/database/sqlite/queries/schema.sql
Normal file
25
pkg/mindflow/database/sqlite/queries/schema.sql
Normal 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 );
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user