@@ -20,43 +20,42 @@ package migrationscripts
2020import (
2121 "fmt"
2222 "github.com/apache/incubator-devlake/core/context"
23+ "github.com/apache/incubator-devlake/core/dal"
2324 "github.com/apache/incubator-devlake/core/errors"
2425)
2526
2627type modifyCustomFieldName struct {}
2728
2829func (* modifyCustomFieldName ) Up (basicRes context.BasicRes ) errors.Error {
2930 db := basicRes .GetDal ()
30- var err errors.Error
3131 issuesNameList := []string {"_tool_tapd_stories" , "_tool_tapd_bugs" , "_tool_tapd_tasks" }
3232 for _ , issuesName := range issuesNameList {
3333 switch issuesName {
3434 case "_tool_tapd_bugs" :
3535 for i := 6 ; i < 9 ; i ++ {
36- err = db .RenameColumn (issuesName , fmt .Sprintf ("custom_field%d" , i ), fmt .Sprintf ("custom_field_%d" , i ))
37- if err != nil {
36+ oldColumnName := fmt .Sprintf ("custom_field%d" , i )
37+ newColumnName := fmt .Sprintf ("custom_field_%d" , i )
38+ if err := renameColumnSafely (db , issuesName , oldColumnName , newColumnName , dal .Text ); err != nil {
3839 return err
3940 }
4041 }
41- case "_tool_tapd_stories" :
42- fallthrough
43- case "_tool_tapd_tasks" :
44- err = db .RenameColumn (issuesName , `custom_field6` , `custom_field_six` )
45- if err != nil {
46- return err
47- }
48- err = db .RenameColumn (issuesName , `custom_field7` , `custom_field_seven` )
49- if err != nil {
50- return err
42+ case "_tool_tapd_tasks" , "_tool_tapd_stories" :
43+ tableName := issuesName
44+ renameColumnMap := map [string ]string {
45+ "custom_field6" : "custom_field_six" ,
46+ "custom_field7" : "custom_field_seven" ,
47+ "custom_field8" : "custom_field_eight" ,
5148 }
52- err = db .RenameColumn (issuesName , `custom_field8` , `custom_field_eight` )
53- if err != nil {
54- return err
49+ for oldColumn , newColumn := range renameColumnMap {
50+ if err := renameColumnSafely (db , tableName , oldColumn , newColumn , dal .Text ); err != nil {
51+ return err
52+ }
5553 }
5654 }
5755 for i := 9 ; i <= 50 ; i ++ {
58- err = db .RenameColumn (issuesName , fmt .Sprintf ("custom_field%d" , i ), fmt .Sprintf ("custom_field_%d" , i ))
59- if err != nil {
56+ oldColumnName := fmt .Sprintf ("custom_field%d" , i )
57+ newColumnName := fmt .Sprintf ("custom_field_%d" , i )
58+ if err := renameColumnSafely (db , issuesName , oldColumnName , newColumnName , dal .Text ); err != nil {
6059 return err
6160 }
6261 }
@@ -71,3 +70,19 @@ func (*modifyCustomFieldName) Version() uint64 {
7170func (* modifyCustomFieldName ) Name () string {
7271 return "modify tapd custom field name"
7372}
73+
74+ func renameColumnSafely (db dal.Dal , table , oldColumn string , newColumn string , newColumnType dal.ColumnType ) errors.Error {
75+ if table == "" || oldColumn == "" || newColumn == "" {
76+ return errors .BadInput .New ("empty params" )
77+ }
78+ if db .HasColumn (table , oldColumn ) {
79+ if ! db .HasColumn (table , newColumn ) {
80+ return db .RenameColumn (table , oldColumn , newColumn )
81+ }
82+ } else {
83+ if ! db .HasColumn (table , newColumn ) {
84+ return db .AddColumn (table , newColumn , newColumnType )
85+ }
86+ }
87+ return nil
88+ }
0 commit comments