]> source.dussan.org Git - gitea.git/commitdiff
Recreate Tables should Recreate indexes on MySQL (#16718)
authorzeripath <art27@cantab.net>
Thu, 19 Aug 2021 04:11:36 +0000 (05:11 +0100)
committerGitHub <noreply@github.com>
Thu, 19 Aug 2021 04:11:36 +0000 (07:11 +0300)
The MySQL indexes are not being renamed at the same time as RENAME table despite the
CASCADE. Therefore it is probably better to just recreate the indexes instead.

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
models/migrations/migrations.go

index 28bf4f6036101d62f43569c623516ea9d5c95186..13ed70bc4f26e7062cfbe8a34d5621d7ec43398a 100644 (file)
@@ -597,11 +597,26 @@ func recreateTable(sess *xorm.Session, bean interface{}) error {
                        return err
                }
 
+               if err := sess.Table(tempTableName).DropIndexes(bean); err != nil {
+                       log.Error("Unable to drop indexes on temporary table %s. Error: %v", tempTableName, err)
+                       return err
+               }
+
                // SQLite and MySQL will move all the constraints from the temporary table to the new table
                if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `%s` RENAME TO `%s`", tempTableName, tableName)); err != nil {
                        log.Error("Unable to rename %s to %s. Error: %v", tempTableName, tableName, err)
                        return err
                }
+
+               if err := sess.Table(tableName).CreateIndexes(bean); err != nil {
+                       log.Error("Unable to recreate indexes on table %s. Error: %v", tableName, err)
+                       return err
+               }
+
+               if err := sess.Table(tableName).CreateUniques(bean); err != nil {
+                       log.Error("Unable to recreate uniques on table %s. Error: %v", tableName, err)
+                       return err
+               }
        case setting.Database.UsePostgreSQL:
                var originalSequences []string
                type sequenceData struct {