update
This commit is contained in:
58
db/local.go
58
db/local.go
@@ -2,22 +2,28 @@ package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"vctp/db/queries"
|
||||
"log/slog"
|
||||
"vctp/db/queries"
|
||||
|
||||
_ "github.com/tursodatabase/libsql-client-go/libsql"
|
||||
//_ "github.com/tursodatabase/libsql-client-go/libsql"
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
type LocalDB struct {
|
||||
logger *slog.Logger
|
||||
db *sql.DB
|
||||
db *sqlx.DB
|
||||
queries *queries.Queries
|
||||
}
|
||||
|
||||
type DB struct {
|
||||
writeDB *sql.DB
|
||||
readDB *sql.DB
|
||||
}
|
||||
|
||||
var _ Database = (*LocalDB)(nil)
|
||||
|
||||
func (d *LocalDB) DB() *sql.DB {
|
||||
func (d *LocalDB) DB() *sqlx.DB {
|
||||
return d.db
|
||||
}
|
||||
|
||||
@@ -34,9 +40,51 @@ func (d *LocalDB) Close() error {
|
||||
}
|
||||
|
||||
func newLocalDB(logger *slog.Logger, path string) (*LocalDB, error) {
|
||||
db, err := sql.Open("libsql", "file:"+path)
|
||||
|
||||
// TODO - work out if https://kerkour.com/sqlite-for-servers is possible without using sqlx
|
||||
/*
|
||||
writeDB, err := sql.Open("sqlite3", "file:"+path)
|
||||
if err != nil {
|
||||
logger.Error("can't create writedb connection", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
writeDB.SetMaxOpenConns(1)
|
||||
|
||||
readDB, err := sql.Open("sqlite3", "file:"+path)
|
||||
if err != nil {
|
||||
logger.Error("can't create readdb connection", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
readDB.SetMaxOpenConns(max(4, runtime.NumCPU()))
|
||||
*/
|
||||
|
||||
//db, err := sql.Open("libsql", "file:"+path)
|
||||
db, err := sqlx.Open("sqlite", "file:"+path)
|
||||
if err != nil {
|
||||
logger.Error("can't open database connection", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db.SetMaxOpenConns(1)
|
||||
|
||||
// Execute PRAGMA commands
|
||||
pragmas := []string{
|
||||
"PRAGMA journal_mode = WAL;",
|
||||
"PRAGMA busy_timeout = 5000;",
|
||||
"PRAGMA synchronous = NORMAL;",
|
||||
"PRAGMA cache_size = 1000000000;",
|
||||
"PRAGMA foreign_keys = true;",
|
||||
"PRAGMA temp_store = MEMORY;",
|
||||
}
|
||||
|
||||
for _, pragma := range pragmas {
|
||||
_, err := db.Exec(pragma)
|
||||
if err != nil {
|
||||
logger.Error("failed to execute pragma statement", "stmt", pragma, "error", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &LocalDB{logger: logger, db: db, queries: queries.New(db)}, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user