woodpecker/pkg/database/schema/schema.go

203 lines
4.7 KiB
Go

package schema
import (
"database/sql"
)
// SQL statement to create the User Table.
var userTableStmt = `
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT
,email VARCHAR(255) UNIQUE
,password VARCHAR(255)
,token VARCHAR(255) UNIQUE
,name VARCHAR(255)
,gravatar VARCHAR(255)
,created TIMESTAMP
,updated TIMESTAMP
,admin BOOLEAN
,github_login VARCHAR(255)
,github_token VARCHAR(255)
,bitbucket_login VARCHAR(255)
,bitbucket_token VARCHAR(255)
,bitbucket_secret VARCHAR(255)
);
`
// SQL statement to create the Team Table.
var teamTableStmt = `
CREATE TABLE teams (
id INTEGER PRIMARY KEY AUTOINCREMENT
,slug VARCHAR(255) UNIQUE
,name VARCHAR(255)
,email VARCHAR(255)
,gravatar VARCHAR(255)
,created TIMESTAMP
,updated TIMESTAMP
);
`
// SQL statement to create the Member Table.
var memberTableStmt = `
CREATE TABLE members (
id INTEGER PRIMARY KEY AUTOINCREMENT
,team_id INTEGER
,user_id INTEGER
,role INTEGER
);
`
// SQL statement to create the Repo Table.
var repoTableStmt = `
CREATE TABLE repos (
id INTEGER PRIMARY KEY AUTOINCREMENT
,slug VARCHAR(1024) UNIQUE
,host VARCHAR(255)
,owner VARCHAR(255)
,name VARCHAR(255)
,private BOOLEAN
,disabled BOOLEAN
,disabled_pr BOOLEAN
,priveleged BOOLEAN
,timeout INTEGER
,scm VARCHAR(25)
,url VARCHAR(1024)
,username VARCHAR(255)
,password VARCHAR(255)
,public_key VARCHAR(1024)
,private_key VARCHAR(1024)
,params VARCHAR(2000)
,created TIMESTAMP
,updated TIMESTAMP
,user_id INTEGER
,team_id INTEGER
);
`
// SQL statement to create the Commit Table.
var commitTableStmt = `
CREATE TABLE commits (
id INTEGER PRIMARY KEY AUTOINCREMENT
,repo_id INTEGER
,status VARCHAR(255)
,started TIMESTAMP
,finished TIMESTAMP
,duration INTEGER
,attempts INTEGER
,hash VARCHAR(255)
,branch VARCHAR(255)
,pull_request VARCHAR(255)
,author VARCHAR(255)
,gravatar VARCHAR(255)
,timestamp VARCHAR(255)
,message VARCHAR(255)
,created TIMESTAMP
,updated TIMESTAMP
);
`
// SQL statement to create the Build Table.
var buildTableStmt = `
CREATE TABLE builds (
id INTEGER PRIMARY KEY AUTOINCREMENT
,commit_id INTEGER
,slug VARCHAR(255)
,status VARCHAR(255)
,started TIMESTAMP
,finished TIMESTAMP
,duration INTEGER
,created TIMESTAMP
,updated TIMESTAMP
,stdout BLOB
);
`
// SQL statement to create the Settings
var settingsTableStmt = `
CREATE TABLE settings (
id INTEGER PRIMARY KEY
,github_key VARCHAR(255)
,github_secret VARCHAR(255)
,bitbucket_key VARCHAR(255)
,bitbucket_secret VARCHAR(255)
,smtp_server VARCHAR(1024)
,smtp_port VARCHAR(5)
,smtp_address VARCHAR(1024)
,smtp_username VARCHAR(1024)
,smtp_password VARCHAR(1024)
,hostname VARCHAR(1024)
,scheme VARCHAR(5)
,open_invitations BOOLEAN
);
`
var memberUniqueIndex = `
CREATE UNIQUE INDEX member_uix ON members (team_id, user_id);
`
var memberTeamIndex = `
CREATE INDEX member_team_ix ON members (team_id);
`
var memberUserIndex = `
CREATE INDEX member_user_ix ON members (user_id);
`
var commitUniqueIndex = `
CREATE UNIQUE INDEX commits_uix ON commits (repo_id, hash, branch);
`
var commitRepoIndex = `
CREATE INDEX commits_repo_ix ON commits (repo_id);
`
var commitBranchIndex = `
CREATE INDEX commits_repo_ix ON commits (repo_id, branch);
`
var repoTeamIndex = `
CREATE INDEX repo_team_ix ON repos (team_id);
`
var repoUserIndex = `
CREATE INDEX repo_user_ix ON repos (user_id);
`
var buildCommitIndex = `
CREATE INDEX builds_commit_ix ON builds (commit_id);
`
var buildSlugIndex = `
CREATE INDEX builds_commit_slug_ix ON builds (commit_id, slug);
`
// Load will apply the DDL commands to
// the provided database.
func Load(db *sql.DB) error {
// created tables
db.Exec(userTableStmt)
db.Exec(teamTableStmt)
db.Exec(memberTableStmt)
db.Exec(repoTableStmt)
db.Exec(commitTableStmt)
db.Exec(buildTableStmt)
db.Exec(settingsTableStmt)
db.Exec(memberUniqueIndex)
db.Exec(memberTeamIndex)
db.Exec(memberUserIndex)
db.Exec(commitUniqueIndex)
db.Exec(commitRepoIndex)
db.Exec(commitBranchIndex)
db.Exec(repoTeamIndex)
db.Exec(repoUserIndex)
db.Exec(buildCommitIndex)
db.Exec(buildSlugIndex)
// migrations for backward compatibility
db.Exec("ALTER TABLE settings ADD COLUMN open_invitations BOOLEAN")
db.Exec("UPDATE settings SET open_invitations=0 WHERE open_invitations IS NULL")
return nil
}