aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/data
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-08-02 13:48:55 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-08-02 13:48:55 -0400
commit6a65be22a5e3434e8ca925ec40162c560e1dd612 (patch)
treee75e556395c794021dc6900927b426cb45ddfdb3 /pkg/data
parentd4003133b2c1647d61821cda5d6ce2f5421742e4 (diff)
Improve initial db connection
Now checks for presence of db version metadata in before attempting to create database schema.
Diffstat (limited to 'pkg/data')
-rw-r--r--pkg/data/db.go26
-rw-r--r--pkg/data/get_test.go4
-rw-r--r--pkg/data/put_test.go4
-rw-r--r--pkg/data/update_test.go10
4 files changed, 26 insertions, 18 deletions
diff --git a/pkg/data/db.go b/pkg/data/db.go
index 63e8ff0..6837da1 100644
--- a/pkg/data/db.go
+++ b/pkg/data/db.go
@@ -45,39 +45,45 @@ func BatchQuery[T any](query string, start string, val string, delim string, sto
return b.String(), args
}
-func NewQuery(filename string) *Query {
- query := &Query{NewDB(filename)}
+func NewQuery(filename string, version string) *Query {
+ query := &Query{NewDB(filename, version)}
return query
}
-func NewDB(filename string) *sql.DB {
+func NewDB(filename string, version string) *sql.DB {
connStr := "file:" + filename + "?_fk=true&_journal=WAL"
db, err := sql.Open("sqlite3_regex", connStr)
if err != nil {
panic(err)
}
- if err := createSchema(db); err != nil {
+ var dbVersion string
+ row := db.QueryRow("SELECT key, value FROM Info WHERE key='version'")
+ if err := row.Scan(&dbVersion); err == nil {
+ return db
+ }
+
+ if err := createSchema(db, version); err != nil {
panic(err)
}
return db
}
-func NewMemDB() *sql.DB {
+func NewMemDB(version string) *sql.DB {
db, err := sql.Open("sqlite3_regex", ":memory:?_fk=true")
if err != nil {
panic(err)
}
- if err := createSchema(db); err != nil {
+ if err := createSchema(db, version); err != nil {
panic(err)
}
return db
}
-func createSchema(db *sql.DB) error {
+func createSchema(db *sql.DB, version string) error {
tx, err := db.Begin()
if err != nil {
return err
@@ -276,8 +282,10 @@ func createSchema(db *sql.DB) error {
return err
}
- if _, err = tx.Exec("INSERT OR IGNORE INTO Info (key, value, updated) VALUES (?,?,?)",
- "created", "", time.Now().UTC().Unix(),
+ t := time.Now().UTC().Unix()
+ if _, err = tx.Exec("INSERT OR IGNORE INTO Info (key, value, updated) VALUES (?,?,?), (?,?,?)",
+ "created", "", t,
+ "version", version, t,
); err != nil {
tx.Rollback()
return err
diff --git a/pkg/data/get_test.go b/pkg/data/get_test.go
index 22e5af2..9ee8a2a 100644
--- a/pkg/data/get_test.go
+++ b/pkg/data/get_test.go
@@ -12,7 +12,7 @@ import (
func singleDoc(t *testing.T) *sql.DB {
t.Helper()
- db := data.NewMemDB()
+ db := data.NewMemDB("test")
if _, err := db.Exec(`
INSERT INTO Documents (path, title, date, fileTime)
@@ -68,7 +68,7 @@ func singleDoc(t *testing.T) *sql.DB {
func multiDoc(t *testing.T) *sql.DB {
t.Helper()
- db := data.NewMemDB()
+ db := data.NewMemDB("test")
if _, err := db.Exec(`
INSERT INTO Documents (path, title, date, fileTime)
diff --git a/pkg/data/put_test.go b/pkg/data/put_test.go
index 8188b21..12c9e24 100644
--- a/pkg/data/put_test.go
+++ b/pkg/data/put_test.go
@@ -21,7 +21,7 @@ func TestPut_Insert(t *testing.T) {
"insert on empty",
func(t *testing.T) *sql.DB {
t.Helper()
- return data.NewMemDB()
+ return data.NewMemDB("test")
},
index.Document{
Path: "/file",
@@ -73,7 +73,7 @@ func TestPutMany_Insert(t *testing.T) {
name: "insert on empty",
newDb: func(t *testing.T) *sql.DB {
t.Helper()
- return data.NewMemDB()
+ return data.NewMemDB("test")
},
documents: map[string]*index.Document{
"/file": {
diff --git a/pkg/data/update_test.go b/pkg/data/update_test.go
index 912ac00..95b425f 100644
--- a/pkg/data/update_test.go
+++ b/pkg/data/update_test.go
@@ -23,7 +23,7 @@ func TestUpdate_Update(t *testing.T) {
"update on empty",
func(t *testing.T) *sql.DB {
t.Helper()
- return data.NewMemDB()
+ return data.NewMemDB("test")
},
index.Document{
Path: "/file",
@@ -40,7 +40,7 @@ func TestUpdate_Update(t *testing.T) {
"update on existing",
func(t *testing.T) *sql.DB {
t.Helper()
- db := data.NewMemDB()
+ db := data.NewMemDB("test")
p := data.NewPut(db, index.Document{
Path: "/file",
Title: "A file",
@@ -105,7 +105,7 @@ func TestUpdateMany_Update(t *testing.T) {
{
"additions",
func(t *testing.T) *sql.DB {
- return data.NewMemDB()
+ return data.NewMemDB("test")
},
map[string]*index.Document{
"/afile": {
@@ -132,7 +132,7 @@ func TestUpdateMany_Update(t *testing.T) {
{
"delete",
func(t *testing.T) *sql.DB {
- db := data.NewMemDB()
+ db := data.NewMemDB("test")
docs := map[string]*index.Document{
"/afile": {
@@ -180,7 +180,7 @@ func TestUpdateMany_Update(t *testing.T) {
{
"update",
func(t *testing.T) *sql.DB {
- db := data.NewMemDB()
+ db := data.NewMemDB("test")
docs := map[string]*index.Document{
"/afile": {