feat: complete Kra admin backend migration
This commit is contained in:
@@ -30,8 +30,10 @@ func normalizedDriver(driver string) string {
|
||||
return "sqlite"
|
||||
case "oracle":
|
||||
return "oracle"
|
||||
default:
|
||||
case "", "mysql":
|
||||
return "mysql"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,8 +116,11 @@ func openWithDriver(driver, dsn string) (*gorm.DB, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func openDatabase(c *conf.Data_Database, create bool) (*gorm.DB, error) {
|
||||
func openDatabase(c *conf.Data_Database, create bool, template string) (*gorm.DB, error) {
|
||||
driver := normalizedDriver(c.Driver)
|
||||
if driver == "" {
|
||||
return nil, fmt.Errorf("unsupported database driver %q", c.Driver)
|
||||
}
|
||||
if driver == "sqlite" {
|
||||
dsn, err := databaseDSN(c, "")
|
||||
if err != nil {
|
||||
@@ -150,9 +155,15 @@ func openDatabase(c *conf.Data_Database, create bool) (*gorm.DB, error) {
|
||||
case "mysql":
|
||||
statement = "CREATE DATABASE IF NOT EXISTS `" + c.Name + "` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
|
||||
case "pgsql":
|
||||
if template == "" {
|
||||
template = "template0"
|
||||
}
|
||||
if !databaseNamePattern.MatchString(template) {
|
||||
return nil, fmt.Errorf("invalid PostgreSQL template %q", template)
|
||||
}
|
||||
var count int64
|
||||
if err = adminDB.Raw("SELECT count(*) FROM pg_database WHERE datname = ?", c.Name).Scan(&count).Error; err == nil && count == 0 {
|
||||
statement = `CREATE DATABASE "` + c.Name + `"`
|
||||
statement = `CREATE DATABASE "` + c.Name + `" TEMPLATE "` + template + `"`
|
||||
}
|
||||
case "mssql":
|
||||
statement = "IF DB_ID(N'" + c.Name + "') IS NULL CREATE DATABASE [" + c.Name + "]"
|
||||
|
||||
Reference in New Issue
Block a user