From 471ef4d4032469d9bb8b96f381ecd7b5852f590e Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Tue, 3 Mar 2020 11:43:46 -0600 Subject: [PATCH] Fix "NOT NULL column with NULL" error in v5 SQLite migration Previously, this migration would cause the error: "Cannot add a NOT NULL column with default value NULL". This fixes that by setting the default value for new columns to '' (empty string). It updates the query builder to support this, too. --- db/create.go | 7 +++++-- migrations/v5.go | 11 ++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/db/create.go b/db/create.go index fc1ab99..9032770 100644 --- a/db/create.go +++ b/db/create.go @@ -177,7 +177,11 @@ func (c *Column) String() (string, error) { if c.Default.Set { str.WriteString(" DEFAULT ") - str.WriteString(c.Default.Value) + val := c.Default.Value + if val == "" { + val = "''" + } + str.WriteString(val) } if c.PrimaryKey { @@ -250,4 +254,3 @@ func (b *CreateTableSqlBuilder) ToSQL() (string, error) { return str.String(), nil } - diff --git a/migrations/v5.go b/migrations/v5.go index dc404e7..88ddd28 100644 --- a/migrations/v5.go +++ b/migrations/v5.go @@ -20,35 +20,35 @@ func oauthSlack(db *datastore) error { Column( "provider", wf_db.ColumnTypeVarChar, - wf_db.OptionalInt{Set: true, Value: 24})), + wf_db.OptionalInt{Set: true, Value: 24}).SetDefault("")), dialect. AlterTable("oauth_client_states"). AddColumn(dialect. Column( "client_id", wf_db.ColumnTypeVarChar, - wf_db.OptionalInt{Set: true, Value: 128})), + wf_db.OptionalInt{Set: true, Value: 128}).SetDefault("")), dialect. AlterTable("oauth_users"). AddColumn(dialect. Column( "provider", wf_db.ColumnTypeVarChar, - wf_db.OptionalInt{Set: true, Value: 24})), + wf_db.OptionalInt{Set: true, Value: 24}).SetDefault("")), dialect. AlterTable("oauth_users"). AddColumn(dialect. Column( "client_id", wf_db.ColumnTypeVarChar, - wf_db.OptionalInt{Set: true, Value: 128})), + wf_db.OptionalInt{Set: true, Value: 128}).SetDefault("")), dialect. AlterTable("oauth_users"). AddColumn(dialect. Column( "access_token", wf_db.ColumnTypeVarChar, - wf_db.OptionalInt{Set: true, Value: 512,})), + wf_db.OptionalInt{Set: true, Value: 512}).SetDefault("")), dialect.CreateUniqueIndex("oauth_users", "oauth_users", "user_id", "provider", "client_id"), } @@ -63,6 +63,7 @@ func oauthSlack(db *datastore) error { wf_db.ColumnTypeVarChar, wf_db.OptionalInt{Set: true, Value: 128}))) } + for _, builder := range builders { query, err := builder.ToSQL() if err != nil {