forked from
tangled.org/core
Monorepo for Tangled
1package db
2
3import (
4 "database/sql"
5 "errors"
6)
7
8type RepoAlias struct {
9 OwnerDid string
10 Rkey string
11 RepoDid string
12 Rev string
13}
14
15func (d *DB) UpsertRepoAlias(a RepoAlias) error {
16 _, err := d.db.Exec(
17 `insert into repo_aliases (owner_did, rkey, repo_did, rev)
18 values (?, ?, ?, ?)
19 on conflict(owner_did, rkey) do update set
20 repo_did = excluded.repo_did,
21 rev = excluded.rev
22 where excluded.rev > repo_aliases.rev`,
23 a.OwnerDid, a.Rkey, a.RepoDid, a.Rev,
24 )
25 return err
26}
27
28func (d *DB) DeleteRepoAlias(ownerDid, rkey string) error {
29 _, err := d.db.Exec(
30 `delete from repo_aliases where owner_did = ? and rkey = ?`,
31 ownerDid, rkey,
32 )
33 return err
34}
35
36func (d *DB) ResolveAlias(ownerDid, rkey string) (*RepoAlias, error) {
37 var a RepoAlias
38 err := d.db.QueryRow(
39 `select owner_did, rkey, repo_did, rev from repo_aliases where owner_did = ? and rkey = ?`,
40 ownerDid, rkey,
41 ).Scan(&a.OwnerDid, &a.Rkey, &a.RepoDid, &a.Rev)
42 if errors.Is(err, sql.ErrNoRows) {
43 return nil, nil
44 }
45 if err != nil {
46 return nil, err
47 }
48 return &a, nil
49}
50
51func (d *DB) CurrentRkey(repoDid string) (ownerDid string, rkey string, err error) {
52 err = d.db.QueryRow(
53 `select owner_did, rkey from repo_aliases
54 where repo_did = ?
55 order by rev desc
56 limit 1`,
57 repoDid,
58 ).Scan(&ownerDid, &rkey)
59 return
60}