u
This commit is contained in:
1 parent
89aaef1d6b
commit
6d54a9e407
192 files changed
+971
-51708
No files matched your search
@@ -0,0 +1,60 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"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
|
||||
}
|
||||
Reference in new issue
Block a user