migrate_v03.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package migrate
  2. import (
  3. "errors"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "github.com/beego/beego/v2/client/orm"
  8. "github.com/mindoc-org/mindoc/models"
  9. )
  10. type MigrationVersion03 struct {
  11. isValid bool
  12. tables []string
  13. }
  14. func NewMigrationVersion03() *MigrationVersion03 {
  15. return &MigrationVersion03{isValid: false, tables: make([]string, 0)}
  16. }
  17. func (m *MigrationVersion03) Version() int64 {
  18. return 201705271114
  19. }
  20. func (m *MigrationVersion03) ValidUpdate(version int64) error {
  21. if m.Version() > version {
  22. m.isValid = true
  23. return nil
  24. }
  25. m.isValid = false
  26. return errors.New("The target version is higher than the current version.")
  27. }
  28. func (m *MigrationVersion03) ValidForBackupTableSchema() error {
  29. if !m.isValid {
  30. return errors.New("The current version failed to verify.")
  31. }
  32. var err error
  33. m.tables, err = ExportDatabaseTable()
  34. return err
  35. }
  36. func (m *MigrationVersion03) ValidForUpdateTableSchema() error {
  37. if !m.isValid {
  38. return errors.New("The current version failed to verify.")
  39. }
  40. err := orm.RunSyncdb("default", false, true)
  41. if err != nil {
  42. return err
  43. }
  44. //_,err = o.Raw("ALTER TABLE md_members ADD auth_method VARCHAR(50) DEFAULT 'local' NULL").Exec()
  45. return err
  46. }
  47. func (m *MigrationVersion03) MigrationOldTableData() error {
  48. if !m.isValid {
  49. return errors.New("The current version failed to verify.")
  50. }
  51. return nil
  52. }
  53. func (m *MigrationVersion03) MigrationNewTableData() error {
  54. if !m.isValid {
  55. return errors.New("The current version failed to verify.")
  56. }
  57. o := orm.NewOrm()
  58. _, err := o.Raw("UPDATE md_members SET auth_method = 'local'").Exec()
  59. if err != nil {
  60. return err
  61. }
  62. _, err = o.Raw("INSERT INTO md_options (option_title, option_name, option_value) SELECT '是否启用文档历史','ENABLE_DOCUMENT_HISTORY','true' WHERE NOT exists(SELECT * FROM md_options WHERE option_name = 'ENABLE_DOCUMENT_HISTORY');").Exec()
  63. if err != nil {
  64. return err
  65. }
  66. return nil
  67. }
  68. func (m *MigrationVersion03) AddMigrationRecord(version int64) error {
  69. o := orm.NewOrm()
  70. tables, err := ExportDatabaseTable()
  71. if err != nil {
  72. return err
  73. }
  74. migration := models.NewMigration()
  75. migration.Version = version
  76. migration.Status = "update"
  77. migration.CreateTime = time.Now()
  78. migration.Name = fmt.Sprintf("update_%d", version)
  79. migration.Statements = strings.Join(tables, "\r\n")
  80. _, err = o.Insert(migration)
  81. return err
  82. }
  83. func (m *MigrationVersion03) MigrationCleanup() error {
  84. return nil
  85. }
  86. func (m *MigrationVersion03) RollbackMigration() error {
  87. if !m.isValid {
  88. return errors.New("The current version failed to verify.")
  89. }
  90. o := orm.NewOrm()
  91. _, err := o.Raw("ALTER TABLE md_members DROP COLUMN auth_method").Exec()
  92. if err != nil {
  93. return err
  94. }
  95. _, err = o.Raw("DROP TABLE md_document_history").Exec()
  96. if err != nil {
  97. return err
  98. }
  99. _, err = o.Raw("DELETE md_options WHERE option_name = 'ENABLE_DOCUMENT_HISTORY'").Exec()
  100. if err != nil {
  101. return err
  102. }
  103. return nil
  104. }