From 1b5908fb6a709580f667d8c036766731d4b2a0fd Mon Sep 17 00:00:00 2001 From: zeripath Date: Tue, 6 Aug 2019 05:35:54 +0100 Subject: [PATCH] Fix dropTableColumns sqlite implementation (#7710) (#7765) * Fix dropTableColumns sqlite implementation * use droptables and its index dropping support in v78 and v85 * golang-ci fixes * Add migration from gitea 1.3.3 for sqlite which reveals the droptables bug - thus showing this works --- .../gitea-v1.3.3.sqlite3.sql.gz | Bin 0 -> 6555 bytes models/migrations/migrations.go | 16 ++++- models/migrations/v78.go | 67 +++--------------- models/migrations/v85.go | 39 +--------- 4 files changed, 24 insertions(+), 98 deletions(-) create mode 100644 integrations/migration-test/gitea-v1.3.3.sqlite3.sql.gz diff --git a/integrations/migration-test/gitea-v1.3.3.sqlite3.sql.gz b/integrations/migration-test/gitea-v1.3.3.sqlite3.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..8375018d9fb37cc88398fff90393ca91cac3b908 GIT binary patch literal 6555 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 1 { - _, err = sess.Exec("DROP INDEX IDX_repository_is_bare ON repository") - if err != nil { - return fmt.Errorf("Drop index failed: %v", err) - } - } - } else { - _, err = sess.Exec("DROP INDEX IDX_repository_is_bare ON repository") - } - - if err != nil { - return fmt.Errorf("Drop index failed: %v", err) - } - - if err = sess.Commit(); err != nil { - return err - } - - if err := sess.Begin(); err != nil { - return err - } - if err := sess.Sync2(new(Repository)); err != nil { return err } if _, err := sess.Exec("UPDATE repository SET is_empty = is_bare;"); err != nil { return err } - - if models.DbCfg.Type != core.SQLITE { - _, err = sess.Exec("ALTER TABLE repository DROP COLUMN is_bare") - if err != nil { - return fmt.Errorf("Drop column failed: %v", err) - } - } - - if err = sess.Commit(); err != nil { + if err := sess.Commit(); err != nil { return err } - if models.DbCfg.Type == core.SQLITE { - log.Warn("TABLE repository's COLUMN is_bare should be DROP but sqlite is not supported, you could manually do that.") + if err := sess.Begin(); err != nil { + return err } - return nil + if err := dropTableColumns(sess, "repository", "is_bare"); err != nil { + return err + } + + return sess.Commit() } diff --git a/models/migrations/v85.go b/models/migrations/v85.go index b8d0ee5443..157c06d7ba 100644 --- a/models/migrations/v85.go +++ b/models/migrations/v85.go @@ -8,9 +8,7 @@ import ( "fmt" "github.com/go-xorm/xorm" - "xorm.io/core" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/util" @@ -37,41 +35,6 @@ func hashAppToken(x *xorm.Engine) error { // First remove the index sess := x.NewSession() defer sess.Close() - if err := sess.Begin(); err != nil { - return err - } - - var err error - if models.DbCfg.Type == core.POSTGRES || models.DbCfg.Type == core.SQLITE { - _, err = sess.Exec("DROP INDEX IF EXISTS UQE_access_token_sha1") - } else if models.DbCfg.Type == core.MSSQL { - _, err = sess.Exec(`DECLARE @ConstraintName VARCHAR(256) - DECLARE @SQL NVARCHAR(256) - SELECT @ConstraintName = obj.name FROM sys.columns col LEFT OUTER JOIN sys.objects obj ON obj.object_id = col.default_object_id AND obj.type = 'D' WHERE col.object_id = OBJECT_ID('access_token') AND obj.name IS NOT NULL AND col.name = 'sha1' - SET @SQL = N'ALTER TABLE [access_token] DROP CONSTRAINT [' + @ConstraintName + N']' - EXEC sp_executesql @SQL`) - } else if models.DbCfg.Type == core.MYSQL { - indexes, err := sess.QueryString(`SHOW INDEX FROM access_token WHERE KEY_NAME = 'UQE_access_token_sha1'`) - if err != nil { - return err - } - - if len(indexes) >= 1 { - _, err = sess.Exec("DROP INDEX UQE_access_token_sha1 ON access_token") - if err != nil { - return err - } - } - } else { - _, err = sess.Exec("DROP INDEX UQE_access_token_sha1 ON access_token") - } - if err != nil { - return fmt.Errorf("Drop index failed: %v", err) - } - - if err = sess.Commit(); err != nil { - return err - } if err := sess.Begin(); err != nil { return err @@ -81,7 +44,7 @@ func hashAppToken(x *xorm.Engine) error { return fmt.Errorf("Sync2: %v", err) } - if err = sess.Commit(); err != nil { + if err := sess.Commit(); err != nil { return err }