2021-06-16 23:02:24 +01:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
2021-12-02 21:17:24 +08:00
"context"
2021-06-16 23:02:24 +01:00
"fmt"
"code.gitea.io/gitea/modules/setting"
"xorm.io/xorm"
)
func renameTaskErrorsToMessage ( x * xorm . Engine ) error {
type Task struct {
Errors string ` xorm:"TEXT" ` // if task failed, saved the error reason
Type int
Status int ` xorm:"index" `
}
2021-12-02 21:17:24 +08:00
// This migration maybe rerun so that we should check if it has been run
messageExist , err := x . Dialect ( ) . IsColumnExist ( x . DB ( ) , context . Background ( ) , "task" , "message" )
if err != nil {
return err
}
if messageExist {
errorsExist , err := x . Dialect ( ) . IsColumnExist ( x . DB ( ) , context . Background ( ) , "task" , "errors" )
if err != nil {
return err
}
if ! errorsExist {
return nil
}
}
2021-06-16 23:02:24 +01:00
sess := x . NewSession ( )
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return err
}
if err := sess . Sync2 ( new ( Task ) ) ; err != nil {
return fmt . Errorf ( "error on Sync2: %v" , err )
}
2021-12-02 21:17:24 +08:00
if messageExist {
// if both errors and message exist, drop message at first
if err := dropTableColumns ( sess , "task" , "message" ) ; err != nil {
return err
}
}
2021-06-16 23:02:24 +01:00
switch {
case setting . Database . UseMySQL :
if _ , err := sess . Exec ( "ALTER TABLE `task` CHANGE errors message text" ) ; err != nil {
return err
}
case setting . Database . UseMSSQL :
if _ , err := sess . Exec ( "sp_rename 'task.errors', 'message', 'COLUMN'" ) ; err != nil {
return err
}
default :
if _ , err := sess . Exec ( "ALTER TABLE `task` RENAME COLUMN errors TO message" ) ; err != nil {
return err
}
}
return sess . Commit ( )
}