Clarify our SQL Release binding struct naming and purpose

Signed-off-by: Elliot Maincourt <e.maincourt@gmail.com>
pull/5371/head
Elliot Maincourt 7 years ago committed by Étienne Lafarge
parent 6c396880ad
commit 13e82d2039

@ -69,30 +69,30 @@ func (s *SQL) ensureDBSetup() error {
Id: "init", Id: "init",
Up: []string{ Up: []string{
` `
CREATE TABLE releases ( CREATE TABLE releases (
key VARCHAR(67) PRIMARY KEY, key VARCHAR(67) PRIMARY KEY,
body TEXT NOT NULL, body TEXT NOT NULL,
name VARCHAR(64) NOT NULL, name VARCHAR(64) NOT NULL,
version INTEGER NOT NULL, version INTEGER NOT NULL,
status TEXT NOT NULL, status TEXT NOT NULL,
owner TEXT NOT NULL, owner TEXT NOT NULL,
created_at INTEGER NOT NULL, created_at INTEGER NOT NULL,
modified_at INTEGER NOT NULL DEFAULT 0 modified_at INTEGER NOT NULL DEFAULT 0
); );
CREATE INDEX ON releases (key); CREATE INDEX ON releases (key);
CREATE INDEX ON releases (version); CREATE INDEX ON releases (version);
CREATE INDEX ON releases (status); CREATE INDEX ON releases (status);
CREATE INDEX ON releases (owner); CREATE INDEX ON releases (owner);
CREATE INDEX ON releases (created_at); CREATE INDEX ON releases (created_at);
CREATE INDEX ON releases (modified_at); CREATE INDEX ON releases (modified_at);
`, `,
}, },
Down: []string{ Down: []string{
` `
DROP TABLE releases; DROP TABLE releases;
`, `,
}, },
}, },
}, },
@ -102,11 +102,17 @@ func (s *SQL) ensureDBSetup() error {
return err return err
} }
// Release describes a Helm release // SQLReleaseWrapper describes how Helm releases are stored in an SQL database
type Release struct { type SQLReleaseWrapper struct {
Key string `db:"key"` // The primary key, made of {release-name}.{release-version}
Key string `db:"key"`
// The rspb.Release body, as a base64-encoded string
Body string `db:"body"` Body string `db:"body"`
// Release "labels" that can be used as filters in the storage.Query(labels map[string]string)
// we implemented. Note that allowing Helm users to filter against new dimensions will require a
// new migration to be added, and the Create and/or update functions to be updated accordingly.
Name string `db:"name"` Name string `db:"name"`
Version int `db:"version"` Version int `db:"version"`
Status string `db:"status"` Status string `db:"status"`
@ -140,7 +146,7 @@ func NewSQL(dialect, connectionString string, logger func(string, ...interface{}
// Get returns the release named by key. // Get returns the release named by key.
func (s *SQL) Get(key string) (*rspb.Release, error) { func (s *SQL) Get(key string) (*rspb.Release, error) {
var record Release var record SQLReleaseWrapper
// Get will return an error if the result is empty // Get will return an error if the result is empty
err := s.db.Get(&record, "SELECT body FROM releases WHERE key = $1", key) err := s.db.Get(&record, "SELECT body FROM releases WHERE key = $1", key)
if err != nil { if err != nil {
@ -159,7 +165,7 @@ func (s *SQL) Get(key string) (*rspb.Release, error) {
// List returns the list of all releases such that filter(release) == true // List returns the list of all releases such that filter(release) == true
func (s *SQL) List(filter func(*rspb.Release) bool) ([]*rspb.Release, error) { func (s *SQL) List(filter func(*rspb.Release) bool) ([]*rspb.Release, error) {
var records = []Release{} var records = []SQLReleaseWrapper{}
if err := s.db.Select(&records, "SELECT body FROM releases WHERE owner = 'TILLER'"); err != nil { if err := s.db.Select(&records, "SELECT body FROM releases WHERE owner = 'TILLER'"); err != nil {
s.Log("list: failed to list: %v", err) s.Log("list: failed to list: %v", err)
return nil, err return nil, err
@ -213,7 +219,7 @@ func (s *SQL) Query(labels map[string]string) ([]*rspb.Release, error) {
var releases []*rspb.Release var releases []*rspb.Release
for rows.Next() { for rows.Next() {
var record Release var record SQLReleaseWrapper
if err = rows.StructScan(&record); err != nil { if err = rows.StructScan(&record); err != nil {
s.Log("failed to scan record %q: %v", record, err) s.Log("failed to scan record %q: %v", record, err)
return nil, err return nil, err
@ -249,7 +255,7 @@ func (s *SQL) Create(key string, rls *rspb.Release) error {
} }
if _, err := transaction.NamedExec("INSERT INTO releases (key, body, name, version, status, owner, created_at) VALUES (:key, :body, :name, :version, :status, :owner, :created_at)", if _, err := transaction.NamedExec("INSERT INTO releases (key, body, name, version, status, owner, created_at) VALUES (:key, :body, :name, :version, :status, :owner, :created_at)",
&Release{ &SQLReleaseWrapper{
Key: key, Key: key,
Body: body, Body: body,
@ -261,7 +267,7 @@ func (s *SQL) Create(key string, rls *rspb.Release) error {
}, },
); err != nil { ); err != nil {
defer transaction.Rollback() defer transaction.Rollback()
var record Release var record SQLReleaseWrapper
if err := transaction.Get(&record, "SELECT key FROM releases WHERE key = ?", key); err == nil { if err := transaction.Get(&record, "SELECT key FROM releases WHERE key = ?", key); err == nil {
s.Log("release %s already exists", key) s.Log("release %s already exists", key)
return storageerrors.ErrReleaseExists(key) return storageerrors.ErrReleaseExists(key)
@ -284,7 +290,7 @@ func (s *SQL) Update(key string, rls *rspb.Release) error {
} }
if _, err := s.db.NamedExec("UPDATE releases SET body=:body, name=:name, version=:version, status=:status, owner=:owner, modified_at=:modified_at WHERE key=:key", if _, err := s.db.NamedExec("UPDATE releases SET body=:body, name=:name, version=:version, status=:status, owner=:owner, modified_at=:modified_at WHERE key=:key",
&Release{ &SQLReleaseWrapper{
Key: key, Key: key,
Body: body, Body: body,
@ -310,7 +316,7 @@ func (s *SQL) Delete(key string) (*rspb.Release, error) {
return nil, fmt.Errorf("error beginning transaction: %v", err) return nil, fmt.Errorf("error beginning transaction: %v", err)
} }
var record Release var record SQLReleaseWrapper
err = transaction.Get(&record, "SELECT body FROM releases WHERE key = $1", key) err = transaction.Get(&record, "SELECT body FROM releases WHERE key = $1", key)
if err != nil { if err != nil {
s.Log("release %s not found: %v", key, err) s.Log("release %s not found: %v", key, err)

Loading…
Cancel
Save