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}