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 *sql.DB 11} 12 13func Make(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 _jetstream ( 29 id integer primary key autoincrement, 30 last_time_us integer not null 31 ); 32 33 create table if not exists known_dids ( 34 did text primary key 35 ); 36 37 create table if not exists repos ( 38 id integer primary key autoincrement, 39 knot text not null, 40 owner text not null, 41 name text not null, 42 addedAt text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 43 44 unique(owner, name) 45 ); 46 47 create table if not exists spindle_members ( 48 -- identifiers for the record 49 id integer primary key autoincrement, 50 did text not null, 51 rkey text not null, 52 53 -- data 54 instance text not null, 55 subject text not null, 56 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 57 58 -- constraints 59 unique (did, instance, subject) 60 ); 61 62 -- status event for a single workflow 63 create table if not exists events ( 64 rkey text not null, 65 nsid text not null, 66 event text not null, -- json 67 created integer not null -- unix nanos 68 ); 69 `) 70 if err != nil { 71 return nil, err 72 } 73 74 return &DB{db}, nil 75} 76 77func (d *DB) SaveLastTimeUs(lastTimeUs int64) error { 78 _, err := d.Exec(` 79 insert into _jetstream (id, last_time_us) 80 values (1, ?) 81 on conflict(id) do update set last_time_us = excluded.last_time_us 82 `, lastTimeUs) 83 return err 84} 85 86func (d *DB) GetLastTimeUs() (int64, error) { 87 var lastTimeUs int64 88 row := d.QueryRow(`select last_time_us from _jetstream where id = 1;`) 89 err := row.Scan(&lastTimeUs) 90 return lastTimeUs, err 91}