Fix migrate schema bug #2407
|
@ -1,10 +1,13 @@
|
|||
package migrate
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"xorm.io/xorm"
|
||||
"xorm.io/xorm/schemas"
|
||||
)
|
||||
|
||||
// MigrateFunc is the func signature for migrating.
|
||||
|
@ -140,7 +143,9 @@ func (m *Migrate) RollbackMigration(mig *Migration) error {
|
|||
return err
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("DELETE FROM %s WHERE %s = ?", m.options.TableName, m.options.IDColumnName)
|
||||
tableName := m.db.TableName(m.options.TableName, true)
|
||||
|
||||
sql := fmt.Sprintf("DELETE FROM %s WHERE %s = ?", tableName, m.options.IDColumnName)
|
||||
if _, err := m.db.Exec(sql, mig.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -192,7 +197,19 @@ func (m *Migrate) createMigrationTableIfNotExists() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("CREATE TABLE %s (%s VARCHAR(255) PRIMARY KEY)", m.options.TableName, m.options.IDColumnName)
|
||||
idCol := schemas.NewColumn(m.options.IDColumnName, "", schemas.SQLType{
|
||||
Name: "VARCHAR",
|
||||
}, 255, 0, true)
|
||||
idCol.IsPrimaryKey = true
|
||||
|
||||
table := schemas.NewTable(m.options.TableName, reflect.TypeOf(new(schemas.Table)))
|
||||
table.AddColumn(idCol)
|
||||
|
||||
sql, _, err := m.db.Dialect().CreateTableSQL(context.Background(), m.db.DB(), table, m.options.TableName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := m.db.Exec(sql); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -200,18 +217,21 @@ func (m *Migrate) createMigrationTableIfNotExists() error {
|
|||
}
|
||||
|
||||
func (m *Migrate) migrationDidRun(mig *Migration) (bool, error) {
|
||||
count, err := m.db.SQL(fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE %s = ?", m.options.TableName, m.options.IDColumnName), mig.ID).Count()
|
||||
tableName := m.db.TableName(m.options.TableName, true)
|
||||
count, err := m.db.SQL(fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE %s = ?", tableName, m.options.IDColumnName), mig.ID).Count()
|
||||
return count > 0, err
|
||||
}
|
||||
|
||||
func (m *Migrate) isFirstRun() (bool, error) {
|
||||
var count int
|
||||
_, err := m.db.SQL(fmt.Sprintf("SELECT COUNT(*) FROM %s", m.options.TableName)).Get(&count)
|
||||
tableName := m.db.TableName(m.options.TableName, true)
|
||||
_, err := m.db.SQL(fmt.Sprintf("SELECT COUNT(*) FROM %s", tableName)).Get(&count)
|
||||
return count == 0, err
|
||||
}
|
||||
|
||||
func (m *Migrate) insertMigration(id string) error {
|
||||
sql := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?)", m.options.TableName, m.options.IDColumnName)
|
||||
tableName := m.db.TableName(m.options.TableName, true)
|
||||
sql := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?)", tableName, m.options.IDColumnName)
|
||||
_, err := m.db.Exec(sql, id)
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user