20260507213409
This commit is contained in:
1 parent
3070eac71b
commit
4c7f516a03
204 files changed
+3623
No files matched your search
@@ -0,0 +1,88 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"allapp-go/pkg/uniqueid"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var identRe = regexp.MustCompile(`^[a-zA-Z0-9_]+$`)
|
||||
|
||||
// 安全标识符校验
|
||||
func safeIdent(name string) bool {
|
||||
return identRe.MatchString(name)
|
||||
}
|
||||
|
||||
// 表名引用(支持 schema)
|
||||
func quoteTable(table string) string {
|
||||
parts := strings.Split(table, ".")
|
||||
for i, p := range parts {
|
||||
if !safeIdent(p) {
|
||||
panic(fmt.Sprintf("invalid table: %s", p))
|
||||
}
|
||||
parts[i] = `"` + p + `"`
|
||||
}
|
||||
return strings.Join(parts, ".")
|
||||
}
|
||||
|
||||
// 字段引用
|
||||
func quoteCol(col string) string {
|
||||
if !safeIdent(col) {
|
||||
panic(fmt.Sprintf("invalid column: %s", col))
|
||||
}
|
||||
return `"` + col + `"`
|
||||
}
|
||||
|
||||
// 校验数据
|
||||
func validateData(table string, keyField string, data map[string]any) (any, error) {
|
||||
if table == "" {
|
||||
return nil, fmt.Errorf("表名不能为空")
|
||||
}
|
||||
|
||||
if len(data) == 0 {
|
||||
return nil, fmt.Errorf("数据不能为空")
|
||||
}
|
||||
|
||||
if keyField == "" {
|
||||
return nil, fmt.Errorf("主键字段不能为空")
|
||||
}
|
||||
|
||||
val, ok := data[keyField]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("缺少主键字段: %s", keyField)
|
||||
}
|
||||
|
||||
if val == nil {
|
||||
return nil, fmt.Errorf("主键字段值不能为空")
|
||||
}
|
||||
|
||||
return val, nil
|
||||
}
|
||||
|
||||
// 校验数据
|
||||
func validateInsertData(table string, keyField string, data map[string]any) (any, error) {
|
||||
if table == "" {
|
||||
return nil, fmt.Errorf("表名不能为空")
|
||||
}
|
||||
|
||||
if len(data) == 0 {
|
||||
return nil, fmt.Errorf("数据不能为空")
|
||||
}
|
||||
|
||||
if keyField == "" {
|
||||
return nil, fmt.Errorf("主键字段不能为空")
|
||||
}
|
||||
|
||||
val, _ := data[keyField]
|
||||
|
||||
return val, nil
|
||||
}
|
||||
|
||||
func ensureID(data map[string]any, keyField string) {
|
||||
v, ok := data[keyField]
|
||||
|
||||
if !ok || v == nil || v == "" {
|
||||
data[keyField] = uniqueid.NextId()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user