yjp 1 年間 前
コミット
64b1d90213
1 ファイル変更22 行追加18 行削除
  1. 22 18
      convenient/domain/query_rule/query_rule_parser.go

+ 22 - 18
convenient/domain/query_rule/query_rule_parser.go

@@ -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
 }