synchronize migrations with actual schema (#9965)
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
ef04692b18
Коммит
204dde9f48
@@ -677,6 +677,52 @@ func (ss *SqlSupplier) AlterColumnTypeIfExists(tableName string, columnName stri
|
||||
return true
|
||||
}
|
||||
|
||||
func (ss *SqlSupplier) AlterColumnDefaultIfExists(tableName string, columnName string, mySqlColDefault *string, postgresColDefault *string) bool {
|
||||
if !ss.DoesColumnExist(tableName, columnName) {
|
||||
return false
|
||||
}
|
||||
|
||||
var defaultValue = ""
|
||||
if ss.DriverName() == model.DATABASE_DRIVER_MYSQL {
|
||||
// Some column types in MySQL cannot have defaults, so don't try to configure anything.
|
||||
if mySqlColDefault == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
defaultValue = *mySqlColDefault
|
||||
} else if ss.DriverName() == model.DATABASE_DRIVER_POSTGRES {
|
||||
// Postgres doesn't have the same limitation, but preserve the interface.
|
||||
if postgresColDefault == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
tableName = strings.ToLower(tableName)
|
||||
columnName = strings.ToLower(columnName)
|
||||
defaultValue = *postgresColDefault
|
||||
} else {
|
||||
mlog.Critical("Failed to alter column default because of missing driver")
|
||||
time.Sleep(time.Second)
|
||||
os.Exit(EXIT_GENERIC_FAILURE)
|
||||
return false
|
||||
}
|
||||
|
||||
var err error
|
||||
if defaultValue == "" {
|
||||
_, err = ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ALTER COLUMN " + columnName + " DROP DEFAULT")
|
||||
} else {
|
||||
_, err = ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ALTER COLUMN " + columnName + " SET DEFAULT " + defaultValue)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
mlog.Critical(fmt.Sprintf("Failed to alter column %s.%s default %s: %v", tableName, columnName, defaultValue, err))
|
||||
time.Sleep(time.Second)
|
||||
os.Exit(EXIT_GENERIC_FAILURE)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (ss *SqlSupplier) CreateUniqueIndexIfNotExists(indexName string, tableName string, columnName string) bool {
|
||||
return ss.createIndexIfNotExists(indexName, tableName, []string{columnName}, INDEX_TYPE_DEFAULT, true)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user