migrated star to auto-gen sql
This commit is contained in:
parent
771f1cf606
commit
1f0c249c82
5 changed files with 212 additions and 40 deletions
|
@ -110,9 +110,9 @@ CREATE INDEX repos_user_idx ON repos (repo_user_id);
|
|||
var starTable = `
|
||||
CREATE TABLE IF NOT EXISTS stars (
|
||||
star_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
,user_id INTEGER
|
||||
,repo_id INTEGER
|
||||
,UNIQUE (repo_id, user_id)
|
||||
,star_user_id INTEGER
|
||||
,star_repo_id INTEGER
|
||||
,UNIQUE (star_repo_id, star_user_id)
|
||||
);
|
||||
`
|
||||
|
||||
|
|
|
@ -80,6 +80,6 @@ SELECT
|
|||
FROM
|
||||
repos r
|
||||
,stars s
|
||||
WHERE r.repo_id = s.repo_id
|
||||
AND s.user_id = ?
|
||||
WHERE r.repo_id = s.star_repo_id
|
||||
AND s.star_user_id = ?
|
||||
`
|
||||
|
|
|
@ -1,60 +1,47 @@
|
|||
package builtin
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
||||
common "github.com/drone/drone/pkg/types"
|
||||
"database/sql"
|
||||
|
||||
"github.com/drone/drone/pkg/types"
|
||||
)
|
||||
|
||||
type Starstore struct {
|
||||
meddler.DB
|
||||
*sql.DB
|
||||
}
|
||||
|
||||
func NewStarstore(db meddler.DB) *Starstore {
|
||||
func NewStarstore(db *sql.DB) *Starstore {
|
||||
return &Starstore{db}
|
||||
}
|
||||
|
||||
// Starred returns true if the user starred
|
||||
// the given repository.
|
||||
func (db *Starstore) Starred(user *common.User, repo *common.Repo) (bool, error) {
|
||||
var star = new(star)
|
||||
err := meddler.QueryRow(db, star, rebind(starQuery), user.ID, repo.ID)
|
||||
func (db *Starstore) Starred(user *types.User, repo *types.Repo) (bool, error) {
|
||||
_, err := getStar(db, rebind(stmtStarSelectStarUserRepo), user.ID, repo.ID)
|
||||
return (err == nil), err
|
||||
}
|
||||
|
||||
// AddStar inserts a starred repo / user in the datastore.
|
||||
func (db *Starstore) AddStar(user *common.User, repo *common.Repo) error {
|
||||
var star = &star{UserID: user.ID, RepoID: repo.ID}
|
||||
return meddler.Insert(db, starTable, star)
|
||||
func (db *Starstore) AddStar(user *types.User, repo *types.Repo) error {
|
||||
var star = &Star{UserID: user.ID, RepoID: repo.ID}
|
||||
return createStar(db, rebind(stmtStarInsert), star)
|
||||
}
|
||||
|
||||
// DelStar removes starred repo / user from the datastore.
|
||||
func (db *Starstore) DelStar(user *common.User, repo *common.Repo) error {
|
||||
var _, err = db.Exec(rebind(starDeleteStmt), user.ID, repo.ID)
|
||||
func (db *Starstore) DelStar(user *types.User, repo *types.Repo) error {
|
||||
var _, err = db.Exec(rebind(stmtStartDeleteUserRepo), user.ID, repo.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
type star struct {
|
||||
ID int64 `meddler:"star_id,pk"`
|
||||
UserID int64 `meddler:"user_id"`
|
||||
RepoID int64 `meddler:"repo_id"`
|
||||
type Star struct {
|
||||
ID int64
|
||||
UserID int64 `sql:"unique:ux_star_user_repo"`
|
||||
RepoID int64 `sql:"unique:ux_star_user_repo"`
|
||||
}
|
||||
|
||||
// Stars table name in database.
|
||||
const starTable = "stars"
|
||||
|
||||
// SQL query to retrieve a user's stars to
|
||||
// access a repository.
|
||||
const starQuery = `
|
||||
SELECT *
|
||||
FROM stars
|
||||
WHERE user_id=?
|
||||
AND repo_id=?
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
// SQL statement to delete a star by ID.
|
||||
const starDeleteStmt = `
|
||||
const stmtStartDeleteUserRepo = `
|
||||
DELETE FROM stars
|
||||
WHERE user_id=?
|
||||
AND repo_id=?
|
||||
WHERE star_user_id=?
|
||||
AND star_repo_id=?
|
||||
`
|
||||
|
|
185
pkg/store/builtin/star_sql.go
Normal file
185
pkg/store/builtin/star_sql.go
Normal file
|
@ -0,0 +1,185 @@
|
|||
package builtin
|
||||
|
||||
// DO NOT EDIT
|
||||
// code generated by go:generate
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
var _ = json.Marshal
|
||||
|
||||
// generic database interface, matching both *sql.Db and *sql.Tx
|
||||
type starDB interface {
|
||||
Exec(query string, args ...interface{}) (sql.Result, error)
|
||||
Query(query string, args ...interface{}) (*sql.Rows, error)
|
||||
QueryRow(query string, args ...interface{}) *sql.Row
|
||||
}
|
||||
|
||||
func getStar(db starDB, query string, args ...interface{}) (*Star, error) {
|
||||
row := db.QueryRow(query, args...)
|
||||
return scanStar(row)
|
||||
}
|
||||
|
||||
func getStars(db starDB, query string, args ...interface{}) ([]*Star, error) {
|
||||
rows, err := db.Query(query, args...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
return scanStars(rows)
|
||||
}
|
||||
|
||||
func createStar(db starDB, query string, v *Star) error {
|
||||
var v0 int64
|
||||
var v1 int64
|
||||
v0 = v.UserID
|
||||
v1 = v.RepoID
|
||||
|
||||
res, err := db.Exec(query,
|
||||
&v0,
|
||||
&v1,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
v.ID, err = res.LastInsertId()
|
||||
return err
|
||||
}
|
||||
|
||||
func updateStar(db starDB, query string, v *Star) error {
|
||||
var v0 int64
|
||||
var v1 int64
|
||||
var v2 int64
|
||||
v0 = v.ID
|
||||
v1 = v.UserID
|
||||
v2 = v.RepoID
|
||||
|
||||
_, err := db.Exec(query,
|
||||
&v1,
|
||||
&v2,
|
||||
&v0,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func scanStar(row *sql.Row) (*Star, error) {
|
||||
var v0 int64
|
||||
var v1 int64
|
||||
var v2 int64
|
||||
|
||||
err := row.Scan(
|
||||
&v0,
|
||||
&v1,
|
||||
&v2,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
v := &Star{}
|
||||
v.ID = v0
|
||||
v.UserID = v1
|
||||
v.RepoID = v2
|
||||
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func scanStars(rows *sql.Rows) ([]*Star, error) {
|
||||
var err error
|
||||
var vv []*Star
|
||||
for rows.Next() {
|
||||
var v0 int64
|
||||
var v1 int64
|
||||
var v2 int64
|
||||
err = rows.Scan(
|
||||
&v0,
|
||||
&v1,
|
||||
&v2,
|
||||
)
|
||||
if err != nil {
|
||||
return vv, err
|
||||
}
|
||||
|
||||
v := &Star{}
|
||||
v.ID = v0
|
||||
v.UserID = v1
|
||||
v.RepoID = v2
|
||||
vv = append(vv, v)
|
||||
}
|
||||
return vv, rows.Err()
|
||||
}
|
||||
|
||||
const stmtStarSelectList = `
|
||||
SELECT
|
||||
star_id
|
||||
,star_user_id
|
||||
,star_repo_id
|
||||
FROM stars
|
||||
`
|
||||
|
||||
const stmtStarSelectRange = `
|
||||
SELECT
|
||||
star_id
|
||||
,star_user_id
|
||||
,star_repo_id
|
||||
FROM stars
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
const stmtStarSelect = `
|
||||
SELECT
|
||||
star_id
|
||||
,star_user_id
|
||||
,star_repo_id
|
||||
FROM stars
|
||||
WHERE star_id = ?
|
||||
`
|
||||
|
||||
const stmtStarSelectStarUserRepo = `
|
||||
SELECT
|
||||
star_id
|
||||
,star_user_id
|
||||
,star_repo_id
|
||||
FROM stars
|
||||
WHERE star_user_id = ?
|
||||
AND star_repo_id = ?
|
||||
`
|
||||
|
||||
const stmtStarSelectCount = `
|
||||
SELECT count(1)
|
||||
FROM stars
|
||||
`
|
||||
|
||||
const stmtStarInsert = `
|
||||
INSERT INTO stars (
|
||||
star_user_id
|
||||
,star_repo_id
|
||||
) VALUES (?,?);
|
||||
`
|
||||
|
||||
const stmtStarUpdate = `
|
||||
UPDATE stars SET
|
||||
star_user_id = ?
|
||||
,star_repo_id = ?
|
||||
WHERE star_id = ?
|
||||
`
|
||||
|
||||
const stmtStarDelete = `
|
||||
DELETE FROM stars
|
||||
WHERE star_id = ?
|
||||
`
|
||||
|
||||
const stmtStarTable = `
|
||||
CREATE TABLE IF NOT EXISTS stars (
|
||||
star_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
,star_user_id INTEGER
|
||||
,star_repo_id INTEGER
|
||||
);
|
||||
`
|
||||
|
||||
const stmtStarStarUserRepoIndex = `
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS ux_star_user_repo ON stars (star_user_id,star_repo_id);
|
||||
`
|
|
@ -83,8 +83,8 @@ FROM
|
|||
,repos r
|
||||
,stars s
|
||||
WHERE c.repo_id = r.repo_id
|
||||
AND r.repo_id = s.repo_id
|
||||
AND s.user_id = ?
|
||||
AND r.repo_id = s.star_repo_id
|
||||
AND s.star_user_id = ?
|
||||
ORDER BY c.commit_seq DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
|
Loading…
Reference in a new issue