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)
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 create table if not exists oplog (
48 tid text primary key,
49 did text not null,
50 repo text not null,
51 old_sha text not null,
52 new_sha text not null,
53 ref text not null
54 );
55 `)
56 if err != nil {
57 return nil, err
58 }
59
60 return &DB{db: db}, nil
61}