Skip to content

Commit 7ce399f

Browse files
committed
测试SQL builder
1 parent 2e54e99 commit 7ce399f

File tree

2 files changed

+49
-54
lines changed

2 files changed

+49
-54
lines changed

sqlbuilder/builder.go

Lines changed: 29 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,54 +5,36 @@ import (
55
"strings"
66
)
77

8-
// NewMySQLQuery new 实例
9-
func NewMySQLQuery(querySQL string) *Query {
8+
// NewQuery new 实例
9+
func NewQuery(querySQL string) *Query {
1010
return &Query{
1111
query: querySQL,
12-
whereOr: []string{},
13-
whereAnd: []string{},
14-
argsOr: []interface{}{},
15-
argsAnd: []interface{}{},
16-
argsLimit: []interface{}{},
12+
whereStmt: []string{},
13+
whereArgs: []interface{}{},
14+
limitArgs: []interface{}{},
1715
}
1816
}
1917

2018
// Query 查询mysql数据库
2119
type Query struct {
2220
query string
23-
whereOr []string
24-
whereAnd []string
25-
argsOr []interface{}
26-
argsAnd []interface{}
27-
limit string
28-
argsLimit []interface{}
21+
whereStmt []string
22+
whereArgs []interface{}
23+
limitStmt string
24+
limitArgs []interface{}
2925
desc string
3026
}
3127

32-
// AddOrArg 添加参数
33-
func (q *Query) AddOrArg(v ...interface{}) {
34-
q.argsOr = append(q.argsOr, v...)
35-
}
36-
37-
// AddOrWhere 添加Where语句
38-
func (q *Query) AddOrWhere(v ...string) {
39-
q.whereOr = append(q.whereOr, v...)
40-
}
41-
42-
// AddAndArg 添加参数
43-
func (q *Query) AddAndArg(v ...interface{}) {
44-
q.argsAnd = append(q.argsAnd, v...)
45-
}
46-
47-
// AddAndWhere 添加Where语句
48-
func (q *Query) AddAndWhere(v ...string) {
49-
q.whereAnd = append(q.whereAnd, v...)
28+
// Where 添加参数
29+
func (q *Query) Where(stmt string, v ...interface{}) {
30+
q.whereStmt = append(q.whereStmt, stmt)
31+
q.whereArgs = append(q.whereArgs, v...)
5032
}
5133

5234
// Limit 这周Limit
5335
func (q *Query) Limit(offset int64, limit uint) {
54-
q.limit = "LIMIT ?,? "
55-
q.argsLimit = append(q.argsLimit, offset, limit)
36+
q.limitStmt = "LIMIT ?,? "
37+
q.limitArgs = append(q.limitArgs, offset, limit)
5638
}
5739

5840
// Desc todo
@@ -61,31 +43,24 @@ func (q *Query) Desc(d string) {
6143
}
6244

6345
func (q *Query) whereBuild() string {
64-
if len(q.whereAnd) == 0 && len(q.whereOr) == 0 {
65-
return ""
66-
}
46+
return "WHERE " + strings.Join(q.whereStmt, " AND ") + " "
47+
}
6748

68-
where := []string{}
69-
if len(q.whereAnd) > 0 {
70-
where = append(where, strings.Join(q.whereAnd, " AND "))
71-
}
72-
if len(q.whereOr) > 0 {
73-
where = append(where, " ( "+strings.Join(q.whereOr, " OR ")+" ) ")
74-
}
49+
// WhereArgs where 语句的参数
50+
func (q *Query) WhereArgs() []interface{} {
51+
return q.whereArgs
52+
}
7553

76-
return "WHERE " + strings.Join(where, " AND ")
54+
// WhereStmt where条件列表
55+
func (q *Query) WhereStmt() []string {
56+
return q.whereStmt
7757
}
7858

7959
// Build 组件SQL
80-
func (q *Query) Build() string {
81-
return q.query + q.whereBuild() + q.desc + q.limit + ";"
82-
}
60+
func (q *Query) Build() (stmt string, args []interface{}) {
61+
stmt = q.query + " " + q.whereBuild() + q.desc + q.limitStmt + ";"
8362

84-
// Args sql参数
85-
func (q *Query) Args() []interface{} {
86-
args := []interface{}{}
87-
args = append(args, q.argsAnd...)
88-
args = append(args, q.argsOr...)
89-
args = append(args, q.argsLimit...)
90-
return args
63+
args = append(args, q.whereArgs...)
64+
args = append(args, q.limitArgs...)
65+
return
9166
}

sqlbuilder/builder_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,21 @@
11
package sqlbuilder_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/infraboard/mcube/sqlbuilder"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestQueryBuild(t *testing.T) {
11+
should := assert.New(t)
12+
q := sqlbuilder.NewQuery("SELECT * FROM t")
13+
q.Where("t.a = ? AND t.c = ? AND t.d LIKE ?", "one", "two", "three")
14+
q.Desc("t.create_at")
15+
q.Limit(0, 20)
16+
stmt, args := q.Build()
17+
should.Equal(stmt, "SELECT * FROM t WHERE t.a = ? AND t.c = ? AND t.d LIKE ? ORDER BY t.create_at DESC LIMIT ?,? ;")
18+
should.Equal(args, []interface{}{"one", "two", "three", int64(0), uint(20)})
19+
should.Equal(q.WhereStmt(), []string{"t.a = ? AND t.c = ? AND t.d LIKE ?"})
20+
should.Equal(q.WhereArgs(), []interface{}{"one", "two", "three"})
21+
}

0 commit comments

Comments
 (0)