From e17e3f71f4e7d2b5e0eac3a55f1b143f2d5a667e Mon Sep 17 00:00:00 2001 From: zeripath Date: Thu, 6 Aug 2020 19:16:49 +0100 Subject: [PATCH] Use transaction in V102 migration (#12395) The code for dropTableColumns has a slightly confusing portion whereby the session is committed for MSSQL but not for other variants. The v102 migration doesn't actually start a transaction so this weirdness does not affect it. However it probably should attempt to run this in a transaction. Signed-off-by: Andrew Thornton art27@cantab.net --- models/migrations/migrations.go | 4 ---- models/migrations/v102.go | 8 +++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 119b508bfd..834ac3bd68 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -453,20 +453,16 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin tableName, strings.Replace(cols, "`", "'", -1)) constraints := make([]string, 0) if err := sess.SQL(sql).Find(&constraints); err != nil { - sess.Rollback() return fmt.Errorf("Find constraints: %v", err) } for _, constraint := range constraints { if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP CONSTRAINT `%s`", tableName, constraint)); err != nil { - sess.Rollback() return fmt.Errorf("Drop table `%s` constraint `%s`: %v", tableName, constraint, err) } } if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP COLUMN %s", tableName, cols)); err != nil { - sess.Rollback() return fmt.Errorf("Drop table `%s` columns %v: %v", tableName, columnNames, err) } - return sess.Commit() default: log.Fatal("Unrecognized DB") } diff --git a/models/migrations/v102.go b/models/migrations/v102.go index 74e8574ec3..03079d0bb4 100644 --- a/models/migrations/v102.go +++ b/models/migrations/v102.go @@ -11,5 +11,11 @@ import ( func dropColumnHeadUserNameOnPullRequest(x *xorm.Engine) error { sess := x.NewSession() defer sess.Close() - return dropTableColumns(sess, "pull_request", "head_user_name") + if err := sess.Begin(); err != nil { + return err + } + if err := dropTableColumns(sess, "pull_request", "head_user_name"); err != nil { + return err + } + return sess.Commit() }