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 Make(dbPath string) (*DB, error) {
14 db, err := sql.Open("sqlite3", dbPath)
15 if err != nil {
16 return nil, err
17 }
18 _, err = db.Exec(`
19 pragma journal_mode = WAL;
20 pragma synchronous = normal;
21 pragma foreign_keys = on;
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 registrations (
29 id integer primary key autoincrement,
30 domain text not null unique,
31 did text not null,
32 secret text not null,
33 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
34 registered text
35 );
36 create table if not exists public_keys (
37 id integer primary key autoincrement,
38 did text not null,
39 name text not null,
40 key text not null,
41 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
42 unique(did, name, key)
43 );
44 create table if not exists repos (
45 id integer primary key autoincrement,
46 did text not null,
47 name text not null,
48 knot text not null,
49 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
50 unique(did, name, knot)
51 );
52 create table if not exists collaborators (
53 id integer primary key autoincrement,
54 did text not null,
55 repo integer not null,
56 foreign key (repo) references repos(id) on delete cascade
57 );
58 create table if not exists follows (
59 user_did text not null,
60 subject_did text not null,
61 at_uri text not null,
62 followed_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
63 primary key (user_did, subject_did),
64 check (user_did <> subject_did)
65 );
66 create table if not exists _jetstream (
67 id integer primary key autoincrement,
68 last_time_us integer not null
69 );
70 `)
71 if err != nil {
72 return nil, err
73 }
74 return &DB{db: db}, nil
75}