A vibe coded tangled fork which supports pijul.
at f220cd3e9daa3362fc5ac81c5feb4a56133cde9e 74 lines 1.6 kB view raw
1package db 2 3import ( 4 "context" 5 "database/sql" 6 "log/slog" 7 "strings" 8 9 _ "github.com/mattn/go-sqlite3" 10 "tangled.org/core/log" 11) 12 13type DB struct { 14 db *sql.DB 15 logger *slog.Logger 16} 17 18func Setup(ctx context.Context, dbPath string) (*DB, error) { 19 // https://github.com/mattn/go-sqlite3#connection-string 20 opts := []string{ 21 "_foreign_keys=1", 22 "_journal_mode=WAL", 23 "_synchronous=NORMAL", 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 // NOTE: If any other migration is added here, you MUST 36 // copy the pattern in appview: use a single sql.Conn 37 // for every migration. 38 39 _, err = db.Exec(` 40 create table if not exists known_dids ( 41 did text primary key 42 ); 43 44 create table if not exists public_keys ( 45 id integer primary key autoincrement, 46 did text not null, 47 key text not null, 48 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 49 unique(did, key), 50 foreign key (did) references known_dids(did) on delete cascade 51 ); 52 53 create table if not exists _jetstream ( 54 id integer primary key autoincrement, 55 last_time_us integer not null 56 ); 57 58 create table if not exists events ( 59 rkey text not null, 60 nsid text not null, 61 event text not null, -- json 62 created integer not null default (strftime('%s', 'now')), 63 primary key (rkey, nsid) 64 ); 65 `) 66 if err != nil { 67 return nil, err 68 } 69 70 return &DB{ 71 db: db, 72 logger: logger, 73 }, nil 74}