Skip to content

Commit

Permalink
refactor: add build method in condition
Browse files Browse the repository at this point in the history
Signed-off-by: ZhangJian He <[email protected]>
  • Loading branch information
shoothzj committed Aug 23, 2024
1 parent 7698a66 commit fdb0373
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 25 deletions.
25 changes: 3 additions & 22 deletions opengemini/query_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func (q *QueryBuilder) Build() *Query {
if i > 0 {
commandBuilder.WriteString(", ")
}
commandBuilder.WriteString(q.buildExpression(expr))
commandBuilder.WriteString(expr.build())
}
} else {
commandBuilder.WriteString("SELECT *")
Expand All @@ -90,7 +90,7 @@ func (q *QueryBuilder) Build() *Query {
// Build the WHERE part
if q.where != nil {
commandBuilder.WriteString(" WHERE ")
commandBuilder.WriteString(q.buildCondition(q.where))
commandBuilder.WriteString(q.where.build())
}

// Build the GROUP BY part
Expand All @@ -100,7 +100,7 @@ func (q *QueryBuilder) Build() *Query {
if i > 0 {
commandBuilder.WriteString(", ")
}
commandBuilder.WriteString(q.buildExpression(expr))
commandBuilder.WriteString(expr.build())
}
}

Expand Down Expand Up @@ -130,22 +130,3 @@ func (q *QueryBuilder) Build() *Query {
Command: commandBuilder.String(),
}
}

func (q *QueryBuilder) buildExpression(expr Expression) string {
return expr.build()
}

func (q *QueryBuilder) buildCondition(cond Condition) string {
switch c := cond.(type) {
case *ComparisonCondition:
return fmt.Sprintf(`"%s" %s '%v'`, c.Column, c.Operator, c.Value)
case *CompositeCondition:
var parts []string
for _, condition := range c.Conditions {
parts = append(parts, q.buildCondition(condition))
}
return fmt.Sprintf("(%s)", strings.Join(parts, fmt.Sprintf(" %s ", c.LogicalOperator)))
default:
return ""
}
}
4 changes: 2 additions & 2 deletions opengemini/query_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func TestQueryBuilderSelectWhereCondition(t *testing.T) {

query := qb.From("h2o_feet").Where(condition).Build()

expectedQuery := `SELECT * FROM "h2o_feet" WHERE "water_level" > '8'`
expectedQuery := `SELECT * FROM "h2o_feet" WHERE "water_level" > 8`

require.Equal(t, expectedQuery, query.Command)
}
Expand All @@ -79,7 +79,7 @@ func TestQueryBuilderSelectWithComplexWhereCondition(t *testing.T) {

query := qb.Select(NewFieldExpression("water_level")).From("h2o_feet").Where(finalCondition).Build()

expectedQuery := `SELECT "water_level" FROM "h2o_feet" WHERE ("location" <> 'santa_monica' AND ("water_level" < '-0.57' OR "water_level" > '9.95'))`
expectedQuery := `SELECT "water_level" FROM "h2o_feet" WHERE ("location" <> 'santa_monica' AND ("water_level" < -0.57 OR "water_level" > 9.95))`

require.Equal(t, expectedQuery, query.Command)
}
Expand Down
26 changes: 25 additions & 1 deletion opengemini/query_condition.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
package opengemini

type Condition interface{}
import (
"fmt"
"strings"
)

type Condition interface {
build() string
}

type ComparisonCondition struct {
Column string
Operator ComparisonOperator
Value interface{}
}

func (c *ComparisonCondition) build() string {
switch c.Value.(type) {
case string:
return fmt.Sprintf(`"%s" %s '%v'`, c.Column, c.Operator, c.Value)
default:
return fmt.Sprintf(`"%s" %s %v`, c.Column, c.Operator, c.Value)
}
}

func NewComparisonCondition(column string, operator ComparisonOperator, value interface{}) *ComparisonCondition {
return &ComparisonCondition{
Column: column,
Expand All @@ -21,6 +37,14 @@ type CompositeCondition struct {
Conditions []Condition
}

func (c *CompositeCondition) build() string {
var parts []string
for _, condition := range c.Conditions {
parts = append(parts, condition.build())
}
return fmt.Sprintf("(%s)", strings.Join(parts, fmt.Sprintf(" %s ", c.LogicalOperator)))
}

func NewCompositeCondition(logicalOperator LogicalOperator, conditions ...Condition) *CompositeCondition {
return &CompositeCondition{
LogicalOperator: logicalOperator,
Expand Down

0 comments on commit fdb0373

Please sign in to comment.