Files
db/schema/schema.go
T
2025-03-24 16:58:37 +08:00

60 lines
1.3 KiB
Go

package schema
import (
"fmt"
"strings"
"sync"
"git.fsdpf.net/go/db/v2"
)
type Schema interface {
// 判断表是否存在
TableExists(table string) (bool, error)
// 字段列
GetColumnListing(table string) ([]string, error)
// 创建表
CompileCreate(bp *Blueprint) []string
// 添加字段
CompileAdd(bp *Blueprint) []string
// 修改字段
CompileChange(bp *Blueprint) []string
// 删除表
CompileDrop(bp *Blueprint) []string
// 删除表, 先判断再删除
CompileDropIfExists(bp *Blueprint) []string
// 删除表, 删除列
CompileDropColumn(bp *Blueprint) []string
// 表重命名
CompileRename(bp *Blueprint) []string
// 生成SQL
GenerateSQL(sql string, args ...any) string
}
var (
dialects = make(map[string]func(db *db.Database) Schema)
dialectsMu sync.RWMutex
)
func RegisterDialect(name string, sc func(db *db.Database) Schema) {
dialectsMu.Lock()
defer dialectsMu.Unlock()
lowerName := strings.ToLower(name)
dialects[lowerName] = sc
}
func DeregisterDialect(name string) {
dialectsMu.Lock()
defer dialectsMu.Unlock()
delete(dialects, strings.ToLower(name))
}
func GetSchemaDialect(db *db.Database) Schema {
name := strings.ToLower(db.Dialect())
if d, ok := dialects[name]; ok {
return d(db)
}
panic(fmt.Sprintf("Unsupported driver: %s", name))
}