Skip to content

Commit 7fd394d

Browse files
committed
Move modifyColumn to migrations.go so that other migrate function could use it
1 parent 1343067 commit 7fd394d

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed

models/migrations/migrations.go

+38
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package migrations
77

88
import (
9+
"context"
910
"fmt"
1011
"os"
1112
"reflect"
@@ -16,6 +17,7 @@ import (
1617
"code.gitea.io/gitea/modules/setting"
1718

1819
"xorm.io/xorm"
20+
"xorm.io/xorm/schemas"
1921
)
2022

2123
const minDBVersion = 70 // Gitea 1.5.3
@@ -739,3 +741,39 @@ func dropTableColumns(sess *xorm.Session, tableName string, columnNames ...strin
739741

740742
return nil
741743
}
744+
745+
// modifyColumn will modify column's type or other propertity. SQLITE is not supported
746+
func modifyColumn(x *xorm.Engine, tableName string, col *schemas.Column) error {
747+
var indexes map[string]*schemas.Index
748+
var err error
749+
// MSSQL have to remove index at first, otherwise alter column will fail
750+
// ref. https://sqlzealots.com/2018/05/09/error-message-the-index-is-dependent-on-column-alter-table-alter-column-failed-because-one-or-more-objects-access-this-column/
751+
if x.Dialect().URI().DBType == schemas.MSSQL {
752+
indexes, err = x.Dialect().GetIndexes(x.DB(), context.Background(), tableName)
753+
if err != nil {
754+
return err
755+
}
756+
757+
for _, index := range indexes {
758+
_, err = x.Exec(x.Dialect().DropIndexSQL(tableName, index))
759+
if err != nil {
760+
return err
761+
}
762+
}
763+
}
764+
765+
defer func() {
766+
for _, index := range indexes {
767+
_, err = x.Exec(x.Dialect().CreateIndexSQL(tableName, index))
768+
if err != nil {
769+
log.Error("Create index %s on table %s failed: %v", index.Name, tableName, err)
770+
}
771+
}
772+
}()
773+
774+
alterSQL := x.Dialect().ModifyColumnSQL(tableName, col)
775+
if _, err := x.Exec(alterSQL); err != nil {
776+
return err
777+
}
778+
return nil
779+
}

models/migrations/v165.go

-38
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,10 @@
55
package migrations
66

77
import (
8-
"context"
9-
10-
"code.gitea.io/gitea/modules/log"
118
"xorm.io/xorm"
129
"xorm.io/xorm/schemas"
1310
)
1411

15-
func modifyColumn(x *xorm.Engine, tableName string, col *schemas.Column) error {
16-
var indexes map[string]*schemas.Index
17-
var err error
18-
// MSSQL have to remove index at first, otherwise alter column will fail
19-
// ref. https://sqlzealots.com/2018/05/09/error-message-the-index-is-dependent-on-column-alter-table-alter-column-failed-because-one-or-more-objects-access-this-column/
20-
if x.Dialect().URI().DBType == schemas.MSSQL {
21-
indexes, err = x.Dialect().GetIndexes(x.DB(), context.Background(), tableName)
22-
if err != nil {
23-
return err
24-
}
25-
26-
for _, index := range indexes {
27-
_, err = x.Exec(x.Dialect().DropIndexSQL(tableName, index))
28-
if err != nil {
29-
return err
30-
}
31-
}
32-
}
33-
34-
defer func() {
35-
for _, index := range indexes {
36-
_, err = x.Exec(x.Dialect().CreateIndexSQL(tableName, index))
37-
if err != nil {
38-
log.Error("Create index %s on table %s failed: %v", index.Name, tableName, err)
39-
}
40-
}
41-
}()
42-
43-
alterSQL := x.Dialect().ModifyColumnSQL(tableName, col)
44-
if _, err := x.Exec(alterSQL); err != nil {
45-
return err
46-
}
47-
return nil
48-
}
49-
5012
func convertHookTaskTypeToVarcharAndTrim(x *xorm.Engine) error {
5113
dbType := x.Dialect().URI().DBType
5214
if dbType == schemas.SQLITE { // For SQLITE, varchar or char will always be represented as TEXT

0 commit comments

Comments
 (0)