this repo has no description
1package db
2
3import (
4 "database/sql"
5
6 _ "github.com/mattn/go-sqlite3"
7)
8
9type DB struct {
10 db *sql.DB
11}
12
13func Setup(dbPath string) (*DB, error) {
14 db, err := sql.Open("sqlite3", dbPath+"?_foreign_keys=1")
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 temp_store = memory;
23 pragma mmap_size = 30000000000;
24 pragma page_size = 32768;
25 pragma auto_vacuum = incremental;
26 pragma busy_timeout = 5000;
27
28 create table if not exists known_dids (
29 did text primary key
30 );
31
32 create table if not exists public_keys (
33 id integer primary key autoincrement,
34 did text not null,
35 key text not null,
36 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
37 unique(did, key),
38 foreign key (did) references known_dids(did) on delete cascade
39 );
40
41 create table if not exists _jetstream (
42 id integer primary key autoincrement,
43 last_time_us integer not null
44 );
45
46 create table if not exists events (
47 rkey text not null,
48 nsid text not null,
49 event text not null, -- json
50 created integer not null default (strftime('%s', 'now')),
51 primary key (rkey, nsid)
52 );
53 `)
54 if err != nil {
55 return nil, err
56 }
57
58 return &DB{db: db}, nil
59}