feat: complete Kra admin backend migration

This commit is contained in:
2026-08-14 00:28:37 +08:00
parent c4bf7ee03b
commit acba9624d7
88 changed files with 1765 additions and 8623 deletions
+14 -3
View File
@@ -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 + "]"