mirror of
https://github.com/harness/drone.git
synced 2025-05-07 23:19:13 +08:00
using auto-gen sql utility
This commit is contained in:
parent
c59d02a64c
commit
dddc1dd84c
@ -1,62 +1,47 @@
|
|||||||
package builtin
|
package builtin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
"github.com/drone/drone/pkg/types"
|
||||||
common "github.com/drone/drone/pkg/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Buildstore struct {
|
type Buildstore struct {
|
||||||
meddler.DB
|
*sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBuildstore(db meddler.DB) *Buildstore {
|
func NewBuildstore(db *sql.DB) *Buildstore {
|
||||||
return &Buildstore{db}
|
return &Buildstore{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build returns a build by ID.
|
// Build returns a build by ID.
|
||||||
func (db *Buildstore) Build(id int64) (*common.Build, error) {
|
func (db *Buildstore) Build(id int64) (*types.Build, error) {
|
||||||
var build = new(common.Build)
|
return getBuild(db, rebind(stmtBuildSelect), id)
|
||||||
var err = meddler.Load(db, buildTable, build, id)
|
|
||||||
return build, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildSeq returns a build by sequence number.
|
// BuildSeq returns a build by sequence number.
|
||||||
func (db *Buildstore) BuildSeq(commit *common.Commit, seq int) (*common.Build, error) {
|
func (db *Buildstore) BuildSeq(commit *types.Commit, seq int) (*types.Build, error) {
|
||||||
var build = new(common.Build)
|
return getBuild(db, rebind(stmtBuildSelectBuildSeq), commit.ID, seq)
|
||||||
var err = meddler.QueryRow(db, build, rebind(buildNumberQuery), commit.ID, seq)
|
|
||||||
return build, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildList returns a list of all commit builds
|
// BuildList returns a list of all commit builds
|
||||||
func (db *Buildstore) BuildList(commit *common.Commit) ([]*common.Build, error) {
|
func (db *Buildstore) BuildList(commit *types.Commit) ([]*types.Build, error) {
|
||||||
var builds []*common.Build
|
return getBuilds(db, rebind(stmtBuildSelectBuildCommitId), commit.ID)
|
||||||
var err = meddler.QueryAll(db, &builds, rebind(buildListQuery), commit.ID)
|
|
||||||
return builds, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetBuild updates an existing build.
|
// SetBuild updates an existing build.
|
||||||
func (db *Buildstore) SetBuild(build *common.Build) error {
|
func (db *Buildstore) SetBuild(build *types.Build) error {
|
||||||
build.Updated = time.Now().UTC().Unix()
|
build.Updated = time.Now().UTC().Unix()
|
||||||
return meddler.Update(db, buildTable, build)
|
return updateBuild(db, rebind(stmtBuildUpdate), build)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddBuild inserts a build.
|
||||||
|
func (db *Buildstore) AddBuild(build *types.Build) error {
|
||||||
|
build.Created = time.Now().UTC().Unix()
|
||||||
|
build.Updated = time.Now().UTC().Unix()
|
||||||
|
return createBuild(db, rebind(stmtBuildInsert), build)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build table name in database.
|
// Build table name in database.
|
||||||
const buildTable = "builds"
|
const buildTable = "builds"
|
||||||
|
|
||||||
// SQL query to retrieve a token by label.
|
|
||||||
const buildListQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM builds
|
|
||||||
WHERE commit_id = ?
|
|
||||||
ORDER BY build_seq ASC
|
|
||||||
`
|
|
||||||
|
|
||||||
const buildNumberQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM builds
|
|
||||||
WHERE commit_id = ?
|
|
||||||
AND build_seq = ?
|
|
||||||
LIMIT 1;
|
|
||||||
`
|
|
||||||
|
355
pkg/store/builtin/build_sql.go
Normal file
355
pkg/store/builtin/build_sql.go
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
package builtin
|
||||||
|
|
||||||
|
// DO NOT EDIT
|
||||||
|
// code generated by go:generate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
. "github.com/drone/drone/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = json.Marshal
|
||||||
|
|
||||||
|
// generic database interface, matching both *sql.Db and *sql.Tx
|
||||||
|
type buildDB 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 getBuild(db buildDB, query string, args ...interface{}) (*Build, error) {
|
||||||
|
row := db.QueryRow(query, args...)
|
||||||
|
return scanBuild(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getBuilds(db buildDB, query string, args ...interface{}) ([]*Build, error) {
|
||||||
|
rows, err := db.Query(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return scanBuilds(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createBuild(db buildDB, query string, v *Build) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 int
|
||||||
|
var v3 int
|
||||||
|
var v4 int64
|
||||||
|
var v5 int64
|
||||||
|
var v6 int64
|
||||||
|
var v7 int64
|
||||||
|
var v8 int64
|
||||||
|
var v9 []byte
|
||||||
|
v0 = v.CommitID
|
||||||
|
v1 = v.State
|
||||||
|
v2 = v.ExitCode
|
||||||
|
v3 = v.Sequence
|
||||||
|
v4 = v.Duration
|
||||||
|
v5 = v.Started
|
||||||
|
v6 = v.Finished
|
||||||
|
v7 = v.Created
|
||||||
|
v8 = v.Updated
|
||||||
|
v9, _ = json.Marshal(v.Environment)
|
||||||
|
|
||||||
|
res, err := db.Exec(query,
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.ID, err = res.LastInsertId()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateBuild(db buildDB, query string, v *Build) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 int
|
||||||
|
var v4 int
|
||||||
|
var v5 int64
|
||||||
|
var v6 int64
|
||||||
|
var v7 int64
|
||||||
|
var v8 int64
|
||||||
|
var v9 int64
|
||||||
|
var v10 []byte
|
||||||
|
v0 = v.ID
|
||||||
|
v1 = v.CommitID
|
||||||
|
v2 = v.State
|
||||||
|
v3 = v.ExitCode
|
||||||
|
v4 = v.Sequence
|
||||||
|
v5 = v.Duration
|
||||||
|
v6 = v.Started
|
||||||
|
v7 = v.Finished
|
||||||
|
v8 = v.Created
|
||||||
|
v9 = v.Updated
|
||||||
|
v10, _ = json.Marshal(v.Environment)
|
||||||
|
|
||||||
|
_, err := db.Exec(query,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v0,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanBuild(row *sql.Row) (*Build, error) {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 int
|
||||||
|
var v4 int
|
||||||
|
var v5 int64
|
||||||
|
var v6 int64
|
||||||
|
var v7 int64
|
||||||
|
var v8 int64
|
||||||
|
var v9 int64
|
||||||
|
var v10 []byte
|
||||||
|
|
||||||
|
err := row.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Build{}
|
||||||
|
v.ID = v0
|
||||||
|
v.CommitID = v1
|
||||||
|
v.State = v2
|
||||||
|
v.ExitCode = v3
|
||||||
|
v.Sequence = v4
|
||||||
|
v.Duration = v5
|
||||||
|
v.Started = v6
|
||||||
|
v.Finished = v7
|
||||||
|
v.Created = v8
|
||||||
|
v.Updated = v9
|
||||||
|
json.Unmarshal(v10, &v.Environment)
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanBuilds(rows *sql.Rows) ([]*Build, error) {
|
||||||
|
var err error
|
||||||
|
var vv []*Build
|
||||||
|
for rows.Next() {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 int
|
||||||
|
var v4 int
|
||||||
|
var v5 int64
|
||||||
|
var v6 int64
|
||||||
|
var v7 int64
|
||||||
|
var v8 int64
|
||||||
|
var v9 int64
|
||||||
|
var v10 []byte
|
||||||
|
err = rows.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return vv, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Build{}
|
||||||
|
v.ID = v0
|
||||||
|
v.CommitID = v1
|
||||||
|
v.State = v2
|
||||||
|
v.ExitCode = v3
|
||||||
|
v.Sequence = v4
|
||||||
|
v.Duration = v5
|
||||||
|
v.Started = v6
|
||||||
|
v.Finished = v7
|
||||||
|
v.Created = v8
|
||||||
|
v.Updated = v9
|
||||||
|
json.Unmarshal(v10, &v.Environment)
|
||||||
|
vv = append(vv, v)
|
||||||
|
}
|
||||||
|
return vv, rows.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
const stmtBuildSelectList = `
|
||||||
|
SELECT
|
||||||
|
build_id
|
||||||
|
,build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
FROM builds
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildSelectRange = `
|
||||||
|
SELECT
|
||||||
|
build_id
|
||||||
|
,build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
FROM builds
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildSelect = `
|
||||||
|
SELECT
|
||||||
|
build_id
|
||||||
|
,build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
FROM builds
|
||||||
|
WHERE build_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildSelectBuildCommitId = `
|
||||||
|
SELECT
|
||||||
|
build_id
|
||||||
|
,build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
FROM builds
|
||||||
|
WHERE build_commit_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildSelectBuildSeq = `
|
||||||
|
SELECT
|
||||||
|
build_id
|
||||||
|
,build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
FROM builds
|
||||||
|
WHERE build_commit_id = ?
|
||||||
|
AND build_sequence = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildInsert = `
|
||||||
|
INSERT INTO builds (
|
||||||
|
build_commit_id
|
||||||
|
,build_state
|
||||||
|
,build_exit_code
|
||||||
|
,build_sequence
|
||||||
|
,build_duration
|
||||||
|
,build_started
|
||||||
|
,build_finished
|
||||||
|
,build_created
|
||||||
|
,build_updated
|
||||||
|
,build_environment
|
||||||
|
) VALUES (?,?,?,?,?,?,?,?,?,?);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildUpdate = `
|
||||||
|
UPDATE builds SET
|
||||||
|
build_commit_id = ?
|
||||||
|
,build_state = ?
|
||||||
|
,build_exit_code = ?
|
||||||
|
,build_sequence = ?
|
||||||
|
,build_duration = ?
|
||||||
|
,build_started = ?
|
||||||
|
,build_finished = ?
|
||||||
|
,build_created = ?
|
||||||
|
,build_updated = ?
|
||||||
|
,build_environment = ?
|
||||||
|
WHERE build_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildDelete = `
|
||||||
|
DELETE FROM builds
|
||||||
|
WHERE build_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildTable = `
|
||||||
|
CREATE TABLE IF NOT EXISTS builds (
|
||||||
|
build_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,build_commit_id INTEGER
|
||||||
|
,build_state VARCHAR
|
||||||
|
,build_exit_code INTEGER
|
||||||
|
,build_sequence INTEGER
|
||||||
|
,build_duration INTEGER
|
||||||
|
,build_started INTEGER
|
||||||
|
,build_finished INTEGER
|
||||||
|
,build_created INTEGER
|
||||||
|
,build_updated INTEGER
|
||||||
|
,build_environment VARCHAR(2048)
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildBuildCommitIdIndex = `
|
||||||
|
CREATE INDEX IF NOT EXISTS ix_build_commit_id ON builds (build_commit_id);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtBuildBuildSeqIndex = `
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_build_seq ON builds (build_commit_id,build_sequence);
|
||||||
|
`
|
@ -1,9 +1,11 @@
|
|||||||
package builtin
|
package builtin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/franela/goblin"
|
|
||||||
common "github.com/drone/drone/pkg/types"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/bradrydzewski/drone/common"
|
||||||
|
"github.com/drone/drone/Godeps/_workspace/src/github.com/franela/goblin"
|
||||||
|
"github.com/drone/drone/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBuildstore(t *testing.T) {
|
func TestBuildstore(t *testing.T) {
|
||||||
@ -21,139 +23,80 @@ func TestBuildstore(t *testing.T) {
|
|||||||
db.Exec("DELETE FROM commits")
|
db.Exec("DELETE FROM commits")
|
||||||
})
|
})
|
||||||
|
|
||||||
g.It("Should update an existing build in the datastore", func() {
|
g.It("Should Set a build", func() {
|
||||||
buildList := []*common.Build{
|
build := &types.Build{
|
||||||
&common.Build{
|
CommitID: 1,
|
||||||
CommitID: 1,
|
State: "pending",
|
||||||
State: "success",
|
ExitCode: 0,
|
||||||
ExitCode: 0,
|
Sequence: 1,
|
||||||
Sequence: 1,
|
|
||||||
},
|
|
||||||
&common.Build{
|
|
||||||
CommitID: 3,
|
|
||||||
State: "error",
|
|
||||||
ExitCode: 1,
|
|
||||||
Sequence: 2,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
//In order for buid to be populated,
|
err1 := bs.AddBuild(build)
|
||||||
//The AddCommit command will insert builds
|
|
||||||
//if the Commit.Builds array is populated
|
|
||||||
//Add Commit.
|
|
||||||
commit1 := common.Commit{
|
|
||||||
RepoID: 1,
|
|
||||||
State: common.StateSuccess,
|
|
||||||
Ref: "refs/heads/master",
|
|
||||||
Sha: "14710626f22791619d3b7e9ccf58b10374e5b76d",
|
|
||||||
Builds: buildList,
|
|
||||||
}
|
|
||||||
//Add commit, build, retrieve 2nd, update it and recheck it.
|
|
||||||
err1 := cs.AddCommit(&commit1)
|
|
||||||
g.Assert(err1 == nil).IsTrue()
|
g.Assert(err1 == nil).IsTrue()
|
||||||
g.Assert(commit1.ID != 0).IsTrue()
|
g.Assert(build.ID != 0).IsTrue()
|
||||||
g.Assert(commit1.Sequence).Equal(1)
|
|
||||||
//
|
build.State = "started"
|
||||||
build, err2 := bs.Build(commit1.Builds[1].ID)
|
err2 := bs.SetBuild(build)
|
||||||
g.Assert(err2 == nil).IsTrue()
|
g.Assert(err2 == nil).IsTrue()
|
||||||
g.Assert(build.ID).Equal(commit1.Builds[1].ID)
|
|
||||||
build.State = common.StatePending
|
getbuild, err3 := bs.Build(build.ID)
|
||||||
err1 = bs.SetBuild(build)
|
g.Assert(err3 == nil).IsTrue()
|
||||||
g.Assert(err1 == nil).IsTrue()
|
g.Assert(getbuild.State).Equal(build.State)
|
||||||
build, err2 = bs.Build(commit1.Builds[1].ID)
|
|
||||||
g.Assert(build.ID).Equal(commit1.Builds[1].ID)
|
|
||||||
g.Assert(build.State).Equal(common.StatePending)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
g.It("Should return a build by ID", func() {
|
g.It("Should Get a Build by ID", func() {
|
||||||
buildList := []*common.Build{
|
build := &types.Build{
|
||||||
&common.Build{
|
CommitID: 1,
|
||||||
CommitID: 1,
|
State: "pending",
|
||||||
State: "success",
|
ExitCode: 1,
|
||||||
ExitCode: 0,
|
Sequence: 1,
|
||||||
Sequence: 1,
|
Environment: map[string]string{"foo": "bar"},
|
||||||
},
|
|
||||||
&common.Build{
|
|
||||||
CommitID: 3,
|
|
||||||
State: "error",
|
|
||||||
ExitCode: 1,
|
|
||||||
Sequence: 2,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
//In order for buid to be populated,
|
err1 := bs.AddBuild(build)
|
||||||
//The AddCommit command will insert builds
|
|
||||||
//if the Commit.Builds array is populated
|
|
||||||
//Add Commit.
|
|
||||||
commit1 := common.Commit{
|
|
||||||
RepoID: 1,
|
|
||||||
State: common.StateSuccess,
|
|
||||||
Ref: "refs/heads/master",
|
|
||||||
Sha: "14710626f22791619d3b7e9ccf58b10374e5b76d",
|
|
||||||
Builds: buildList,
|
|
||||||
}
|
|
||||||
//Add commit, build, retrieve 2nd build ID.
|
|
||||||
err1 := cs.AddCommit(&commit1)
|
|
||||||
g.Assert(err1 == nil).IsTrue()
|
g.Assert(err1 == nil).IsTrue()
|
||||||
g.Assert(commit1.ID != 0).IsTrue()
|
g.Assert(build.ID != 0).IsTrue()
|
||||||
g.Assert(commit1.Sequence).Equal(1)
|
|
||||||
//
|
getbuild, err2 := bs.Build(build.ID)
|
||||||
build, err2 := bs.Build(commit1.Builds[1].ID)
|
|
||||||
g.Assert(err2 == nil).IsTrue()
|
g.Assert(err2 == nil).IsTrue()
|
||||||
g.Assert(build.ID).Equal(commit1.Builds[1].ID)
|
g.Assert(getbuild.ID).Equal(build.ID)
|
||||||
|
g.Assert(getbuild.State).Equal(build.State)
|
||||||
|
g.Assert(getbuild.ExitCode).Equal(build.ExitCode)
|
||||||
|
g.Assert(getbuild.Environment).Equal(build.Environment)
|
||||||
|
g.Assert(getbuild.Environment["foo"]).Equal("bar")
|
||||||
})
|
})
|
||||||
|
|
||||||
g.It("Should return a build by Sequence", func() {
|
g.It("Should Get a Build by Sequence", func() {
|
||||||
buildList := []*common.Build{
|
build := &types.Build{
|
||||||
&common.Build{
|
CommitID: 1,
|
||||||
CommitID: 1,
|
State: "pending",
|
||||||
State: "success",
|
ExitCode: 1,
|
||||||
ExitCode: 0,
|
Sequence: 1,
|
||||||
Sequence: 1,
|
|
||||||
},
|
|
||||||
&common.Build{
|
|
||||||
CommitID: 3,
|
|
||||||
State: "error",
|
|
||||||
ExitCode: 1,
|
|
||||||
Sequence: 2,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
//In order for buid to be populated,
|
err1 := bs.AddBuild(build)
|
||||||
//The AddCommit command will insert builds
|
|
||||||
//if the Commit.Builds array is populated
|
|
||||||
//Add Commit.
|
|
||||||
commit1 := common.Commit{
|
|
||||||
RepoID: 1,
|
|
||||||
State: common.StateSuccess,
|
|
||||||
Ref: "refs/heads/master",
|
|
||||||
Sha: "14710626f22791619d3b7e9ccf58b10374e5b76d",
|
|
||||||
Builds: buildList,
|
|
||||||
}
|
|
||||||
//Add commit, build, retrieve 2nd build ID.
|
|
||||||
err1 := cs.AddCommit(&commit1)
|
|
||||||
g.Assert(err1 == nil).IsTrue()
|
g.Assert(err1 == nil).IsTrue()
|
||||||
g.Assert(commit1.ID != 0).IsTrue()
|
g.Assert(build.ID != 0).IsTrue()
|
||||||
g.Assert(commit1.Sequence).Equal(1)
|
|
||||||
//
|
getbuild, err2 := bs.BuildSeq(&types.Commit{ID: 1}, 1)
|
||||||
build, err2 := bs.BuildSeq(&commit1, commit1.Builds[1].Sequence)
|
|
||||||
g.Assert(err2 == nil).IsTrue()
|
g.Assert(err2 == nil).IsTrue()
|
||||||
g.Assert(build.Sequence).Equal(commit1.Builds[1].Sequence)
|
g.Assert(getbuild.ID).Equal(build.ID)
|
||||||
|
g.Assert(getbuild.State).Equal(build.State)
|
||||||
})
|
})
|
||||||
|
|
||||||
g.It("Should return a list of all commit builds", func() {
|
g.It("Should Get a List of Builds by Commit", func() {
|
||||||
//Add repo
|
//Add repo
|
||||||
buildList := []*common.Build{
|
buildList := []*types.Build{
|
||||||
&common.Build{
|
&types.Build{
|
||||||
CommitID: 1,
|
CommitID: 1,
|
||||||
State: "success",
|
State: "success",
|
||||||
ExitCode: 0,
|
ExitCode: 0,
|
||||||
Sequence: 1,
|
Sequence: 1,
|
||||||
},
|
},
|
||||||
&common.Build{
|
&types.Build{
|
||||||
CommitID: 3,
|
CommitID: 3,
|
||||||
State: "error",
|
State: "error",
|
||||||
ExitCode: 1,
|
ExitCode: 1,
|
||||||
Sequence: 2,
|
Sequence: 2,
|
||||||
},
|
},
|
||||||
&common.Build{
|
&types.Build{
|
||||||
CommitID: 5,
|
CommitID: 5,
|
||||||
State: "pending",
|
State: "pending",
|
||||||
ExitCode: 0,
|
ExitCode: 0,
|
||||||
@ -164,7 +107,7 @@ func TestBuildstore(t *testing.T) {
|
|||||||
//The AddCommit command will insert builds
|
//The AddCommit command will insert builds
|
||||||
//if the Commit.Builds array is populated
|
//if the Commit.Builds array is populated
|
||||||
//Add Commit.
|
//Add Commit.
|
||||||
commit1 := common.Commit{
|
commit1 := types.Commit{
|
||||||
RepoID: 1,
|
RepoID: 1,
|
||||||
State: common.StateSuccess,
|
State: common.StateSuccess,
|
||||||
Ref: "refs/heads/master",
|
Ref: "refs/heads/master",
|
||||||
|
@ -11,10 +11,6 @@ func Setup(tx migration.LimitedTx) error {
|
|||||||
userTable,
|
userTable,
|
||||||
starTable,
|
starTable,
|
||||||
repoTable,
|
repoTable,
|
||||||
repoKeyTable,
|
|
||||||
repoKeyIndex,
|
|
||||||
repoParamTable,
|
|
||||||
repoParamsIndex,
|
|
||||||
repoUserIndex,
|
repoUserIndex,
|
||||||
commitTable,
|
commitTable,
|
||||||
commitRepoIndex,
|
commitRepoIndex,
|
||||||
@ -55,20 +51,20 @@ CREATE TABLE IF NOT EXISTS users (
|
|||||||
var repoTable = `
|
var repoTable = `
|
||||||
CREATE TABLE IF NOT EXISTS repos (
|
CREATE TABLE IF NOT EXISTS repos (
|
||||||
repo_id INTEGER PRIMARY KEY AUTOINCREMENT
|
repo_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
,user_id INTEGER
|
,repo_user_id INTEGER
|
||||||
,repo_owner VARCHAR(255)
|
,repo_owner VARCHAR(255)
|
||||||
,repo_name VARCHAR(255)
|
,repo_name VARCHAR(255)
|
||||||
,repo_slug VARCHAR(1024)
|
,repo_full_name VARCHAR(1024)
|
||||||
,repo_token VARCHAR(255)
|
,repo_token VARCHAR(255)
|
||||||
,repo_lang VARCHAR(255)
|
,repo_language VARCHAR(255)
|
||||||
,repo_branch VARCHAR(255)
|
,repo_branch VARCHAR(255)
|
||||||
,repo_private BOOLEAN
|
,repo_private BOOLEAN
|
||||||
,repo_trusted BOOLEAN
|
,repo_trusted BOOLEAN
|
||||||
,repo_self VARCHAR(1024)
|
,repo_self VARCHAR(1024)
|
||||||
,repo_link VARCHAR(1024)
|
,repo_link VARCHAR(1024)
|
||||||
,repo_clone VARCHAR(1024)
|
,repo_clone VARCHAR(1024)
|
||||||
,repo_push BOOLEAN
|
,repo_post_commit BOOLEAN
|
||||||
,repo_pull BOOLEAN
|
,repo_pull_request BOOLEAN
|
||||||
,repo_public_key BLOB
|
,repo_public_key BLOB
|
||||||
,repo_private_key BLOB
|
,repo_private_key BLOB
|
||||||
,repo_params BLOB
|
,repo_params BLOB
|
||||||
@ -76,40 +72,40 @@ CREATE TABLE IF NOT EXISTS repos (
|
|||||||
,repo_created INTEGER
|
,repo_created INTEGER
|
||||||
,repo_updated INTEGER
|
,repo_updated INTEGER
|
||||||
,UNIQUE(repo_owner, repo_name)
|
,UNIQUE(repo_owner, repo_name)
|
||||||
,UNIQUE(repo_slug)
|
,UNIQUE(repo_full_name)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
var repoUserIndex = `
|
var repoUserIndex = `
|
||||||
CREATE INDEX repos_user_idx ON repos (user_id);
|
CREATE INDEX repos_user_idx ON repos (repo_user_id);
|
||||||
`
|
`
|
||||||
|
|
||||||
var repoKeyTable = `
|
// var repoKeyTable = `
|
||||||
CREATE TABLE IF NOT EXISTS repo_keys (
|
// CREATE TABLE IF NOT EXISTS repo_keys (
|
||||||
keys_id INTEGER PRIMARY KEY AUTOINCREMENT
|
// keys_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
,repo_id INTEGER
|
// ,repo_id INTEGER
|
||||||
,keys_public BLOB
|
// ,keys_public BLOB
|
||||||
,keys_private BLOB
|
// ,keys_private BLOB
|
||||||
,UNIQUE(repo_id)
|
// ,UNIQUE(repo_id)
|
||||||
);
|
// );
|
||||||
`
|
// `
|
||||||
|
//
|
||||||
|
// var repoKeyIndex = `
|
||||||
|
// CREATE INDEX keys_repo_idx ON repo_keys (repo_id);
|
||||||
|
// `
|
||||||
|
|
||||||
var repoKeyIndex = `
|
// var repoParamTable = `
|
||||||
CREATE INDEX keys_repo_idx ON repo_keys (repo_id);
|
// CREATE TABLE IF NOT EXISTS repo_params (
|
||||||
`
|
// param_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
// ,repo_id INTEGER
|
||||||
var repoParamTable = `
|
// ,param_map BLOB
|
||||||
CREATE TABLE IF NOT EXISTS repo_params (
|
// ,UNIQUE(repo_id)
|
||||||
param_id INTEGER PRIMARY KEY AUTOINCREMENT
|
// );
|
||||||
,repo_id INTEGER
|
// `
|
||||||
,param_map BLOB
|
//
|
||||||
,UNIQUE(repo_id)
|
// var repoParamsIndex = `
|
||||||
);
|
// CREATE INDEX params_repo_idx ON repo_params (repo_id);
|
||||||
`
|
// `
|
||||||
|
|
||||||
var repoParamsIndex = `
|
|
||||||
CREATE INDEX params_repo_idx ON repo_params (repo_id);
|
|
||||||
`
|
|
||||||
|
|
||||||
var starTable = `
|
var starTable = `
|
||||||
CREATE TABLE IF NOT EXISTS stars (
|
CREATE TABLE IF NOT EXISTS stars (
|
||||||
@ -152,38 +148,38 @@ CREATE INDEX commits_repo_idx ON commits (repo_id);
|
|||||||
var tokenTable = `
|
var tokenTable = `
|
||||||
CREATE TABLE IF NOT EXISTS tokens (
|
CREATE TABLE IF NOT EXISTS tokens (
|
||||||
token_id INTEGER PRIMARY KEY AUTOINCREMENT
|
token_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
,user_id INTEGER
|
,token_user_id INTEGER
|
||||||
,token_kind VARCHAR(255)
|
,token_kind VARCHAR(255)
|
||||||
,token_label VARCHAR(255)
|
,token_label VARCHAR(255)
|
||||||
,token_expiry INTEGER
|
,token_expiry INTEGER
|
||||||
,token_issued INTEGER
|
,token_issued INTEGER
|
||||||
,UNIQUE(user_id, token_label)
|
,UNIQUE(token_user_id, token_label)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
var tokenUserIndex = `
|
var tokenUserIndex = `
|
||||||
CREATE INDEX tokens_user_idx ON tokens (user_id);
|
CREATE INDEX tokens_user_idx ON tokens (token_user_id);
|
||||||
`
|
`
|
||||||
|
|
||||||
var buildTable = `
|
var buildTable = `
|
||||||
CREATE TABLE IF NOT EXISTS builds (
|
CREATE TABLE IF NOT EXISTS builds (
|
||||||
build_id INTEGER PRIMARY KEY AUTOINCREMENT
|
build_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
,commit_id INTEGER
|
,build_commit_id INTEGER
|
||||||
,build_seq INTEGER
|
,build_sequence INTEGER
|
||||||
,build_state VARCHAR(255)
|
,build_state VARCHAR(255)
|
||||||
,build_exit INTEGER
|
,build_exit_code INTEGER
|
||||||
,build_duration INTEGER
|
,build_duration INTEGER
|
||||||
,build_started INTEGER
|
,build_started INTEGER
|
||||||
,build_finished INTEGER
|
,build_finished INTEGER
|
||||||
,build_created INTEGER
|
,build_created INTEGER
|
||||||
,build_updated INTEGER
|
,build_updated INTEGER
|
||||||
,build_env BLOB
|
,build_environment VARCHAR(2000)
|
||||||
,UNIQUE(commit_id, build_seq)
|
,UNIQUE(build_commit_id, build_sequence)
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
var buildCommitIndex = `
|
var buildCommitIndex = `
|
||||||
CREATE INDEX builds_commit_idx ON builds (commit_id);
|
CREATE INDEX builds_commit_idx ON builds (build_commit_id);
|
||||||
`
|
`
|
||||||
|
|
||||||
var statusTable = `
|
var statusTable = `
|
||||||
|
@ -4,8 +4,7 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
"github.com/drone/drone/pkg/types"
|
||||||
common "github.com/drone/drone/pkg/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Repostore struct {
|
type Repostore struct {
|
||||||
@ -18,95 +17,69 @@ func NewRepostore(db *sql.DB) *Repostore {
|
|||||||
|
|
||||||
// Repo retrieves a specific repo from the
|
// Repo retrieves a specific repo from the
|
||||||
// datastore for the given ID.
|
// datastore for the given ID.
|
||||||
func (db *Repostore) Repo(id int64) (*common.Repo, error) {
|
func (db *Repostore) Repo(id int64) (*types.Repo, error) {
|
||||||
var repo = new(common.Repo)
|
return getRepo(db, rebind(stmtRepoSelect), id)
|
||||||
var err = meddler.Load(db, repoTable, repo, id)
|
|
||||||
return repo, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RepoName retrieves a repo from the datastore
|
// RepoName retrieves a repo from the datastore
|
||||||
// for the specified name.
|
// for the specified name.
|
||||||
func (db *Repostore) RepoName(owner, name string) (*common.Repo, error) {
|
func (db *Repostore) RepoName(owner, name string) (*types.Repo, error) {
|
||||||
var repo = new(common.Repo)
|
return getRepo(db, rebind(stmtRepoSelectRepoOwnerName), owner, name)
|
||||||
var err = meddler.QueryRow(db, repo, rebind(repoNameQuery), owner, name)
|
|
||||||
return repo, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RepoList retrieves a list of all repos from
|
// RepoList retrieves a list of all repos from
|
||||||
// the datastore accessible by the given user ID.
|
// the datastore accessible by the given user ID.
|
||||||
func (db *Repostore) RepoList(user *common.User) ([]*common.Repo, error) {
|
func (db *Repostore) RepoList(user *types.User) ([]*types.Repo, error) {
|
||||||
var repos []*common.Repo
|
return getRepos(db, rebind(repoListQuery), user.ID)
|
||||||
var err = meddler.QueryAll(db, &repos, rebind(repoListQuery), user.ID)
|
|
||||||
return repos, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddRepo inserts a repo in the datastore.
|
// AddRepo inserts a repo in the datastore.
|
||||||
func (db *Repostore) AddRepo(repo *common.Repo) error {
|
func (db *Repostore) AddRepo(repo *types.Repo) error {
|
||||||
repo.Created = time.Now().UTC().Unix()
|
repo.Created = time.Now().UTC().Unix()
|
||||||
repo.Updated = time.Now().UTC().Unix()
|
repo.Updated = time.Now().UTC().Unix()
|
||||||
return meddler.Insert(db, repoTable, repo)
|
return createRepo(db, rebind(stmtRepoInsert), repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetRepo updates a repo in the datastore.
|
// SetRepo updates a repo in the datastore.
|
||||||
func (db *Repostore) SetRepo(repo *common.Repo) error {
|
func (db *Repostore) SetRepo(repo *types.Repo) error {
|
||||||
repo.Updated = time.Now().UTC().Unix()
|
repo.Updated = time.Now().UTC().Unix()
|
||||||
return meddler.Update(db, repoTable, repo)
|
return updateRepo(db, rebind(stmtRepoUpdate), repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DelRepo removes the repo from the datastore.
|
// DelRepo removes the repo from the datastore.
|
||||||
func (db *Repostore) DelRepo(repo *common.Repo) error {
|
func (db *Repostore) DelRepo(repo *types.Repo) error {
|
||||||
var _, err = db.Exec(rebind(repoDeleteStmt), repo.ID)
|
var _, err = db.Exec(rebind(stmtRepoDelete), repo.ID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Repo table names in database.
|
|
||||||
const (
|
|
||||||
repoTable = "repos"
|
|
||||||
repoKeyTable = "repo_keys"
|
|
||||||
repoParamTable = "repo_params"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SQL statement to retrieve a Repo by name.
|
|
||||||
const repoNameQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM repos
|
|
||||||
WHERE repo_owner = ?
|
|
||||||
AND repo_name = ?
|
|
||||||
LIMIT 1;
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL statement to retrieve a list of Repos
|
// SQL statement to retrieve a list of Repos
|
||||||
// with permissions for the given User ID.
|
// with permissions for the given User ID.
|
||||||
const repoListQuery = `
|
const repoListQuery = `
|
||||||
SELECT r.*
|
SELECT
|
||||||
|
r.repo_id
|
||||||
|
,r.repo_user_id
|
||||||
|
,r.repo_owner
|
||||||
|
,r.repo_name
|
||||||
|
,r.repo_full_name
|
||||||
|
,r.repo_token
|
||||||
|
,r.repo_language
|
||||||
|
,r.repo_private
|
||||||
|
,r.repo_self
|
||||||
|
,r.repo_link
|
||||||
|
,r.repo_clone
|
||||||
|
,r.repo_branch
|
||||||
|
,r.repo_timeout
|
||||||
|
,r.repo_trusted
|
||||||
|
,r.repo_post_commit
|
||||||
|
,r.repo_pull_request
|
||||||
|
,r.repo_public_key
|
||||||
|
,r.repo_private_key
|
||||||
|
,r.repo_created
|
||||||
|
,r.repo_updated
|
||||||
|
,r.repo_params
|
||||||
FROM
|
FROM
|
||||||
repos r
|
repos r
|
||||||
,stars s
|
,stars s
|
||||||
WHERE r.repo_id = s.repo_id
|
WHERE r.repo_id = s.repo_id
|
||||||
AND s.user_id = ?
|
AND s.user_id = ?
|
||||||
`
|
`
|
||||||
|
|
||||||
// SQL statement to retrieve a keypair for
|
|
||||||
// a Repository.
|
|
||||||
const repoKeysQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM repo_keys
|
|
||||||
WHERE repo_id = ?
|
|
||||||
LIMIT 1;
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL statement to retrieve a keypair for
|
|
||||||
// a Repository.
|
|
||||||
const repoParamsQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM repo_params
|
|
||||||
WHERE repo_id = ?
|
|
||||||
LIMIT 1;
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL statement to delete a User by ID.
|
|
||||||
const (
|
|
||||||
repoDeleteStmt = `DELETE FROM repos WHERE repo_id = ?`
|
|
||||||
repoKeypairDeleteStmt = `DELETE FROM repo_params WHERE repo_id = ?`
|
|
||||||
repoParamsDeleteStmt = `DELETE FROM repo_keys WHERE repo_id = ?`
|
|
||||||
)
|
|
||||||
|
555
pkg/store/builtin/repo_sql.go
Normal file
555
pkg/store/builtin/repo_sql.go
Normal file
@ -0,0 +1,555 @@
|
|||||||
|
package builtin
|
||||||
|
|
||||||
|
// DO NOT EDIT
|
||||||
|
// code generated by go:generate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
. "github.com/drone/drone/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = json.Marshal
|
||||||
|
|
||||||
|
// generic database interface, matching both *sql.Db and *sql.Tx
|
||||||
|
type repoDB 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 getRepo(db repoDB, query string, args ...interface{}) (*Repo, error) {
|
||||||
|
row := db.QueryRow(query, args...)
|
||||||
|
return scanRepo(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getRepos(db repoDB, query string, args ...interface{}) ([]*Repo, error) {
|
||||||
|
rows, err := db.Query(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return scanRepos(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createRepo(db repoDB, query string, v *Repo) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 bool
|
||||||
|
var v7 string
|
||||||
|
var v8 string
|
||||||
|
var v9 string
|
||||||
|
var v10 string
|
||||||
|
var v11 int64
|
||||||
|
var v12 bool
|
||||||
|
var v13 bool
|
||||||
|
var v14 bool
|
||||||
|
var v15 string
|
||||||
|
var v16 string
|
||||||
|
var v17 int64
|
||||||
|
var v18 int64
|
||||||
|
var v19 []byte
|
||||||
|
v0 = v.UserID
|
||||||
|
v1 = v.Owner
|
||||||
|
v2 = v.Name
|
||||||
|
v3 = v.FullName
|
||||||
|
v4 = v.Token
|
||||||
|
v5 = v.Language
|
||||||
|
v6 = v.Private
|
||||||
|
v7 = v.Self
|
||||||
|
v8 = v.Link
|
||||||
|
v9 = v.Clone
|
||||||
|
v10 = v.Branch
|
||||||
|
v11 = v.Timeout
|
||||||
|
v12 = v.Trusted
|
||||||
|
v13 = v.PostCommit
|
||||||
|
v14 = v.PullRequest
|
||||||
|
v15 = v.PublicKey
|
||||||
|
v16 = v.PrivateKey
|
||||||
|
v17 = v.Created
|
||||||
|
v18 = v.Updated
|
||||||
|
v19, _ = json.Marshal(v.Params)
|
||||||
|
|
||||||
|
res, err := db.Exec(query,
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v11,
|
||||||
|
&v12,
|
||||||
|
&v13,
|
||||||
|
&v14,
|
||||||
|
&v15,
|
||||||
|
&v16,
|
||||||
|
&v17,
|
||||||
|
&v18,
|
||||||
|
&v19,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.ID, err = res.LastInsertId()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateRepo(db repoDB, query string, v *Repo) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 string
|
||||||
|
var v9 string
|
||||||
|
var v10 string
|
||||||
|
var v11 string
|
||||||
|
var v12 int64
|
||||||
|
var v13 bool
|
||||||
|
var v14 bool
|
||||||
|
var v15 bool
|
||||||
|
var v16 string
|
||||||
|
var v17 string
|
||||||
|
var v18 int64
|
||||||
|
var v19 int64
|
||||||
|
var v20 []byte
|
||||||
|
v0 = v.ID
|
||||||
|
v1 = v.UserID
|
||||||
|
v2 = v.Owner
|
||||||
|
v3 = v.Name
|
||||||
|
v4 = v.FullName
|
||||||
|
v5 = v.Token
|
||||||
|
v6 = v.Language
|
||||||
|
v7 = v.Private
|
||||||
|
v8 = v.Self
|
||||||
|
v9 = v.Link
|
||||||
|
v10 = v.Clone
|
||||||
|
v11 = v.Branch
|
||||||
|
v12 = v.Timeout
|
||||||
|
v13 = v.Trusted
|
||||||
|
v14 = v.PostCommit
|
||||||
|
v15 = v.PullRequest
|
||||||
|
v16 = v.PublicKey
|
||||||
|
v17 = v.PrivateKey
|
||||||
|
v18 = v.Created
|
||||||
|
v19 = v.Updated
|
||||||
|
v20, _ = json.Marshal(v.Params)
|
||||||
|
|
||||||
|
_, err := db.Exec(query,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v11,
|
||||||
|
&v12,
|
||||||
|
&v13,
|
||||||
|
&v14,
|
||||||
|
&v15,
|
||||||
|
&v16,
|
||||||
|
&v17,
|
||||||
|
&v18,
|
||||||
|
&v19,
|
||||||
|
&v20,
|
||||||
|
&v0,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanRepo(row *sql.Row) (*Repo, error) {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 string
|
||||||
|
var v9 string
|
||||||
|
var v10 string
|
||||||
|
var v11 string
|
||||||
|
var v12 int64
|
||||||
|
var v13 bool
|
||||||
|
var v14 bool
|
||||||
|
var v15 bool
|
||||||
|
var v16 string
|
||||||
|
var v17 string
|
||||||
|
var v18 int64
|
||||||
|
var v19 int64
|
||||||
|
var v20 []byte
|
||||||
|
|
||||||
|
err := row.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v11,
|
||||||
|
&v12,
|
||||||
|
&v13,
|
||||||
|
&v14,
|
||||||
|
&v15,
|
||||||
|
&v16,
|
||||||
|
&v17,
|
||||||
|
&v18,
|
||||||
|
&v19,
|
||||||
|
&v20,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Repo{}
|
||||||
|
v.ID = v0
|
||||||
|
v.UserID = v1
|
||||||
|
v.Owner = v2
|
||||||
|
v.Name = v3
|
||||||
|
v.FullName = v4
|
||||||
|
v.Token = v5
|
||||||
|
v.Language = v6
|
||||||
|
v.Private = v7
|
||||||
|
v.Self = v8
|
||||||
|
v.Link = v9
|
||||||
|
v.Clone = v10
|
||||||
|
v.Branch = v11
|
||||||
|
v.Timeout = v12
|
||||||
|
v.Trusted = v13
|
||||||
|
v.PostCommit = v14
|
||||||
|
v.PullRequest = v15
|
||||||
|
v.PublicKey = v16
|
||||||
|
v.PrivateKey = v17
|
||||||
|
v.Created = v18
|
||||||
|
v.Updated = v19
|
||||||
|
json.Unmarshal(v20, &v.Params)
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanRepos(rows *sql.Rows) ([]*Repo, error) {
|
||||||
|
var err error
|
||||||
|
var vv []*Repo
|
||||||
|
for rows.Next() {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 string
|
||||||
|
var v9 string
|
||||||
|
var v10 string
|
||||||
|
var v11 string
|
||||||
|
var v12 int64
|
||||||
|
var v13 bool
|
||||||
|
var v14 bool
|
||||||
|
var v15 bool
|
||||||
|
var v16 string
|
||||||
|
var v17 string
|
||||||
|
var v18 int64
|
||||||
|
var v19 int64
|
||||||
|
var v20 []byte
|
||||||
|
err = rows.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v11,
|
||||||
|
&v12,
|
||||||
|
&v13,
|
||||||
|
&v14,
|
||||||
|
&v15,
|
||||||
|
&v16,
|
||||||
|
&v17,
|
||||||
|
&v18,
|
||||||
|
&v19,
|
||||||
|
&v20,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return vv, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Repo{}
|
||||||
|
v.ID = v0
|
||||||
|
v.UserID = v1
|
||||||
|
v.Owner = v2
|
||||||
|
v.Name = v3
|
||||||
|
v.FullName = v4
|
||||||
|
v.Token = v5
|
||||||
|
v.Language = v6
|
||||||
|
v.Private = v7
|
||||||
|
v.Self = v8
|
||||||
|
v.Link = v9
|
||||||
|
v.Clone = v10
|
||||||
|
v.Branch = v11
|
||||||
|
v.Timeout = v12
|
||||||
|
v.Trusted = v13
|
||||||
|
v.PostCommit = v14
|
||||||
|
v.PullRequest = v15
|
||||||
|
v.PublicKey = v16
|
||||||
|
v.PrivateKey = v17
|
||||||
|
v.Created = v18
|
||||||
|
v.Updated = v19
|
||||||
|
json.Unmarshal(v20, &v.Params)
|
||||||
|
vv = append(vv, v)
|
||||||
|
}
|
||||||
|
return vv, rows.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
const stmtRepoSelectList = `
|
||||||
|
SELECT
|
||||||
|
repo_id
|
||||||
|
,repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
FROM repos
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoSelectRange = `
|
||||||
|
SELECT
|
||||||
|
repo_id
|
||||||
|
,repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
FROM repos
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoSelect = `
|
||||||
|
SELECT
|
||||||
|
repo_id
|
||||||
|
,repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
FROM repos
|
||||||
|
WHERE repo_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoSelectRepoOwnerName = `
|
||||||
|
SELECT
|
||||||
|
repo_id
|
||||||
|
,repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
FROM repos
|
||||||
|
WHERE repo_owner = ?
|
||||||
|
AND repo_name = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoSelectRepoFullName = `
|
||||||
|
SELECT
|
||||||
|
repo_id
|
||||||
|
,repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
FROM repos
|
||||||
|
WHERE repo_full_name = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoInsert = `
|
||||||
|
INSERT INTO repos (
|
||||||
|
repo_user_id
|
||||||
|
,repo_owner
|
||||||
|
,repo_name
|
||||||
|
,repo_full_name
|
||||||
|
,repo_token
|
||||||
|
,repo_language
|
||||||
|
,repo_private
|
||||||
|
,repo_self
|
||||||
|
,repo_link
|
||||||
|
,repo_clone
|
||||||
|
,repo_branch
|
||||||
|
,repo_timeout
|
||||||
|
,repo_trusted
|
||||||
|
,repo_post_commit
|
||||||
|
,repo_pull_request
|
||||||
|
,repo_public_key
|
||||||
|
,repo_private_key
|
||||||
|
,repo_created
|
||||||
|
,repo_updated
|
||||||
|
,repo_params
|
||||||
|
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoUpdate = `
|
||||||
|
UPDATE repos SET
|
||||||
|
repo_user_id = ?
|
||||||
|
,repo_owner = ?
|
||||||
|
,repo_name = ?
|
||||||
|
,repo_full_name = ?
|
||||||
|
,repo_token = ?
|
||||||
|
,repo_language = ?
|
||||||
|
,repo_private = ?
|
||||||
|
,repo_self = ?
|
||||||
|
,repo_link = ?
|
||||||
|
,repo_clone = ?
|
||||||
|
,repo_branch = ?
|
||||||
|
,repo_timeout = ?
|
||||||
|
,repo_trusted = ?
|
||||||
|
,repo_post_commit = ?
|
||||||
|
,repo_pull_request = ?
|
||||||
|
,repo_public_key = ?
|
||||||
|
,repo_private_key = ?
|
||||||
|
,repo_created = ?
|
||||||
|
,repo_updated = ?
|
||||||
|
,repo_params = ?
|
||||||
|
WHERE repo_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoDelete = `
|
||||||
|
DELETE FROM repos
|
||||||
|
WHERE repo_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoTable = `
|
||||||
|
CREATE TABLE IF NOT EXISTS repos (
|
||||||
|
repo_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,repo_user_id INTEGER
|
||||||
|
,repo_owner VARCHAR
|
||||||
|
,repo_name VARCHAR
|
||||||
|
,repo_full_name VARCHAR
|
||||||
|
,repo_token VARCHAR
|
||||||
|
,repo_language VARCHAR
|
||||||
|
,repo_private BOOLEAN
|
||||||
|
,repo_self VARCHAR
|
||||||
|
,repo_link VARCHAR
|
||||||
|
,repo_clone VARCHAR
|
||||||
|
,repo_branch VARCHAR
|
||||||
|
,repo_timeout INTEGER
|
||||||
|
,repo_trusted BOOLEAN
|
||||||
|
,repo_post_commit BOOLEAN
|
||||||
|
,repo_pull_request BOOLEAN
|
||||||
|
,repo_public_key VARCHAR
|
||||||
|
,repo_private_key VARCHAR
|
||||||
|
,repo_created INTEGER
|
||||||
|
,repo_updated INTEGER
|
||||||
|
,repo_params BLOB
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoRepoOwnerNameIndex = `
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_repo_owner_name ON repos (repo_owner,repo_name);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtRepoRepoFullNameIndex = `
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_repo_full_name ON repos (repo_full_name);
|
||||||
|
`
|
@ -50,38 +50,6 @@ func TestRepostore(t *testing.T) {
|
|||||||
g.Assert(repo.ID != 0).IsTrue()
|
g.Assert(repo.ID != 0).IsTrue()
|
||||||
})
|
})
|
||||||
|
|
||||||
// g.It("Should Add a Repos Keypair", func() {
|
|
||||||
// keypair := common.Keypair{
|
|
||||||
// RepoID: 1,
|
|
||||||
// Public: []byte("-----BEGIN RSA PRIVATE KEY----- ..."),
|
|
||||||
// Private: []byte("ssh-rsa AAAAE1BzbF1xc2EABAvVA6Z ..."),
|
|
||||||
// }
|
|
||||||
// err := rs.SetRepoKeypair(&keypair)
|
|
||||||
// g.Assert(err == nil).IsTrue()
|
|
||||||
// g.Assert(keypair.ID != 0).IsTrue()
|
|
||||||
// getkeypair, err := rs.RepoKeypair(&common.Repo{ID: 1})
|
|
||||||
// g.Assert(err == nil).IsTrue()
|
|
||||||
// g.Assert(keypair.ID).Equal(getkeypair.ID)
|
|
||||||
// g.Assert(keypair.RepoID).Equal(getkeypair.RepoID)
|
|
||||||
// g.Assert(keypair.Public).Equal(getkeypair.Public)
|
|
||||||
// g.Assert(keypair.Private).Equal(getkeypair.Private)
|
|
||||||
// })
|
|
||||||
|
|
||||||
// g.It("Should Add a Repos Private Params", func() {
|
|
||||||
// params := common.Params{
|
|
||||||
// RepoID: 1,
|
|
||||||
// Map: map[string]string{"foo": "bar"},
|
|
||||||
// }
|
|
||||||
// err := rs.SetRepoParams(¶ms)
|
|
||||||
// g.Assert(err == nil).IsTrue()
|
|
||||||
// g.Assert(params.ID != 0).IsTrue()
|
|
||||||
// getparams, err := rs.RepoParams(&common.Repo{ID: 1})
|
|
||||||
// g.Assert(err == nil).IsTrue()
|
|
||||||
// g.Assert(params.ID).Equal(getparams.ID)
|
|
||||||
// g.Assert(params.RepoID).Equal(getparams.RepoID)
|
|
||||||
// g.Assert(params.Map).Equal(getparams.Map)
|
|
||||||
// })
|
|
||||||
|
|
||||||
g.It("Should Get a Repo by ID", func() {
|
g.It("Should Get a Repo by ID", func() {
|
||||||
repo := common.Repo{
|
repo := common.Repo{
|
||||||
UserID: 1,
|
UserID: 1,
|
||||||
|
@ -1,74 +1,43 @@
|
|||||||
package builtin
|
package builtin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
"database/sql"
|
||||||
common "github.com/drone/drone/pkg/types"
|
|
||||||
|
"github.com/drone/drone/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Tokenstore struct {
|
type Tokenstore struct {
|
||||||
meddler.DB
|
*sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTokenstore(db meddler.DB) *Tokenstore {
|
func NewTokenstore(db *sql.DB) *Tokenstore {
|
||||||
return &Tokenstore{db}
|
return &Tokenstore{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token returns a token by ID.
|
// Token returns a token by ID.
|
||||||
func (db *Tokenstore) Token(id int64) (*common.Token, error) {
|
func (db *Tokenstore) Token(id int64) (*types.Token, error) {
|
||||||
var token = new(common.Token)
|
return getToken(db, rebind(stmtTokenSelect), id)
|
||||||
var err = meddler.Load(db, tokenTable, token, id)
|
|
||||||
return token, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TokenLabel returns a token by label
|
// TokenLabel returns a token by label
|
||||||
func (db *Tokenstore) TokenLabel(user *common.User, label string) (*common.Token, error) {
|
func (db *Tokenstore) TokenLabel(user *types.User, label string) (*types.Token, error) {
|
||||||
var token = new(common.Token)
|
return getToken(db, rebind(stmtTokenSelectTokenUserLabel), user.ID, label)
|
||||||
var err = meddler.QueryRow(db, token, rebind(tokenLabelQuery), user.ID, label)
|
|
||||||
return token, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TokenList returns a list of all user tokens.
|
// TokenList returns a list of all user tokens.
|
||||||
func (db *Tokenstore) TokenList(user *common.User) ([]*common.Token, error) {
|
func (db *Tokenstore) TokenList(user *types.User) ([]*types.Token, error) {
|
||||||
var tokens []*common.Token
|
return getTokens(db, rebind(stmtTokenSelectTokenUserId), user.ID)
|
||||||
var err = meddler.QueryAll(db, &tokens, rebind(tokenListQuery), user.ID)
|
|
||||||
return tokens, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddToken inserts a new token into the datastore.
|
// AddToken inserts a new token into the datastore.
|
||||||
// If the token label already exists for the user
|
// If the token label already exists for the user
|
||||||
// an error is returned.
|
// an error is returned.
|
||||||
func (db *Tokenstore) AddToken(token *common.Token) error {
|
func (db *Tokenstore) AddToken(token *types.Token) error {
|
||||||
return meddler.Insert(db, tokenTable, token)
|
return createToken(db, rebind(stmtTokenInsert), token)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DelToken removes the DelToken from the datastore.
|
// DelToken removes the DelToken from the datastore.
|
||||||
func (db *Tokenstore) DelToken(token *common.Token) error {
|
func (db *Tokenstore) DelToken(token *types.Token) error {
|
||||||
var _, err = db.Exec(rebind(tokenDeleteStmt), token.ID)
|
var _, err = db.Exec(rebind(stmtTokenDelete), token.ID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token table name in database.
|
|
||||||
const tokenTable = "tokens"
|
|
||||||
|
|
||||||
// SQL query to retrieve a token by label.
|
|
||||||
const tokenLabelQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM tokens
|
|
||||||
WHERE user_id = ?
|
|
||||||
AND token_label = ?
|
|
||||||
LIMIT 1
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL query to retrieve a list of user tokens.
|
|
||||||
const tokenListQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM tokens
|
|
||||||
WHERE user_id = ?
|
|
||||||
ORDER BY token_label ASC
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL statement to delete a Token by ID.
|
|
||||||
const tokenDeleteStmt = `
|
|
||||||
DELETE FROM tokens
|
|
||||||
WHERE token_id=?
|
|
||||||
`
|
|
||||||
|
255
pkg/store/builtin/token_sql.go
Normal file
255
pkg/store/builtin/token_sql.go
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
package builtin
|
||||||
|
|
||||||
|
// DO NOT EDIT
|
||||||
|
// code generated by go:generate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
. "github.com/drone/drone/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = json.Marshal
|
||||||
|
|
||||||
|
// generic database interface, matching both *sql.Db and *sql.Tx
|
||||||
|
type tokenDB 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 getToken(db tokenDB, query string, args ...interface{}) (*Token, error) {
|
||||||
|
row := db.QueryRow(query, args...)
|
||||||
|
return scanToken(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTokens(db tokenDB, query string, args ...interface{}) ([]*Token, error) {
|
||||||
|
rows, err := db.Query(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return scanTokens(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createToken(db tokenDB, query string, v *Token) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 int64
|
||||||
|
var v4 int64
|
||||||
|
v0 = v.UserID
|
||||||
|
v1 = v.Kind
|
||||||
|
v2 = v.Label
|
||||||
|
v3 = v.Expiry
|
||||||
|
v4 = v.Issued
|
||||||
|
|
||||||
|
res, err := db.Exec(query,
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.ID, err = res.LastInsertId()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateToken(db tokenDB, query string, v *Token) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 int64
|
||||||
|
var v5 int64
|
||||||
|
v0 = v.ID
|
||||||
|
v1 = v.UserID
|
||||||
|
v2 = v.Kind
|
||||||
|
v3 = v.Label
|
||||||
|
v4 = v.Expiry
|
||||||
|
v5 = v.Issued
|
||||||
|
|
||||||
|
_, err := db.Exec(query,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v0,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanToken(row *sql.Row) (*Token, error) {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 int64
|
||||||
|
var v5 int64
|
||||||
|
|
||||||
|
err := row.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Token{}
|
||||||
|
v.ID = v0
|
||||||
|
v.UserID = v1
|
||||||
|
v.Kind = v2
|
||||||
|
v.Label = v3
|
||||||
|
v.Expiry = v4
|
||||||
|
v.Issued = v5
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanTokens(rows *sql.Rows) ([]*Token, error) {
|
||||||
|
var err error
|
||||||
|
var vv []*Token
|
||||||
|
for rows.Next() {
|
||||||
|
var v0 int64
|
||||||
|
var v1 int64
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 int64
|
||||||
|
var v5 int64
|
||||||
|
err = rows.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return vv, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &Token{}
|
||||||
|
v.ID = v0
|
||||||
|
v.UserID = v1
|
||||||
|
v.Kind = v2
|
||||||
|
v.Label = v3
|
||||||
|
v.Expiry = v4
|
||||||
|
v.Issued = v5
|
||||||
|
vv = append(vv, v)
|
||||||
|
}
|
||||||
|
return vv, rows.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
const stmtTokenSelectList = `
|
||||||
|
SELECT
|
||||||
|
token_id
|
||||||
|
,token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
FROM tokens
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenSelectRange = `
|
||||||
|
SELECT
|
||||||
|
token_id
|
||||||
|
,token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
FROM tokens
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenSelect = `
|
||||||
|
SELECT
|
||||||
|
token_id
|
||||||
|
,token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
FROM tokens
|
||||||
|
WHERE token_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenSelectTokenUserId = `
|
||||||
|
SELECT
|
||||||
|
token_id
|
||||||
|
,token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
FROM tokens
|
||||||
|
WHERE token_user_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenSelectTokenUserLabel = `
|
||||||
|
SELECT
|
||||||
|
token_id
|
||||||
|
,token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
FROM tokens
|
||||||
|
WHERE token_user_id = ?
|
||||||
|
AND token_label = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenInsert = `
|
||||||
|
INSERT INTO tokens (
|
||||||
|
token_user_id
|
||||||
|
,token_kind
|
||||||
|
,token_label
|
||||||
|
,token_expiry
|
||||||
|
,token_issued
|
||||||
|
) VALUES (?,?,?,?,?);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenUpdate = `
|
||||||
|
UPDATE tokens SET
|
||||||
|
token_user_id = ?
|
||||||
|
,token_kind = ?
|
||||||
|
,token_label = ?
|
||||||
|
,token_expiry = ?
|
||||||
|
,token_issued = ?
|
||||||
|
WHERE token_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenDelete = `
|
||||||
|
DELETE FROM tokens
|
||||||
|
WHERE token_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenTable = `
|
||||||
|
CREATE TABLE IF NOT EXISTS tokens (
|
||||||
|
token_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,token_user_id INTEGER
|
||||||
|
,token_kind VARCHAR
|
||||||
|
,token_label VARCHAR
|
||||||
|
,token_expiry INTEGER
|
||||||
|
,token_issued INTEGER
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenTokenUserIdIndex = `
|
||||||
|
CREATE INDEX IF NOT EXISTS ix_token_user_id ON tokens (token_user_id);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtTokenTokenUserLabelIndex = `
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_token_user_label ON tokens (token_user_id,token_label);
|
||||||
|
`
|
@ -1,106 +1,71 @@
|
|||||||
package builtin
|
package builtin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
"github.com/drone/drone/Godeps/_workspace/src/github.com/russross/meddler"
|
||||||
common "github.com/drone/drone/pkg/types"
|
"github.com/drone/drone/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Userstore struct {
|
type Userstore struct {
|
||||||
meddler.DB
|
*sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserstore(db meddler.DB) *Userstore {
|
func NewUserstore(db *sql.DB) *Userstore {
|
||||||
return &Userstore{db}
|
return &Userstore{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
// User returns a user by user ID.
|
// User returns a user by user ID.
|
||||||
func (db *Userstore) User(id int64) (*common.User, error) {
|
func (db *Userstore) User(id int64) (*types.User, error) {
|
||||||
var usr = new(common.User)
|
return getUser(db, rebind(stmtUserSelect), id)
|
||||||
var err = meddler.Load(db, userTable, usr, id)
|
|
||||||
return usr, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserLogin returns a user by user login.
|
// UserLogin returns a user by user login.
|
||||||
func (db *Userstore) UserLogin(login string) (*common.User, error) {
|
func (db *Userstore) UserLogin(login string) (*types.User, error) {
|
||||||
var usr = new(common.User)
|
return getUser(db, rebind(stmtUserSelectUserLogin), login)
|
||||||
var err = meddler.QueryRow(db, usr, rebind(userLoginQuery), login)
|
|
||||||
return usr, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserList returns a list of all registered users.
|
// UserList returns a list of all registered users.
|
||||||
func (db *Userstore) UserList() ([]*common.User, error) {
|
func (db *Userstore) UserList() ([]*types.User, error) {
|
||||||
var users []*common.User
|
return getUsers(db, rebind(stmtUserSelectList))
|
||||||
var err = meddler.QueryAll(db, &users, rebind(userListQuery))
|
|
||||||
return users, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserFeed retrieves a digest of recent builds
|
// UserFeed retrieves a digest of recent builds
|
||||||
// from the datastore accessible to the specified user.
|
// from the datastore accessible to the specified user.
|
||||||
func (db *Userstore) UserFeed(user *common.User, limit, offset int) ([]*common.RepoCommit, error) {
|
func (db *Userstore) UserFeed(user *types.User, limit, offset int) ([]*types.RepoCommit, error) {
|
||||||
var builds []*common.RepoCommit
|
var builds []*types.RepoCommit
|
||||||
var err = meddler.QueryAll(db, &builds, rebind(userFeedQuery), user.ID, limit, offset)
|
var err = meddler.QueryAll(db, &builds, rebind(userFeedQuery), user.ID, limit, offset)
|
||||||
return builds, err
|
return builds, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserCount returns a count of all registered users.
|
// UserCount returns a count of all registered users.
|
||||||
func (db *Userstore) UserCount() (int, error) {
|
func (db *Userstore) UserCount() (int, error) {
|
||||||
var count = struct{ Count int }{}
|
var count int
|
||||||
var err = meddler.QueryRow(db, &count, rebind(userCountQuery))
|
err := db.QueryRow(stmtUserSelectCount).Scan(&count)
|
||||||
return count.Count, err
|
return count, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddUser inserts a new user into the datastore.
|
// AddUser inserts a new user into the datastore.
|
||||||
// If the user login already exists an error is returned.
|
// If the user login already exists an error is returned.
|
||||||
func (db *Userstore) AddUser(user *common.User) error {
|
func (db *Userstore) AddUser(user *types.User) error {
|
||||||
user.Created = time.Now().UTC().Unix()
|
user.Created = time.Now().UTC().Unix()
|
||||||
user.Updated = time.Now().UTC().Unix()
|
user.Updated = time.Now().UTC().Unix()
|
||||||
return meddler.Insert(db, userTable, user)
|
return createUser(db, rebind(stmtUserInsert), user)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUser updates an existing user.
|
// SetUser updates an existing user.
|
||||||
func (db *Userstore) SetUser(user *common.User) error {
|
func (db *Userstore) SetUser(user *types.User) error {
|
||||||
user.Updated = time.Now().UTC().Unix()
|
user.Updated = time.Now().UTC().Unix()
|
||||||
return meddler.Update(db, userTable, user)
|
return updateUser(db, rebind(stmtUserUpdate), user)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DelUser removes the user from the datastore.
|
// DelUser removes the user from the datastore.
|
||||||
func (db *Userstore) DelUser(user *common.User) error {
|
func (db *Userstore) DelUser(user *types.User) error {
|
||||||
var _, err = db.Exec(rebind(userDeleteStmt), user.ID)
|
var _, err = db.Exec(rebind(stmtUserDelete), user.ID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// User table name in database.
|
|
||||||
const userTable = "users"
|
|
||||||
|
|
||||||
// SQL query to retrieve a User by remote login.
|
|
||||||
const userLoginQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM users
|
|
||||||
WHERE user_login=?
|
|
||||||
LIMIT 1
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL query to retrieve a list of all users.
|
|
||||||
const userListQuery = `
|
|
||||||
SELECT *
|
|
||||||
FROM users
|
|
||||||
ORDER BY user_name ASC
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL query to retrieve a list of all users.
|
|
||||||
const userCountQuery = `
|
|
||||||
SELECT count(1) as "Count"
|
|
||||||
FROM users
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL statement to delete a User by ID.
|
|
||||||
const userDeleteStmt = `
|
|
||||||
DELETE FROM users
|
|
||||||
WHERE user_id=?
|
|
||||||
`
|
|
||||||
|
|
||||||
// SQL query to retrieve a build feed for the given
|
// SQL query to retrieve a build feed for the given
|
||||||
// user account.
|
// user account.
|
||||||
const userFeedQuery = `
|
const userFeedQuery = `
|
||||||
@ -108,7 +73,7 @@ SELECT
|
|||||||
r.repo_id
|
r.repo_id
|
||||||
,r.repo_owner
|
,r.repo_owner
|
||||||
,r.repo_name
|
,r.repo_name
|
||||||
,r.repo_slug
|
,r.repo_full_name
|
||||||
,c.commit_seq
|
,c.commit_seq
|
||||||
,c.commit_state
|
,c.commit_state
|
||||||
,c.commit_started
|
,c.commit_started
|
||||||
|
338
pkg/store/builtin/user_sql.go
Normal file
338
pkg/store/builtin/user_sql.go
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
package builtin
|
||||||
|
|
||||||
|
// DO NOT EDIT
|
||||||
|
// code generated by go:generate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
. "github.com/drone/drone/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = json.Marshal
|
||||||
|
|
||||||
|
// generic database interface, matching both *sql.Db and *sql.Tx
|
||||||
|
type userDB 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 getUser(db userDB, query string, args ...interface{}) (*User, error) {
|
||||||
|
row := db.QueryRow(query, args...)
|
||||||
|
return scanUser(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getUsers(db userDB, query string, args ...interface{}) ([]*User, error) {
|
||||||
|
rows, err := db.Query(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return scanUsers(rows)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createUser(db userDB, query string, v *User) error {
|
||||||
|
var v0 string
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 bool
|
||||||
|
var v7 bool
|
||||||
|
var v8 int64
|
||||||
|
var v9 int64
|
||||||
|
v0 = v.Login
|
||||||
|
v1 = v.Token
|
||||||
|
v2 = v.Secret
|
||||||
|
v3 = v.Name
|
||||||
|
v4 = v.Email
|
||||||
|
v5 = v.Gravatar
|
||||||
|
v6 = v.Admin
|
||||||
|
v7 = v.Active
|
||||||
|
v8 = v.Created
|
||||||
|
v9 = v.Updated
|
||||||
|
|
||||||
|
res, err := db.Exec(query,
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.ID, err = res.LastInsertId()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateUser(db userDB, query string, v *User) error {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 bool
|
||||||
|
var v9 int64
|
||||||
|
var v10 int64
|
||||||
|
v0 = v.ID
|
||||||
|
v1 = v.Login
|
||||||
|
v2 = v.Token
|
||||||
|
v3 = v.Secret
|
||||||
|
v4 = v.Name
|
||||||
|
v5 = v.Email
|
||||||
|
v6 = v.Gravatar
|
||||||
|
v7 = v.Admin
|
||||||
|
v8 = v.Active
|
||||||
|
v9 = v.Created
|
||||||
|
v10 = v.Updated
|
||||||
|
|
||||||
|
_, err := db.Exec(query,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
&v0,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanUser(row *sql.Row) (*User, error) {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 bool
|
||||||
|
var v9 int64
|
||||||
|
var v10 int64
|
||||||
|
|
||||||
|
err := row.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &User{}
|
||||||
|
v.ID = v0
|
||||||
|
v.Login = v1
|
||||||
|
v.Token = v2
|
||||||
|
v.Secret = v3
|
||||||
|
v.Name = v4
|
||||||
|
v.Email = v5
|
||||||
|
v.Gravatar = v6
|
||||||
|
v.Admin = v7
|
||||||
|
v.Active = v8
|
||||||
|
v.Created = v9
|
||||||
|
v.Updated = v10
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanUsers(rows *sql.Rows) ([]*User, error) {
|
||||||
|
var err error
|
||||||
|
var vv []*User
|
||||||
|
for rows.Next() {
|
||||||
|
var v0 int64
|
||||||
|
var v1 string
|
||||||
|
var v2 string
|
||||||
|
var v3 string
|
||||||
|
var v4 string
|
||||||
|
var v5 string
|
||||||
|
var v6 string
|
||||||
|
var v7 bool
|
||||||
|
var v8 bool
|
||||||
|
var v9 int64
|
||||||
|
var v10 int64
|
||||||
|
err = rows.Scan(
|
||||||
|
&v0,
|
||||||
|
&v1,
|
||||||
|
&v2,
|
||||||
|
&v3,
|
||||||
|
&v4,
|
||||||
|
&v5,
|
||||||
|
&v6,
|
||||||
|
&v7,
|
||||||
|
&v8,
|
||||||
|
&v9,
|
||||||
|
&v10,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return vv, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := &User{}
|
||||||
|
v.ID = v0
|
||||||
|
v.Login = v1
|
||||||
|
v.Token = v2
|
||||||
|
v.Secret = v3
|
||||||
|
v.Name = v4
|
||||||
|
v.Email = v5
|
||||||
|
v.Gravatar = v6
|
||||||
|
v.Admin = v7
|
||||||
|
v.Active = v8
|
||||||
|
v.Created = v9
|
||||||
|
v.Updated = v10
|
||||||
|
vv = append(vv, v)
|
||||||
|
}
|
||||||
|
return vv, rows.Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
const stmtUserSelectList = `
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
,user_login
|
||||||
|
,user_token
|
||||||
|
,user_secret
|
||||||
|
,user_name
|
||||||
|
,user_email
|
||||||
|
,user_gravatar
|
||||||
|
,user_admin
|
||||||
|
,user_active
|
||||||
|
,user_created
|
||||||
|
,user_updated
|
||||||
|
FROM users
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserSelectRange = `
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
,user_login
|
||||||
|
,user_token
|
||||||
|
,user_secret
|
||||||
|
,user_name
|
||||||
|
,user_email
|
||||||
|
,user_gravatar
|
||||||
|
,user_admin
|
||||||
|
,user_active
|
||||||
|
,user_created
|
||||||
|
,user_updated
|
||||||
|
FROM users
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserSelect = `
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
,user_login
|
||||||
|
,user_token
|
||||||
|
,user_secret
|
||||||
|
,user_name
|
||||||
|
,user_email
|
||||||
|
,user_gravatar
|
||||||
|
,user_admin
|
||||||
|
,user_active
|
||||||
|
,user_created
|
||||||
|
,user_updated
|
||||||
|
FROM users
|
||||||
|
WHERE user_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserSelectUserLogin = `
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
,user_login
|
||||||
|
,user_token
|
||||||
|
,user_secret
|
||||||
|
,user_name
|
||||||
|
,user_email
|
||||||
|
,user_gravatar
|
||||||
|
,user_admin
|
||||||
|
,user_active
|
||||||
|
,user_created
|
||||||
|
,user_updated
|
||||||
|
FROM users
|
||||||
|
WHERE user_login = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserSelectCount = `
|
||||||
|
SELECT count(1)
|
||||||
|
FROM users
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserInsert = `
|
||||||
|
INSERT INTO users (
|
||||||
|
user_login
|
||||||
|
,user_token
|
||||||
|
,user_secret
|
||||||
|
,user_name
|
||||||
|
,user_email
|
||||||
|
,user_gravatar
|
||||||
|
,user_admin
|
||||||
|
,user_active
|
||||||
|
,user_created
|
||||||
|
,user_updated
|
||||||
|
) VALUES (?,?,?,?,?,?,?,?,?,?);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserUpdate = `
|
||||||
|
UPDATE users SET
|
||||||
|
user_login = ?
|
||||||
|
,user_token = ?
|
||||||
|
,user_secret = ?
|
||||||
|
,user_name = ?
|
||||||
|
,user_email = ?
|
||||||
|
,user_gravatar = ?
|
||||||
|
,user_admin = ?
|
||||||
|
,user_active = ?
|
||||||
|
,user_created = ?
|
||||||
|
,user_updated = ?
|
||||||
|
WHERE user_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserDelete = `
|
||||||
|
DELETE FROM users
|
||||||
|
WHERE user_id = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserTable = `
|
||||||
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
|
user_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,user_login VARCHAR
|
||||||
|
,user_token VARCHAR
|
||||||
|
,user_secret VARCHAR
|
||||||
|
,user_name VARCHAR
|
||||||
|
,user_email VARCHAR
|
||||||
|
,user_gravatar VARCHAR
|
||||||
|
,user_admin BOOLEAN
|
||||||
|
,user_active BOOLEAN
|
||||||
|
,user_created INTEGER
|
||||||
|
,user_updated INTEGER
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
const stmtUserUserLoginIndex = `
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_user_login ON users (user_login);
|
||||||
|
`
|
@ -162,6 +162,12 @@ func TestUserstore(t *testing.T) {
|
|||||||
g.Assert(count).Equal(2)
|
g.Assert(count).Equal(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
g.It("Should Get a User Count Zero", func() {
|
||||||
|
count, err := us.UserCount()
|
||||||
|
g.Assert(err == nil).IsTrue()
|
||||||
|
g.Assert(count).Equal(0)
|
||||||
|
})
|
||||||
|
|
||||||
g.It("Should Del a User", func() {
|
g.It("Should Del a User", func() {
|
||||||
user := common.User{
|
user := common.User{
|
||||||
Login: "joe",
|
Login: "joe",
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
type Build struct {
|
type Build struct {
|
||||||
ID int64 `meddler:"build_id,pk" json:"id"`
|
ID int64 `meddler:"build_id,pk" json:"id"`
|
||||||
CommitID int64 `meddler:"commit_id" json:"-"`
|
CommitID int64 `meddler:"build_commit_id" json:"-" sql:"unique:ux_build_seq,index:ix_build_commit_id"`
|
||||||
State string `meddler:"build_state" json:"state"`
|
State string `meddler:"build_state" json:"state"`
|
||||||
ExitCode int `meddler:"build_exit" json:"exit_code"`
|
ExitCode int `meddler:"build_exit_code" json:"exit_code"`
|
||||||
Sequence int `meddler:"build_seq" json:"sequence"`
|
Sequence int `meddler:"build_sequence" json:"sequence" sql:"unique:ux_build_seq"`
|
||||||
Duration int64 `meddler:"build_duration" json:"duration"`
|
Duration int64 `meddler:"build_duration" json:"duration"`
|
||||||
Started int64 `meddler:"build_started" json:"started_at"`
|
Started int64 `meddler:"build_started" json:"started_at"`
|
||||||
Finished int64 `meddler:"build_finished" json:"finished_at"`
|
Finished int64 `meddler:"build_finished" json:"finished_at"`
|
||||||
Created int64 `meddler:"build_created" json:"created_at"`
|
Created int64 `meddler:"build_created" json:"created_at"`
|
||||||
Updated int64 `meddler:"build_updated" json:"updated_at"`
|
Updated int64 `meddler:"build_updated" json:"updated_at"`
|
||||||
|
|
||||||
Environment map[string]string `meddler:"build_env,json" json:"environment"`
|
Environment map[string]string `meddler:"build_environment,json" json:"environment" sql:"type:varchar,size:2048"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// QUESTION: should we track if it was oom killed?
|
// QUESTION: should we track if it was oom killed?
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
type Repo struct {
|
type Repo struct {
|
||||||
ID int64 `meddler:"repo_id,pk" json:"id"`
|
ID int64 `meddler:"repo_id,pk" json:"id"`
|
||||||
UserID int64 `meddler:"user_id" json:"-"`
|
UserID int64 `meddler:"repo_user_id" json:"-" sql:"index:ix_repo_user_id"`
|
||||||
Owner string `meddler:"repo_owner" json:"owner"`
|
Owner string `meddler:"repo_owner" json:"owner" sql:"unique:ux_repo_owner_name"`
|
||||||
Name string `meddler:"repo_name" json:"name"`
|
Name string `meddler:"repo_name" json:"name" sql:"unique:ux_repo_owner_name"`
|
||||||
FullName string `meddler:"repo_slug" json:"full_name"`
|
FullName string `meddler:"repo_full_name" json:"full_name" sql:"unique:ux_repo_full_name"`
|
||||||
Token string `meddler:"repo_token" json:"-"`
|
Token string `meddler:"repo_token" json:"-"`
|
||||||
Language string `meddler:"repo_lang" json:"language"`
|
Language string `meddler:"repo_language" json:"language"`
|
||||||
Private bool `meddler:"repo_private" json:"private"`
|
Private bool `meddler:"repo_private" json:"private"`
|
||||||
Self string `meddler:"repo_self" json:"self_url"`
|
Self string `meddler:"repo_self" json:"self_url"`
|
||||||
Link string `meddler:"repo_link" json:"link_url"`
|
Link string `meddler:"repo_link" json:"link_url"`
|
||||||
Clone string `meddler:"repo_clone" json:"clone_url"`
|
Clone string `meddler:"repo_clone" json:"clone_url"`
|
||||||
Branch string `meddler:"repo_branch" json:"default_branch"`
|
Branch string `meddler:"repo_branch" json:"default_branch"`
|
||||||
Timeout int64 `meddler:"repo_timeout" json:"timeout"`
|
Timeout int64 `meddler:"repo_timeout" json:"timeout"`
|
||||||
Trusted bool `meddler:"repo_trusted" json:"trusted"`
|
Trusted bool `meddler:"repo_trusted" json:"trusted"`
|
||||||
PostCommit bool `meddler:"repo_push" json:"post_commits"`
|
PostCommit bool `meddler:"repo_post_commit" json:"post_commits"`
|
||||||
PullRequest bool `meddler:"repo_pull" json:"pull_requests"`
|
PullRequest bool `meddler:"repo_pull_request" json:"pull_requests"`
|
||||||
PublicKey string `meddler:"repo_public_key" json:"-"`
|
PublicKey string `meddler:"repo_public_key" json:"-"`
|
||||||
PrivateKey string `meddler:"repo_private_key" json:"-"`
|
PrivateKey string `meddler:"repo_private_key" json:"-"`
|
||||||
Created int64 `meddler:"repo_created" json:"created_at"`
|
Created int64 `meddler:"repo_created" json:"created_at"`
|
||||||
Updated int64 `meddler:"repo_updated" json:"updated_at"`
|
Updated int64 `meddler:"repo_updated" json:"updated_at"`
|
||||||
|
|
||||||
Params map[string]string `meddler:"repo_params,json" json:"-"`
|
Params map[string]string `meddler:"repo_params,json" json:"-"`
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ type RepoCommit struct {
|
|||||||
ID int64 `meddler:"repo_id,pk" json:"id"`
|
ID int64 `meddler:"repo_id,pk" json:"id"`
|
||||||
Owner string `meddler:"repo_owner" json:"owner"`
|
Owner string `meddler:"repo_owner" json:"owner"`
|
||||||
Name string `meddler:"repo_name" json:"name"`
|
Name string `meddler:"repo_name" json:"name"`
|
||||||
FullName string `meddler:"repo_slug" json:"full_name"`
|
FullName string `meddler:"repo_full_name" json:"full_name"`
|
||||||
Number int `meddler:"commit_seq" json:"number"`
|
Number int `meddler:"commit_seq" json:"number"`
|
||||||
State string `meddler:"commit_state" json:"state"`
|
State string `meddler:"commit_state" json:"state"`
|
||||||
Started int64 `meddler:"commit_started" json:"started_at"`
|
Started int64 `meddler:"commit_started" json:"started_at"`
|
||||||
|
@ -2,10 +2,10 @@ package types
|
|||||||
|
|
||||||
type Token struct {
|
type Token struct {
|
||||||
ID int64 `meddler:"token_id,pk" json:"-"`
|
ID int64 `meddler:"token_id,pk" json:"-"`
|
||||||
UserID int64 `meddler:"user_id" json:"-"`
|
UserID int64 `meddler:"token_user_id" json:"-" sql:"index:ix_token_user_id,unique:ux_token_user_label"`
|
||||||
Login string `meddler:"-" json:"-"`
|
Login string `meddler:"-" json:"-" sql:"-"`
|
||||||
Kind string `meddler:"token_kind" json:"kind,omitempty"`
|
Kind string `meddler:"token_kind" json:"kind,omitempty"`
|
||||||
Label string `meddler:"token_label" json:"label,omitempty"`
|
Label string `meddler:"token_label" json:"label,omitempty" sql:"unique:ux_token_user_label"`
|
||||||
Expiry int64 `meddler:"token_expiry" json:"expiry,omitempty"`
|
Expiry int64 `meddler:"token_expiry" json:"expiry,omitempty"`
|
||||||
Issued int64 `meddler:"token_issued" json:"issued_at,omitempty"`
|
Issued int64 `meddler:"token_issued" json:"issued_at,omitempty"`
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package types
|
|||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
ID int64 `meddler:"user_id,pk" json:"id"`
|
ID int64 `meddler:"user_id,pk" json:"id"`
|
||||||
Login string `meddler:"user_login" json:"login,omitempty"`
|
Login string `meddler:"user_login" json:"login,omitempty" sql:"unique:ux_user_login"`
|
||||||
Token string `meddler:"user_token" json:"-"`
|
Token string `meddler:"user_token" json:"-"`
|
||||||
Secret string `meddler:"user_secret" json:"-"`
|
Secret string `meddler:"user_secret" json:"-"`
|
||||||
Name string `meddler:"user_name" json:"name,omitempty"`
|
Name string `meddler:"user_name" json:"name,omitempty"`
|
||||||
|
Loading…
Reference in New Issue
Block a user