Skip to content

Commit a9c99fd

Browse files
committed
fix stmt slice args
1 parent 390e355 commit a9c99fd

4 files changed

Lines changed: 19 additions & 11 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,12 @@ if err := qsql.QueryElem(mdb, &count, "SELECT count(*) FROM a WHERE id = ?", id)
185185
// Example for the first input:
186186
mdb := db.GetCache("master")
187187
args:=[]int{1,2,3}
188-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args))), qsql.SliceToArgs(args)...)
188+
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args))), qsql.StmtSliceArgs(args)...)
189189
// Or
190-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args), qsql.DRV_NAME_MYSQL), qsql.SliceToArgs(args)...)
190+
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", qsql.StmtWhereIn(0,len(args), qsql.DRV_NAME_MYSQL), qsql.StmtSliceArgs(args)...)
191191

192192
// Example for the second input:
193-
mdb.Query(fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args)), id, qsql.SliceToArgs(args)...)
193+
mdb.Query(fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args)), qsql.StmtSliceArgs(id, args)...)
194194

195195
## Mass query.
196196
```text

example/qsql.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func main() {
9595
whereInCount := 0
9696
if err := qsql.QueryElem(mdb, &whereInCount,
9797
fmt.Sprintf("SELECT COUNT(*) FROM user WHERE username in (%s)", qsql.StmtWhereIn(0, len(whereIn))),
98-
qsql.SliceToArgs(whereIn)...,
98+
qsql.StmtSliceArgs(whereIn)...,
9999
); err != nil {
100100
panic(err)
101101
}

where.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,19 @@ func StmtWhereIn(paramIdx, paramsLen int, driverName ...string) string {
5353
}
5454
}
5555

56-
func SliceToArgs(arr interface{}) []interface{} {
57-
val := reflect.ValueOf(arr)
58-
result := make([]interface{}, val.Len())
59-
for i := len(result) - 1; i > -1; i-- {
60-
result[i] = val.Index(i).Interface()
56+
func StmtSliceArgs(args ...interface{}) []interface{} {
57+
result := []interface{}{}
58+
for _, arg := range args {
59+
val := reflect.ValueOf(arg)
60+
switch val.Kind() {
61+
case reflect.Array, reflect.Slice:
62+
arrLen := val.Len()
63+
for i := 0; i < arrLen; i++ {
64+
result = append(result, val.Index(i).Interface())
65+
}
66+
default:
67+
result = append(result, arg)
68+
}
6169
}
6270
return result
6371
}

where_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ func TestStmtWhereIn(t *testing.T) {
2525
}
2626
}
2727

28-
func TestStmtSliceToArr(t *testing.T) {
28+
func TestStmtSliceArgs(t *testing.T) {
2929
in := []string{"a", "b", "c"}
30-
out := SliceToArgs(in)
30+
out := StmtSliceArgs(in)
3131
if len(out) != 3 {
3232
t.Fatalf("expect 3, but:%d", len(out))
3333
}

0 commit comments

Comments
 (0)