123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package migrate
- import (
- "errors"
- "fmt"
- "strings"
- "time"
- "github.com/beego/beego/v2/client/orm"
- "github.com/mindoc-org/mindoc/models"
- )
- type MigrationVersion03 struct {
- isValid bool
- tables []string
- }
- func NewMigrationVersion03() *MigrationVersion03 {
- return &MigrationVersion03{isValid: false, tables: make([]string, 0)}
- }
- func (m *MigrationVersion03) Version() int64 {
- return 201705271114
- }
- func (m *MigrationVersion03) ValidUpdate(version int64) error {
- if m.Version() > version {
- m.isValid = true
- return nil
- }
- m.isValid = false
- return errors.New("The target version is higher than the current version.")
- }
- func (m *MigrationVersion03) ValidForBackupTableSchema() error {
- if !m.isValid {
- return errors.New("The current version failed to verify.")
- }
- var err error
- m.tables, err = ExportDatabaseTable()
- return err
- }
- func (m *MigrationVersion03) ValidForUpdateTableSchema() error {
- if !m.isValid {
- return errors.New("The current version failed to verify.")
- }
- err := orm.RunSyncdb("default", false, true)
- if err != nil {
- return err
- }
- //_,err = o.Raw("ALTER TABLE md_members ADD auth_method VARCHAR(50) DEFAULT 'local' NULL").Exec()
- return err
- }
- func (m *MigrationVersion03) MigrationOldTableData() error {
- if !m.isValid {
- return errors.New("The current version failed to verify.")
- }
- return nil
- }
- func (m *MigrationVersion03) MigrationNewTableData() error {
- if !m.isValid {
- return errors.New("The current version failed to verify.")
- }
- o := orm.NewOrm()
- _, err := o.Raw("UPDATE md_members SET auth_method = 'local'").Exec()
- if err != nil {
- return err
- }
- _, 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()
- if err != nil {
- return err
- }
- return nil
- }
- func (m *MigrationVersion03) AddMigrationRecord(version int64) error {
- o := orm.NewOrm()
- tables, err := ExportDatabaseTable()
- if err != nil {
- return err
- }
- migration := models.NewMigration()
- migration.Version = version
- migration.Status = "update"
- migration.CreateTime = time.Now()
- migration.Name = fmt.Sprintf("update_%d", version)
- migration.Statements = strings.Join(tables, "\r\n")
- _, err = o.Insert(migration)
- return err
- }
- func (m *MigrationVersion03) MigrationCleanup() error {
- return nil
- }
- func (m *MigrationVersion03) RollbackMigration() error {
- if !m.isValid {
- return errors.New("The current version failed to verify.")
- }
- o := orm.NewOrm()
- _, err := o.Raw("ALTER TABLE md_members DROP COLUMN auth_method").Exec()
- if err != nil {
- return err
- }
- _, err = o.Raw("DROP TABLE md_document_history").Exec()
- if err != nil {
- return err
- }
- _, err = o.Raw("DELETE md_options WHERE option_name = 'ENABLE_DOCUMENT_HISTORY'").Exec()
- if err != nil {
- return err
- }
- return nil
- }
|