Skip to content

Commit 2aa6487

Browse files
authored
Merge pull request #3 from gwaylib/shu.dev
fix example and sqlbuilder
2 parents 4a21809 + 4a8160a commit 2aa6487

9 files changed

Lines changed: 101 additions & 29 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,24 +212,24 @@ func main() {
212212
id := 0
213213
inIds := []interface{}{1,2}
214214
215-
bd := qsql.NewSqlBuilder(mdb.DriverName())
215+
bd := mdb.NewSqlBuilder() // qsql.NewSqlBuilder(mdb.DriverName())
216216
bd.Select("id", "created_at")
217217
bd.Add("FROM")
218218
bd.AddTab("tmp")
219219
bd.Add("WHERE")
220220
bd.AddTab("created_at BETWEEN ? AND ?", time.Now().AddDate(-1,0,0), time.Now())
221-
bd.AddTabIf(len(inIds)>0, "AND id IN ("+bd.AddIn(inIds)+")", id)
221+
bd.AddTabIf(len(inIds)>0, "AND id IN ("+bd.AddStmtIn(inIds)+")", id)
222222
titles, data, err := mdb.QueryPageArr(bd.String(), bd.Args()...)
223223
if err != nil {
224224
panic(err)
225225
}
226226
227-
updateBD := qsql.NewSqlBuilder(mdb.DriverName())
227+
updateBD := mdb.NewSqlBuilder()
228228
updateBD.Add("UPDATE tmp SET")
229229
updateBD.AddTab("(updated_at=?,name=?)", time.Now())
230230
updateDB.Add("WHERE")
231231
updateDB.AddTab("id=?", id)
232-
if _, err := mdb.Exec(updateDB.String(), updateDB.Args()...); err != nil{
232+
if _, err := mdb.Exec(updateDB.String(), updateDB.Args()...); err != nil {
233233
panic(err)
234234
}
235235
}

db.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ func (db *DB) Close() error {
4545
return db.DB.Close()
4646
}
4747

48+
func (db *DB) NewSqlBuilder() *SqlBuilder {
49+
return NewSqlBuilder(db.drvName)
50+
}
51+
4852
// Reflect one db data to the struct. the struct tag format like `db:"field_title"`, reference to: http://github.com/jmoiron/sqlx
4953
func (db *DB) InsertStruct(structPtr interface{}, tbName string) (sql.Result, error) {
5054
return insertStruct(db, context.TODO(), structPtr, tbName, db.drvName)

example/go.mod

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
module github.com/gwaylib/qsql/example
22

3-
go 1.17
3+
go 1.12
44

55
require (
66
github.com/go-ini/ini v1.48.0 // indirect
7-
github.com/gwaylib/errors v0.0.0-20230225020640-41299698202b // indirect
8-
github.com/gwaylib/log v0.0.0-20190829041528-b6c28711ef53 // indirect
7+
github.com/gwaylib/errors v0.0.3 // indirect
8+
github.com/gwaylib/log v0.0.2 // indirect
99
github.com/gwaylib/qsql v0.0.0-00010101000000-000000000000 // indirect
1010
github.com/jmoiron/sqlx v1.2.0 // indirect
11-
github.com/labstack/gommon v0.3.0 // indirect
12-
github.com/mattn/go-colorable v0.1.2 // indirect
13-
github.com/mattn/go-isatty v0.0.9 // indirect
1411
github.com/mattn/go-sqlite3 v1.14.17 // indirect
15-
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // indirect
1612
)
1713

1814
replace github.com/gwaylib/qsql => ../

example/go.sum

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,71 @@
11
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
23
github.com/go-ini/ini v1.48.0 h1:TvO60hO/2xgaaTWp2P0wUe4CFxwdMzfbkv3+343Xzqw=
34
github.com/go-ini/ini v1.48.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
45
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
6+
github.com/gomodule/redigo v1.8.6/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
57
github.com/gwaylib/beanmsq v0.0.0-20190326081523-eda206cf81a9/go.mod h1:zASOVPtMKgmjwI28EvSQnBC748mwNA0lubqKpzVbVSw=
8+
github.com/gwaylib/beanmsq v0.0.0-20191004162047-d6c38552be56/go.mod h1:k0nthy2ZZ02YmdI+aCtONCIUj0z9RHfoo0HBImRUPn8=
9+
github.com/gwaylib/beanmsq v0.0.0-20220419073808-97611cedfb25/go.mod h1:ursQ3aqKfBQ6/Eh4TA6qbo/Zm9WrZmX2OLV7Ea2sCeU=
610
github.com/gwaylib/database v0.0.0-20230624101916-e926acbc438d h1:467TNGO8AMFD1kw3QRWKWT6tzzwRUtzUZq3BJwltdHU=
711
github.com/gwaylib/database v0.0.0-20230624101916-e926acbc438d/go.mod h1:NfR0OOI85c96F5CTV8cyIB6dLImToKv3Xfg6aAmQtf4=
812
github.com/gwaylib/errors v0.0.0-20190718041537-e442aeb61900/go.mod h1:mc+ainsF9wgufeFi7TzP0n82I1NPYj7DvUJ6noSszD8=
913
github.com/gwaylib/errors v0.0.0-20190905023356-162e59439c92 h1:ZOXwvG2yIbIX+eQShKZW01zVuIKG6SjkVa3CN+BOblE=
1014
github.com/gwaylib/errors v0.0.0-20190905023356-162e59439c92/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
15+
github.com/gwaylib/errors v0.0.0-20211126090330-1931a9c4fe20/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
1116
github.com/gwaylib/errors v0.0.0-20230225020640-41299698202b h1:ZciekNjJfTJQCJm5pk7teX2X0nr7JSJfk9JwmgUb5WY=
1217
github.com/gwaylib/errors v0.0.0-20230225020640-41299698202b/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
18+
github.com/gwaylib/errors v0.0.2 h1:UB6eLGEeOmf674D7aJHh8rSdDBt4RnhUxz/LAGuDyJs=
19+
github.com/gwaylib/errors v0.0.2/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
20+
github.com/gwaylib/errors v0.0.3 h1:aUV9a1XI49J2dpQDCdW5aeTrOgeDqUrx6OLjmf4IsbU=
21+
github.com/gwaylib/errors v0.0.3/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
1322
github.com/gwaylib/log v0.0.0-20190829041528-b6c28711ef53 h1:uBejqmckuot1HaHMe13s4eFdQI5+0LYkxM/lDZnYH0A=
1423
github.com/gwaylib/log v0.0.0-20190829041528-b6c28711ef53/go.mod h1:FwuJtWmicMfzgmySG/QzJZL5J5qiMULuWgvT4qXZTgI=
24+
github.com/gwaylib/log v0.0.0-20220419073537-947266e45ac7/go.mod h1:zq3Y/bzQMZotPXanUMhOZUlMpBTbEeVzen94rNUIY1I=
25+
github.com/gwaylib/log v0.0.1/go.mod h1:A1wtU5vzvCgR7bwXIOXcyqMXYxzv+f2ZUJgn/VO5p+0=
26+
github.com/gwaylib/log v0.0.2 h1:NagY+hrSAvYcHSwX3RJ5hQVI/rqQcOKzHZpzOETqGGg=
27+
github.com/gwaylib/log v0.0.2/go.mod h1:A1wtU5vzvCgR7bwXIOXcyqMXYxzv+f2ZUJgn/VO5p+0=
28+
github.com/gwaylib/redis v0.0.0-20211227074640-be0f92968270/go.mod h1:cxir25v8NPKIh1ZSjahoUU0MFLa88RbTpO1F4C4/mQ0=
29+
github.com/gwaylib/redis v0.0.0-20231110105356-a4910e0c1eaf/go.mod h1:cxir25v8NPKIh1ZSjahoUU0MFLa88RbTpO1F4C4/mQ0=
1530
github.com/iwanbk/gobeanstalk v0.0.0-20160903043409-dbbb23937c31/go.mod h1:9ERvzhQ09s9SfQ7LjjF6FwUDnfkdZJUCN3vOUE+NtP8=
1631
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
1732
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
1833
github.com/kr/beanstalk v0.0.0-20180818045031-cae1762e4858/go.mod h1:S640fId9Ag4k2hh6Hwwj62pMSZqfMtg/kfKPeAOhET8=
1934
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
2035
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
36+
github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o=
37+
github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
2138
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
2239
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
2340
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
41+
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
42+
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
43+
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
2444
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
2545
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
2646
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
47+
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
48+
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
2749
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
2850
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
2951
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
3052
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3153
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3254
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
55+
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
56+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3357
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
3458
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
59+
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
3560
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
3661
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
3762
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
63+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
64+
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
65+
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
66+
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
67+
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
3868
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3969
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
70+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
71+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

example/qsql.go

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package main
22

33
import (
44
"fmt"
5+
"math/rand"
6+
"time"
57

68
"github.com/gwaylib/errors"
79
"github.com/gwaylib/qsql"
@@ -18,23 +20,24 @@ func main() {
1820
mdb, _ := qsql.Open("sqlite3", ":memory:")
1921
defer qsql.Close(mdb)
2022

21-
// create table
23+
// create table by manualy
2224
if _, err := mdb.Exec(
2325
`CREATE TABLE user (
2426
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
2527
"created_at" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
28+
"updated_at" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
2629
"username" VARCHAR(32) NOT NULL UNIQUE,
2730
"passwd" VARCHAR(128) NOT NULL
2831
);`); err != nil {
2932
panic(err)
3033
}
3134

32-
// std insert
35+
// std sql insert one user
3336
if _, err := mdb.Exec("INSERT INTO user(username,passwd)VALUES(?,?)", "t1", "t1"); err != nil {
3437
panic(err)
3538
}
3639

37-
// reflect insert
40+
// reflect insert one user
3841
newUser := &TestingUser{UserName: "t2", Passwd: "t2"}
3942
if _, err := mdb.InsertStruct(newUser, "user"); err != nil {
4043
panic(err)
@@ -43,7 +46,7 @@ func main() {
4346
panic("expect newUser.ID > 0")
4447
}
4548

46-
// std query
49+
// std sql query
4750
var id int64
4851
var username, passwd string
4952
if err := mdb.QueryRow("SELECT id, username, passwd FROM user WHERE username=?", "t1").Scan(&id, &username, &passwd); err != nil {
@@ -90,12 +93,28 @@ func main() {
9093
}
9194
fmt.Printf("ids:%+v\n", ids)
9295

96+
// query where if condition
97+
ifBD := mdb.NewSqlBuilder()
98+
ifBD.Select("id,created_at").
99+
Add("FROM user WHERE id=?", "t1").
100+
AddIf(rand.Int()%2 == 0, "OR (created_at BETWEN ? AND ?)", time.Now().Add(-1e9), time.Now())
101+
if _, _, err := mdb.QueryPageArr(ifBD.String(), ifBD.Args()...); err != nil {
102+
panic(err)
103+
}
104+
93105
// query where in
94106
whereIn := []string{"t1", "t2"}
95107
whereInCount := 0
108+
sqlbd := mdb.NewSqlBuilder()
109+
sqlbd.Select("COUNT(*)").
110+
Add("FROM").
111+
AddTab("user").
112+
Add("WHERE").
113+
AddTab("username in (" + sqlbd.AddStmtIn(whereIn) + ")")
114+
96115
if err := mdb.QueryElem(&whereInCount,
97-
fmt.Sprintf("SELECT COUNT(*) FROM user WHERE username in (%s)", mdb.StmtWhereIn(0, len(whereIn))),
98-
qsql.StmtSliceArgs(whereIn)...,
116+
sqlbd.String(),
117+
sqlbd.Args()...,
99118
); err != nil {
100119
panic(err)
101120
}
@@ -140,13 +159,21 @@ func main() {
140159
}
141160

142161
// excute for stmt
143-
// TODO: more stmt optimization
144-
stmt, err := mdb.Prepare("SELECT COUNT(*) FROM user WHERE username=?")
162+
stmt, err := mdb.Prepare(mdb.NewSqlBuilder().
163+
Select("COUNT(*)").Add("FROM user WHERE username=?").String(),
164+
)
145165
count := 0
146166
if err := stmt.QueryRow("t3").Scan(&count); err != nil {
147167
panic(err)
148168
}
149169
if count != 1 {
150170
panic(errors.New("need count==1").As(count))
151171
}
172+
173+
// excute update
174+
updateBD := mdb.NewSqlBuilder().
175+
Add("UPDATE user SET passwd=? WHERE id=?", "t3", "t3")
176+
if _, err := mdb.Exec(updateBD.String(), updateBD.Args()...); err != nil {
177+
panic(errors.As(err, updateBD.Sql))
178+
}
152179
}

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
module github.com/gwaylib/qsql
22

3-
go 1.13
3+
go 1.12
44

55
require (
66
github.com/go-ini/ini v1.48.0
7-
github.com/gwaylib/errors v0.0.2
7+
github.com/gwaylib/errors v0.0.3
88
github.com/gwaylib/log v0.0.1
99
github.com/jmoiron/sqlx v1.2.0
1010
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ github.com/gwaylib/errors v0.0.0-20190905023356-162e59439c92/go.mod h1:+HS/JYB/L
1313
github.com/gwaylib/errors v0.0.0-20211126090330-1931a9c4fe20/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
1414
github.com/gwaylib/errors v0.0.2 h1:UB6eLGEeOmf674D7aJHh8rSdDBt4RnhUxz/LAGuDyJs=
1515
github.com/gwaylib/errors v0.0.2/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
16+
github.com/gwaylib/errors v0.0.3 h1:aUV9a1XI49J2dpQDCdW5aeTrOgeDqUrx6OLjmf4IsbU=
17+
github.com/gwaylib/errors v0.0.3/go.mod h1:+HS/JYB/LwqAWsVPCZHFYhwdDiQ/N2kuUqhYD44tfpY=
1618
github.com/gwaylib/log v0.0.0-20190829041528-b6c28711ef53 h1:uBejqmckuot1HaHMe13s4eFdQI5+0LYkxM/lDZnYH0A=
1719
github.com/gwaylib/log v0.0.0-20190829041528-b6c28711ef53/go.mod h1:FwuJtWmicMfzgmySG/QzJZL5J5qiMULuWgvT4qXZTgI=
1820
github.com/gwaylib/log v0.0.0-20220419073537-947266e45ac7/go.mod h1:zq3Y/bzQMZotPXanUMhOZUlMpBTbEeVzen94rNUIY1I=

sqlbuilder.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package qsql
22

33
import (
4+
"reflect"
45
"strings"
56
)
67

@@ -68,12 +69,22 @@ func (b *SqlBuilder) AddIf(ok bool, key string, args ...interface{}) *SqlBuilder
6869
return b.Add(key, args...)
6970
}
7071

71-
func (b *SqlBuilder) AddIn(in []interface{}) string {
72-
if len(in) == 0 {
72+
// where in is not a slice kind, it will be panic
73+
func (b *SqlBuilder) AddStmtIn(in interface{}) string {
74+
v := reflect.ValueOf(in)
75+
if v.Kind() != reflect.Slice {
76+
panic("StmtIn input is not a slice type")
77+
}
78+
if v.Len() == 0 {
7379
panic("need arguments of in condition")
7480
}
75-
b.args = append(b.args, in...)
76-
return stmtIn(len(b.args)-1, len(in), b.drvName)
81+
args := make([]interface{}, v.Len())
82+
for i := v.Len() - 1; i > -1; i-- {
83+
args[i] = v.Index(i).Interface()
84+
}
85+
stmtIn := stmtIn(len(b.args), len(args), b.drvName)
86+
b.args = append(b.args, args...)
87+
return stmtIn
7788
}
7889

7990
func (b *SqlBuilder) Select(column ...string) *SqlBuilder {

sqlbuilder_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ func TestSqlBuilderSelect(t *testing.T) {
1313
bd.Add("WHERE")
1414
bd.AddTab("1=1")
1515
bd.AddIf(true, "AND (1=?)", 0)
16-
bd.AddIf(true, "OR (tb1 IN ("+bd.AddIn([]interface{}{1, 2})+"))")
16+
bd.AddIf(true, "OR (tb1 IN ("+bd.AddStmtIn([]int{1, 2})+"))")
1717
bd.Add("GROUP BY tb1.id")
1818
bd.Add("HAVING count(*)>?", 1)
1919
if bd.String() !=
20-
`SELECT count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:2,:3)) GROUP BY tb1.id HAVING count(*)>?` {
20+
`SELECT count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:1,:2)) GROUP BY tb1.id HAVING count(*)>?` {
2121
t.Fatal(bd)
2222
}
2323

@@ -27,15 +27,15 @@ func TestSqlBuilderSelect(t *testing.T) {
2727
bd1.Add("LIMIT ?", 1)
2828
bd1.Select("tb1.id", "count(*)")
2929
if bd1.String() !=
30-
`SELECT tb1.id,count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:2,:3)) GROUP BY tb1.id HAVING count(*)>? ORDER BY tb1.id DESC OFFSET ? LIMIT ?` {
30+
`SELECT tb1.id,count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:1,:2)) GROUP BY tb1.id HAVING count(*)>? ORDER BY tb1.id DESC OFFSET ? LIMIT ?` {
3131
t.Fatal(bd1)
3232
}
3333

3434
bd2 := NewSqlBuilder(DRV_NAME_POSTGRES)
3535
bd2.Select("*")
3636
bd2.Add("FROM ("+bd.String()+") tmp", bd1.Args()...)
3737
if bd2.String() !=
38-
`SELECT * FROM (SELECT count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:2,:3)) GROUP BY tb1.id HAVING count(*)>?) tmp` {
38+
`SELECT * FROM (SELECT count(*) FROM tmp tb1 INNER JOIN tmp1 tb2 ON tb2.id=tb2.tmp_id WHERE 1=1 AND (1=?) OR (tb1 IN (:1,:2)) GROUP BY tb1.id HAVING count(*)>?) tmp` {
3939
t.Fatal(bd2)
4040
}
4141

0 commit comments

Comments
 (0)