diff options
Diffstat (limited to 'pkg/data')
| -rw-r--r-- | pkg/data/db.go | 26 | ||||
| -rw-r--r-- | pkg/data/get_test.go | 4 | ||||
| -rw-r--r-- | pkg/data/put_test.go | 4 | ||||
| -rw-r--r-- | pkg/data/update_test.go | 10 |
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": { |
