code.gitea.io/gitea@v1.21.7/models/migrations/v1_15/v184.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_15 //nolint 5 6 import ( 7 "context" 8 "fmt" 9 10 "code.gitea.io/gitea/models/migrations/base" 11 "code.gitea.io/gitea/modules/setting" 12 13 "xorm.io/xorm" 14 ) 15 16 func RenameTaskErrorsToMessage(x *xorm.Engine) error { 17 type Task struct { 18 Errors string `xorm:"TEXT"` // if task failed, saved the error reason 19 Type int 20 Status int `xorm:"index"` 21 } 22 23 // This migration maybe rerun so that we should check if it has been run 24 messageExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "message") 25 if err != nil { 26 return err 27 } 28 29 if messageExist { 30 errorsExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "errors") 31 if err != nil { 32 return err 33 } 34 if !errorsExist { 35 return nil 36 } 37 } 38 39 sess := x.NewSession() 40 defer sess.Close() 41 if err := sess.Begin(); err != nil { 42 return err 43 } 44 45 if err := sess.Sync(new(Task)); err != nil { 46 return fmt.Errorf("error on Sync: %w", err) 47 } 48 49 if messageExist { 50 // if both errors and message exist, drop message at first 51 if err := base.DropTableColumns(sess, "task", "message"); err != nil { 52 return err 53 } 54 } 55 56 switch { 57 case setting.Database.Type.IsMySQL(): 58 if _, err := sess.Exec("ALTER TABLE `task` CHANGE errors message text"); err != nil { 59 return err 60 } 61 case setting.Database.Type.IsMSSQL(): 62 if _, err := sess.Exec("sp_rename 'task.errors', 'message', 'COLUMN'"); err != nil { 63 return err 64 } 65 default: 66 if _, err := sess.Exec("ALTER TABLE `task` RENAME COLUMN errors TO message"); err != nil { 67 return err 68 } 69 } 70 return sess.Commit() 71 }