-
Notifications
You must be signed in to change notification settings - Fork 0
/
accessor.go
110 lines (105 loc) · 1.91 KB
/
accessor.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package sqlite
import (
"context"
"database/sql"
"strings"
"github.com/imagvfx/forge"
)
func createAccessorsTable(tx *sql.Tx) error {
_, err := tx.Exec(`
CREATE TABLE IF NOT EXISTS accessors (
id INTEGER PRIMARY KEY,
is_group BOOL NOT NULL,
name STRING NOT NULL UNIQUE,
called STRING NOT NULL,
disabled BOOL NOT NULL
)
`)
if err != nil {
return err
}
_, err = tx.Exec(`CREATE UNIQUE INDEX IF NOT EXISTS index_accessors_name ON accessors (name)`)
return err
}
func getAccessor(tx *sql.Tx, ctx context.Context, name string) (*forge.Accessor, error) {
keys := make([]string, 0)
vals := make([]any, 0)
keys = append(keys, "name=?")
vals = append(vals, name)
where := ""
if len(keys) != 0 {
where = "WHERE " + strings.Join(keys, " AND ")
}
rows, err := tx.QueryContext(ctx, `
SELECT
id,
is_group,
name,
called,
disabled
FROM accessors
`+where+`
`,
vals...,
)
if err != nil {
return nil, err
}
defer rows.Close()
if !rows.Next() {
return nil, forge.NotFound("accessor not found: %v", name)
}
a := &forge.Accessor{}
err = rows.Scan(
&a.ID,
&a.IsGroup,
&a.Name,
&a.Called,
&a.Disabled,
)
if err != nil {
return nil, err
}
return a, nil
}
func getAccessorByID(tx *sql.Tx, ctx context.Context, id int) (*forge.Accessor, error) {
keys := make([]string, 0)
vals := make([]any, 0)
keys = append(keys, "id=?")
vals = append(vals, id)
where := ""
if len(keys) != 0 {
where = "WHERE " + strings.Join(keys, " AND ")
}
rows, err := tx.QueryContext(ctx, `
SELECT
id,
is_group,
name,
called,
disabled
FROM accessors
`+where+`
`,
vals...,
)
if err != nil {
return nil, err
}
defer rows.Close()
if !rows.Next() {
return nil, forge.NotFound("accessor not found: %v", id)
}
a := &forge.Accessor{}
err = rows.Scan(
&a.ID,
&a.IsGroup,
&a.Name,
&a.Called,
&a.Disabled,
)
if err != nil {
return nil, err
}
return a, nil
}