You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

v184.go 1.6KB

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