code.gitea.io/gitea@v1.21.7/models/migrations/v1_20/v245.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_20 //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 RenameWebhookOrgToOwner(x *xorm.Engine) error { 17 type Webhook struct { 18 OrgID int64 `xorm:"INDEX"` 19 } 20 21 // This migration maybe rerun so that we should check if it has been run 22 ownerExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "webhook", "owner_id") 23 if err != nil { 24 return err 25 } 26 27 if ownerExist { 28 orgExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "webhook", "org_id") 29 if err != nil { 30 return err 31 } 32 if !orgExist { 33 return nil 34 } 35 } 36 37 sess := x.NewSession() 38 defer sess.Close() 39 if err := sess.Begin(); err != nil { 40 return err 41 } 42 43 if err := sess.Sync(new(Webhook)); err != nil { 44 return err 45 } 46 47 if ownerExist { 48 if err := base.DropTableColumns(sess, "webhook", "owner_id"); err != nil { 49 return err 50 } 51 } 52 53 switch { 54 case setting.Database.Type.IsMySQL(): 55 inferredTable, err := x.TableInfo(new(Webhook)) 56 if err != nil { 57 return err 58 } 59 sqlType := x.Dialect().SQLType(inferredTable.GetColumn("org_id")) 60 if _, err := sess.Exec(fmt.Sprintf("ALTER TABLE `webhook` CHANGE org_id owner_id %s", sqlType)); err != nil { 61 return err 62 } 63 case setting.Database.Type.IsMSSQL(): 64 if _, err := sess.Exec("sp_rename 'webhook.org_id', 'owner_id', 'COLUMN'"); err != nil { 65 return err 66 } 67 default: 68 if _, err := sess.Exec("ALTER TABLE `webhook` RENAME COLUMN org_id TO owner_id"); err != nil { 69 return err 70 } 71 } 72 73 return sess.Commit() 74 }