From ff1bfb3fecb7c1ddbf896bbde544f9468ba4ed20 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Wed, 10 Dec 2025 04:04:45 +0000 Subject: [PATCH] knotserver: add ability to run migrations on knots Change-Id: wonqmpyrknoqoyupzlwxokpqvxymttyl Signed-off-by: oppiliappan --- knotserver/db/db.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/knotserver/db/db.go b/knotserver/db/db.go index 7fbe30f8..dbfd58a3 100644 --- a/knotserver/db/db.go +++ b/knotserver/db/db.go @@ -1,11 +1,13 @@ package db import ( + "context" "database/sql" "log/slog" "strings" _ "github.com/mattn/go-sqlite3" + "tangled.org/core/log" ) type DB struct { @@ -13,7 +15,7 @@ type DB struct { logger *slog.Logger } -func Setup(dbPath string, logger *slog.Logger) (*DB, error) { +func Setup(ctx context.Context, dbPath string) (*DB, error) { // https://github.com/mattn/go-sqlite3#connection-string opts := []string{ "_foreign_keys=1", @@ -22,16 +24,21 @@ func Setup(dbPath string, logger *slog.Logger) (*DB, error) { "_auto_vacuum=incremental", } + logger := log.FromContext(ctx) + logger = log.SubLogger(logger, "db") + db, err := sql.Open("sqlite3", dbPath+"?"+strings.Join(opts, "&")) if err != nil { return nil, err } - // NOTE: If any other migration is added here, you MUST - // copy the pattern in appview: use a single sql.Conn - // for every migration. + conn, err := db.Conn(ctx) + if err != nil { + return nil, err + } + defer conn.Close() - _, err = db.Exec(` + _, err = conn.ExecContext(ctx, ` create table if not exists known_dids ( did text primary key ); @@ -57,6 +64,11 @@ func Setup(dbPath string, logger *slog.Logger) (*DB, error) { created integer not null default (strftime('%s', 'now')), primary key (rkey, nsid) ); + + create table if not exists migrations ( + id integer primary key autoincrement, + name text unique + ); `) if err != nil { return nil, err -- 2.43.0