This repository has been archived by the owner on May 1, 2023. It is now read-only.
forked from lgtmco/lgtm
/
repos.go
91 lines (75 loc) · 1.86 KB
/
repos.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
package datastore
import (
"fmt"
"strings"
"github.com/go-gitea/lgtm/model"
"github.com/russross/meddler"
)
func (db *datastore) GetRepo(id int64) (*model.Repo, error) {
var repo = new(model.Repo)
var err = meddler.Load(db, repoTable, repo, id)
return repo, err
}
func (db *datastore) GetRepoSlug(slug string) (*model.Repo, error) {
var repo = new(model.Repo)
var err = meddler.QueryRow(db, repo, rebind(repoSlugQuery), slug)
return repo, err
}
func (db *datastore) GetRepoMulti(slug ...string) ([]*model.Repo, error) {
var repos = []*model.Repo{}
var instr, params = toList(slug)
var stmt = fmt.Sprintf(repoListQuery, instr)
var err = meddler.QueryAll(db, &repos, rebind(stmt), params...)
return repos, err
}
func (db *datastore) GetRepoOwner(owner string) ([]*model.Repo, error) {
var repos = []*model.Repo{}
var err = meddler.QueryAll(db, &repos, rebind(repoOwnerQuery), owner)
return repos, err
}
func (db *datastore) CreateRepo(repo *model.Repo) error {
return meddler.Insert(db, repoTable, repo)
}
func (db *datastore) UpdateRepo(repo *model.Repo) error {
return meddler.Update(db, repoTable, repo)
}
func (db *datastore) DeleteRepo(repo *model.Repo) error {
var _, err = db.Exec(rebind(repoDeleteStmt), repo.ID)
return err
}
func toList(items []string) (string, []interface{}) {
var size = len(items)
if size > 990 {
size = 990
items = items[:990]
}
var qs = make([]string, size, size)
var in = make([]interface{}, size, size)
for i, item := range items {
qs[i] = "?"
in[i] = item
}
return strings.Join(qs, ","), in
}
const repoTable = "repos"
const repoSlugQuery = `
SELECT *
FROM repos
WHERE repo_slug = ?
LIMIT 1;
`
const repoOwnerQuery = `
SELECT *
FROM repos
WHERE repo_owner = ?
`
const repoListQuery = `
SELECT *
FROM repos
WHERE repo_slug IN (%s)
ORDER BY repo_slug
`
const repoDeleteStmt = `
DELETE FROM repos
WHERE repo_id = ?
`