[feat] 新增 表结构操作
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user