Browse Source

修改接口

yjp 1 year ago
parent
commit
5c7edec97e

+ 8 - 32
framework/core/infrastructure/database/clause/where.go

@@ -3,53 +3,29 @@ package clause
 import "strings"
 
 type Where struct {
-	conditions []Clause
+	condition Clause
 }
 
-func NewWhere(conditions []Clause) *Where {
+func NewWhere(condition Clause) *Where {
 	return &Where{
-		conditions: conditions,
+		condition: condition,
 	}
 }
 
 func (clause *Where) Clause() (string, error) {
-	conditionClauseBuilder := strings.Builder{}
-	conditionClauseBuilder.WriteString("  ")
-	for i, condition := range clause.conditions {
-		if len(clause.conditions) > 1 {
-			conditionClauseBuilder.WriteString("(")
-		}
-
-		conditionClauseStr, err := condition.Clause()
-		if err != nil {
-			return "", err
-		}
-
-		conditionClauseBuilder.WriteString(conditionClauseStr)
-
-		if len(clause.conditions) > 1 {
-			conditionClauseBuilder.WriteString(")")
-		}
-
-		if i != len(clause.conditions)-1 && len(clause.conditions) > 1 {
-			conditionClauseBuilder.WriteString(" AND ")
-		}
+	conditionClause, err := clause.condition.Clause()
+	if err != nil {
+		return "", err
 	}
 
 	clauseBuilder := strings.Builder{}
 	clauseBuilder.WriteString("WHERE\n")
-	clauseBuilder.WriteString(conditionClauseBuilder.String())
+	clauseBuilder.WriteString("  " + conditionClause)
 	clauseBuilder.WriteString("\n")
 
 	return clauseBuilder.String(), nil
 }
 
 func (clause *Where) Args() []any {
-	args := make([]any, 0)
-
-	for _, condition := range clause.conditions {
-		args = append(args, condition.Args()...)
-	}
-
-	return args
+	return clause.condition.Args()
 }

+ 2 - 2
test/database_clause_test.go

@@ -27,7 +27,7 @@ LIMIT ? OFFSET ?`
 			clause.NewJoin("test.classes", "classes.id = test.students.class_id"),
 		}),
 		[]clause.Clause{
-			clause.NewWhere([]clause.Clause{
+			clause.NewWhere(
 				clause.NewConditionJoin(
 					clause.NewConditions().
 						Equal("name", "test").
@@ -38,7 +38,7 @@ LIMIT ? OFFSET ?`
 						Equal("gender", "male").
 						Or(),
 				).Or(),
-			}),
+			),
 			clause.NewOrderBy("name", false),
 			clause.NewLimit(1, 10),
 		}...)