[feat] 新增 New Option 可选项

This commit is contained in:
2024-05-09 10:08:28 +08:00
parent e54629237c
commit 8270326a7b
4 changed files with 92 additions and 41 deletions
+61 -26
View File
@@ -17,26 +17,26 @@ type ConditionTokenType string
const (
SQL ConditionTokenType = "sql"
FUNC = "func"
PARAM = "param"
STRING = "string"
FUNC ConditionTokenType = "func"
PARAM ConditionTokenType = "param"
STRING ConditionTokenType = "string"
)
const (
IS_NULL ConditionOperator = "IS NULL"
IS_NOT_NULL = "IS NOT NULL"
EQ = "="
NE = "!="
GT = ">"
GE = ">="
LT = "<"
LE = "<="
LIKE = "LIKE"
NOT_LIKE = "NOT LIKE"
IN = "IN"
NOT_IN = "NOT IN"
REGEXP = "REGEXP"
NOT_REGEXP = "NOT REGEXP"
IS_NOT_NULL ConditionOperator = "IS NOT NULL"
EQ ConditionOperator = "="
NE ConditionOperator = "!="
GT ConditionOperator = ">"
GE ConditionOperator = ">="
LT ConditionOperator = "<"
LE ConditionOperator = "<="
LIKE ConditionOperator = "LIKE"
NOT_LIKE ConditionOperator = "NOT LIKE"
IN ConditionOperator = "IN"
NOT_IN ConditionOperator = "NOT IN"
REGEXP ConditionOperator = "REGEXP"
NOT_REGEXP ConditionOperator = "NOT REGEXP"
)
type ConditionTokenValue interface {
@@ -232,15 +232,50 @@ func (this ConditionExpr) IsIgnoreEmptyParma(m ConditionTokenValue) bool {
return false
}
func NewExpr(rResource, rField, token string, operator ConditionOperator, tType ConditionTokenType, ignoreEmptyParma bool, fn, fnParam string) *ConditionExpr {
return &ConditionExpr{
operator: operator,
field: rField,
fieldResource: rResource,
fieldSqlFunc: fn,
fieldSqlFuncParam: fnParam,
ignoreEmptyParma: ignoreEmptyParma,
tokenType: tType,
token: string(token),
type ExprOption func(option *ConditionExpr)
func Operator(v ConditionOperator) ExprOption {
return func(option *ConditionExpr) {
option.operator = v
}
}
func TokenType(v ConditionTokenType) ExprOption {
return func(option *ConditionExpr) {
option.tokenType = v
}
}
func IgnoreEmptyParma(v bool) ExprOption {
return func(option *ConditionExpr) {
option.ignoreEmptyParma = v
}
}
func FieldSqlFn(fn, fnParam string) ExprOption {
return func(option *ConditionExpr) {
option.fieldSqlFunc = fn
option.fieldSqlFuncParam = fnParam
}
}
func NewExpr(rResource, rField, token string, opts ...ExprOption) *ConditionExpr {
expr := &ConditionExpr{
field: rField,
fieldResource: rResource,
token: token,
tokenType: STRING,
operator: EQ,
ignoreEmptyParma: false,
fieldSqlFunc: "",
fieldSqlFuncParam: "",
}
if l := len(opts); l > 0 {
for i := 0; i < l; i++ {
opts[i](expr)
}
}
return expr
}