update auto migrate
This commit is contained in:
parent
0a51f6cdc5
commit
0071d374f8
@ -33,6 +33,8 @@ type Dialect interface {
|
|||||||
HasTable(tableName string) bool
|
HasTable(tableName string) bool
|
||||||
// HasColumn check has column or not
|
// HasColumn check has column or not
|
||||||
HasColumn(tableName string, columnName string) bool
|
HasColumn(tableName string, columnName string) bool
|
||||||
|
// TableColumns return all columns
|
||||||
|
TableColumns(tableName string) []string
|
||||||
|
|
||||||
// LimitAndOffsetSQL return generated SQL with Limit and Offset, as mssql has special case
|
// LimitAndOffsetSQL return generated SQL with Limit and Offset, as mssql has special case
|
||||||
LimitAndOffsetSQL(limit, offset interface{}) string
|
LimitAndOffsetSQL(limit, offset interface{}) string
|
||||||
|
@ -116,6 +116,12 @@ func (s commonDialect) HasColumn(tableName string, columnName string) bool {
|
|||||||
s.db.QueryRow("SELECT count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = ? AND table_name = ? AND column_name = ?", s.CurrentDatabase(), tableName, columnName).Scan(&count)
|
s.db.QueryRow("SELECT count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = ? AND table_name = ? AND column_name = ?", s.CurrentDatabase(), tableName, columnName).Scan(&count)
|
||||||
return count > 0
|
return count > 0
|
||||||
}
|
}
|
||||||
|
func (s commonDialect) TableColumns(tableName string) []string {
|
||||||
|
|
||||||
|
var columns []string
|
||||||
|
s.db.QueryRow("SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = ? AND table_name = ?", s.CurrentDatabase(), tableName).Scan(&colums)
|
||||||
|
return columns
|
||||||
|
}
|
||||||
|
|
||||||
func (s commonDialect) CurrentDatabase() (name string) {
|
func (s commonDialect) CurrentDatabase() (name string) {
|
||||||
s.db.QueryRow("SELECT DATABASE()").Scan(&name)
|
s.db.QueryRow("SELECT DATABASE()").Scan(&name)
|
||||||
|
8
scope.go
8
scope.go
@ -1185,8 +1185,14 @@ func (scope *Scope) autoMigrate() *Scope {
|
|||||||
if !scope.Dialect().HasTable(tableName) {
|
if !scope.Dialect().HasTable(tableName) {
|
||||||
scope.createTable()
|
scope.createTable()
|
||||||
} else {
|
} else {
|
||||||
|
columns := scope.Dialect().TableColumns(tableName)
|
||||||
|
columnsM := map[string]bool{}
|
||||||
|
for _, column := range columns {
|
||||||
|
columnsM[column] = true
|
||||||
|
}
|
||||||
|
|
||||||
for _, field := range scope.GetModelStruct().StructFields {
|
for _, field := range scope.GetModelStruct().StructFields {
|
||||||
if !scope.Dialect().HasColumn(tableName, field.DBName) {
|
if _, ok := columnsM[field.DBName]; !ok {
|
||||||
if field.IsNormal {
|
if field.IsNormal {
|
||||||
sqlTag := scope.Dialect().DataTypeOf(field)
|
sqlTag := scope.Dialect().DataTypeOf(field)
|
||||||
scope.Raw(fmt.Sprintf("ALTER TABLE %v ADD %v %v;", quotedTableName, scope.Quote(field.DBName), sqlTag)).Exec()
|
scope.Raw(fmt.Sprintf("ALTER TABLE %v ADD %v %v;", quotedTableName, scope.Quote(field.DBName), sqlTag)).Exec()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user