Fix migrate schema bug (#2407)
Reviewed-on: https://gitea.com/xorm/xorm/pulls/2407
This commit is contained in:
parent
11e96d9654
commit
0c9a2f6a70
|
@ -1,10 +1,13 @@
|
||||||
package migrate
|
package migrate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
|
"xorm.io/xorm/schemas"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MigrateFunc is the func signature for migrating.
|
// MigrateFunc is the func signature for migrating.
|
||||||
|
@ -140,7 +143,9 @@ func (m *Migrate) RollbackMigration(mig *Migration) error {
|
||||||
return err
|
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 {
|
if _, err := m.db.Exec(sql, mig.ID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -192,7 +197,19 @@ func (m *Migrate) createMigrationTableIfNotExists() error {
|
||||||
return nil
|
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 {
|
if _, err := m.db.Exec(sql); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -200,18 +217,21 @@ func (m *Migrate) createMigrationTableIfNotExists() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Migrate) migrationDidRun(mig *Migration) (bool, 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
|
return count > 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Migrate) isFirstRun() (bool, error) {
|
func (m *Migrate) isFirstRun() (bool, error) {
|
||||||
var count int
|
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
|
return count == 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Migrate) insertMigration(id string) error {
|
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)
|
_, err := m.db.Exec(sql, id)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue