|
|
@@ -126,18 +126,18 @@ func HasRule(dbSchema string, scope string, domainName string, i *infrastructure
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-func GetRulesAndFormConditionClause(dbSchema string, scope string, domainName string, i *infrastructure.Infrastructure) (string, error) {
|
|
|
+func GetRulesAndFormConditionClause(dbSchema string, scope string, domainName string, i *infrastructure.Infrastructure) (string, []any, error) {
|
|
|
r, err := getRule(dbSchema, scope, domainName, i)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
- clause, err := formConditionClause(r)
|
|
|
+ clause, args, err := formConditionClause(r)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
- return clause, nil
|
|
|
+ return clause, args, nil
|
|
|
}
|
|
|
|
|
|
func getRule(dbSchema string, scope string, domainName string, i *infrastructure.Infrastructure) (Rule, error) {
|
|
|
@@ -160,7 +160,7 @@ func getRule(dbSchema string, scope string, domainName string, i *infrastructure
|
|
|
return *r, nil
|
|
|
}
|
|
|
|
|
|
-func formConditionClause(r Rule) (string, error) {
|
|
|
+func formConditionClause(r Rule) (string, []any, error) {
|
|
|
if strutils.IsStringEmpty(r.LogicalOperator) {
|
|
|
conditions := sql.NewConditions()
|
|
|
|
|
|
@@ -179,52 +179,52 @@ func formConditionClause(r Rule) (string, error) {
|
|
|
conditions.GreaterThanAndEqual(r.ColumnName, r.Value)
|
|
|
case opIn:
|
|
|
if reflect.TypeOf(r.Value).Kind() != reflect.Slice {
|
|
|
- return "", errors.New("使用\"包含在列表\"操作符必须使用列表")
|
|
|
+ return "", nil, errors.New("使用\"包含在列表\"操作符必须使用列表")
|
|
|
}
|
|
|
|
|
|
conditions.In(r.FieldName, r.Value)
|
|
|
case opNotIn:
|
|
|
if reflect.TypeOf(r.Value).Kind() != reflect.Slice {
|
|
|
- return "", errors.New("使用\"不包含在列表\"操作符必须使用列表")
|
|
|
+ return "", nil, errors.New("使用\"不包含在列表\"操作符必须使用列表")
|
|
|
}
|
|
|
|
|
|
conditions.NotIn(r.FieldName, r.Value)
|
|
|
case opPrefix:
|
|
|
strValue, err := reflectutils.ToString(r.Value)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
conditions.Like(r.FieldName, strValue+"%")
|
|
|
case opSuffix:
|
|
|
strValue, err := reflectutils.ToString(r.Value)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
conditions.Like(r.FieldName, "%"+strValue)
|
|
|
case opContains:
|
|
|
strValue, err := reflectutils.ToString(r.Value)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
conditions.Like(r.FieldName, "%"+strValue+"%")
|
|
|
default:
|
|
|
- return "", errors.Errorf("不支持的操作符%v", r.Operator)
|
|
|
+ return "", nil, errors.Errorf("不支持的操作符%v", r.Operator)
|
|
|
}
|
|
|
|
|
|
- return conditions.And(), nil
|
|
|
+ return conditions.And(), conditions.Args(), nil
|
|
|
}
|
|
|
|
|
|
- leftClause, err := formConditionClause(*r.Left)
|
|
|
+ leftClause, leftArgs, err := formConditionClause(*r.Left)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
- rightClause, err := formConditionClause(*r.Right)
|
|
|
+ rightClause, rightArgs, err := formConditionClause(*r.Right)
|
|
|
if err != nil {
|
|
|
- return "", err
|
|
|
+ return "", nil, err
|
|
|
}
|
|
|
|
|
|
clauseBuilder := strings.Builder{}
|
|
|
@@ -240,5 +240,9 @@ func formConditionClause(r Rule) (string, error) {
|
|
|
|
|
|
clauseBuilder.WriteString("(" + rightClause + ")")
|
|
|
|
|
|
- return clauseBuilder.String(), nil
|
|
|
+ args := make([]any, 0)
|
|
|
+ args = append(args, leftArgs...)
|
|
|
+ args = append(args, rightArgs...)
|
|
|
+
|
|
|
+ return clauseBuilder.String(), args, nil
|
|
|
}
|