52 lines
1.1 kB
1
package db
2
3
import (
4
"database/sql"
5
6
_ "github.com/mattn/go-sqlite3"
7
)
8
9
type DB struct {
10
db *sql.DB
11
}
12
13
func Setup(dbPath string) (*DB, error) {
14
db, err := sql.Open("sqlite3", dbPath)
15
if err != nil {
16
return nil, err
17
}
18
19
_, err = db.Exec(`
20
pragma journal_mode = WAL;
21
pragma synchronous = normal;
22
pragma foreign_keys = on;
23
pragma temp_store = memory;
24
pragma mmap_size = 30000000000;
25
pragma page_size = 32768;
26
pragma auto_vacuum = incremental;
27
pragma busy_timeout = 5000;
28
29
create table if not exists known_dids (
30
did text primary key
31
);
32
33
create table if not exists public_keys (
34
id integer primary key autoincrement,
35
did text not null,
36
key text not null,
37
created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
38
unique(did, key),
39
foreign key (did) references known_dids(did) on delete cascade
40
);
41
42
create table if not exists _jetstream (
43
id integer primary key autoincrement,
44
last_time_us integer not null
45
);
46
`)
47
if err != nil {
48
return nil, err
49
}
50
51
return &DB{db: db}, nil
52
}
53