+17
-5
knotserver/db/db.go
+17
-5
knotserver/db/db.go
···
1
package db
2
3
import (
4
"database/sql"
5
"log/slog"
6
"strings"
7
8
_ "github.com/mattn/go-sqlite3"
9
)
10
11
type DB struct {
···
13
logger *slog.Logger
14
}
15
16
-
func Setup(dbPath string, logger *slog.Logger) (*DB, error) {
17
// https://github.com/mattn/go-sqlite3#connection-string
18
opts := []string{
19
"_foreign_keys=1",
···
22
"_auto_vacuum=incremental",
23
}
24
25
db, err := sql.Open("sqlite3", dbPath+"?"+strings.Join(opts, "&"))
26
if err != nil {
27
return nil, err
28
}
29
30
-
// NOTE: If any other migration is added here, you MUST
31
-
// copy the pattern in appview: use a single sql.Conn
32
-
// for every migration.
33
34
-
_, err = db.Exec(`
35
create table if not exists known_dids (
36
did text primary key
37
);
···
56
event text not null, -- json
57
created integer not null default (strftime('%s', 'now')),
58
primary key (rkey, nsid)
59
);
60
`)
61
if err != nil {
···
1
package db
2
3
import (
4
+
"context"
5
"database/sql"
6
"log/slog"
7
"strings"
8
9
_ "github.com/mattn/go-sqlite3"
10
+
"tangled.org/core/log"
11
)
12
13
type DB struct {
···
15
logger *slog.Logger
16
}
17
18
+
func Setup(ctx context.Context, dbPath string) (*DB, error) {
19
// https://github.com/mattn/go-sqlite3#connection-string
20
opts := []string{
21
"_foreign_keys=1",
···
24
"_auto_vacuum=incremental",
25
}
26
27
+
logger := log.FromContext(ctx)
28
+
logger = log.SubLogger(logger, "db")
29
+
30
db, err := sql.Open("sqlite3", dbPath+"?"+strings.Join(opts, "&"))
31
if err != nil {
32
return nil, err
33
}
34
35
+
conn, err := db.Conn(ctx)
36
+
if err != nil {
37
+
return nil, err
38
+
}
39
+
defer conn.Close()
40
41
+
_, err = conn.ExecContext(ctx, `
42
create table if not exists known_dids (
43
did text primary key
44
);
···
63
event text not null, -- json
64
created integer not null default (strftime('%s', 'now')),
65
primary key (rkey, nsid)
66
+
);
67
+
68
+
create table if not exists migrations (
69
+
id integer primary key autoincrement,
70
+
name text unique
71
);
72
`)
73
if err != nil {