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