forked from tangled.org/core
this repo has no description
1package db 2 3import ( 4 "fmt" 5 6 "tangled.sh/tangled.sh/core/knotserver/notifier" 7) 8 9type Op struct { 10 Tid string // time based ID, easy to enumerate & monotonic 11 Did string // did of pusher 12 Repo string // <did/repo> fully qualified repo 13 OldSha string // old sha of reference being updated 14 NewSha string // new sha of reference being updated 15 Ref string // the reference being updated 16} 17 18func (d *DB) InsertOp(op Op, notifier *notifier.Notifier) error { 19 _, err := d.db.Exec( 20 `insert into oplog (tid, did, repo, old_sha, new_sha, ref) values (?, ?, ?, ?, ?, ?)`, 21 op.Tid, 22 op.Did, 23 op.Repo, 24 op.OldSha, 25 op.NewSha, 26 op.Ref, 27 ) 28 if err != nil { 29 return err 30 } 31 32 notifier.NotifyAll() 33 return nil 34} 35 36func (d *DB) GetOps(cursor string) ([]Op, error) { 37 whereClause := "" 38 args := []any{} 39 if cursor != "" { 40 whereClause = "where tid > ?" 41 args = append(args, cursor) 42 } 43 44 query := fmt.Sprintf(` 45 select tid, did, repo, old_sha, new_sha, ref 46 from oplog 47 %s 48 order by tid asc 49 limit 100 50 `, whereClause) 51 52 rows, err := d.db.Query(query, args...) 53 if err != nil { 54 return nil, err 55 } 56 defer rows.Close() 57 58 var ops []Op 59 for rows.Next() { 60 var op Op 61 rows.Scan(&op.Tid, &op.Did, &op.Repo, &op.OldSha, &op.NewSha, &op.Ref) 62 ops = append(ops, op) 63 } 64 65 if err := rows.Err(); err != nil { 66 return nil, err 67 } 68 69 return ops, nil 70}