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  }