From 80569c8f2180fcd98648ee47514c9644f0b1d283 Mon Sep 17 00:00:00 2001 From: Richard Connon Date: Thu, 7 Jun 2018 12:00:16 +0100 Subject: [PATCH] ID should be primary key on apps model and name should be unique. This allows for renaming apps in the future. (#1048) --- api/datastore/sql/migrations/15_alter_apps.go | 84 +++++++++++++++++++ api/datastore/sql/sql.go | 4 +- 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 api/datastore/sql/migrations/15_alter_apps.go diff --git a/api/datastore/sql/migrations/15_alter_apps.go b/api/datastore/sql/migrations/15_alter_apps.go new file mode 100644 index 000000000..803b0cc18 --- /dev/null +++ b/api/datastore/sql/migrations/15_alter_apps.go @@ -0,0 +1,84 @@ +package migrations + +import ( + "context" + + "github.com/fnproject/fn/api/datastore/sql/migratex" + "github.com/jmoiron/sqlx" +) + +func up15(ctx context.Context, tx *sqlx.Tx) error { + _, err := tx.ExecContext(ctx, "ALTER TABLE apps RENAME TO old_apps;") + if err != nil { + return err + } + newTable := `CREATE TABLE apps ( + id varchar(256) NOT NULL PRIMARY KEY, + name varchar(256) NOT NULL UNIQUE, + config text NOT NULL, + annotations text NOT NULL, + created_at varchar(256), + updated_at varchar(256), + syslog_url text +);` + _, err = tx.ExecContext(ctx, newTable) + if err != nil { + return err + } + insertQuery := `INSERT INTO apps(id,name,config,annotations,created_at,updated_at,syslog_url) + SELECT id,name,config,annotations,created_at,updated_at,syslog_url FROM old_apps;` + + _, err = tx.ExecContext(ctx, insertQuery) + if err != nil { + return err + } + + _, err = tx.ExecContext(ctx, "DROP TABLE old_apps;") + if err != nil { + return err + } + + return err +} + +func down15(ctx context.Context, tx *sqlx.Tx) error { + _, err := tx.ExecContext(ctx, "ALTER TABLE apps RENAME TO old_apps;") + if err != nil { + return err + } + newTable := `CREATE TABLE apps ( + id varchar(256), + name varchar(256) NOT NULL PRIMARY KEY, + config text NOT NULL, + annotations text NOT NULL, + created_at varchar(256), + updated_at varchar(256), + syslog_url text +);` + _, err = tx.ExecContext(ctx, newTable) + if err != nil { + return err + } + insertQuery := `INSERT INTO apps(id,name,config,annotations,created_at,updated_at,syslog_url) + SELECT id,name,config,annotations,created_at,updated_at,syslog_url FROM old_apps;` + + _, err = tx.ExecContext(ctx, insertQuery) + if err != nil { + return err + } + + _, err = tx.ExecContext(ctx, "DROP TABLE old_apps;") + if err != nil { + return err + } + + return err +} + +func init() { + Migrations = append(Migrations, &migratex.MigFields{ + VersionFunc: vfunc(15), + UpFunc: up15, + DownFunc: down15, + }) +} diff --git a/api/datastore/sql/sql.go b/api/datastore/sql/sql.go index 90a275aa3..051f244b1 100644 --- a/api/datastore/sql/sql.go +++ b/api/datastore/sql/sql.go @@ -59,8 +59,8 @@ var tables = [...]string{`CREATE TABLE IF NOT EXISTS routes ( );`, `CREATE TABLE IF NOT EXISTS apps ( - id varchar(256), - name varchar(256) NOT NULL PRIMARY KEY, + id varchar(256) NOT NULL PRIMARY KEY, + name varchar(256) NOT NULL UNIQUE, config text NOT NULL, annotations text NOT NULL, syslog_url text,