Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit 03eb88f

Browse files
authored
fix insert sort (#42)
1 parent ef80bec commit 03eb88f

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

builder.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,23 @@ func (b *Builder) Or(cond Cond) *Builder {
245245
return b
246246
}
247247

248+
type insertColsSorter struct {
249+
cols []string
250+
vals []interface{}
251+
}
252+
253+
func (s insertColsSorter) Len() int {
254+
return len(s.cols)
255+
}
256+
func (s insertColsSorter) Swap(i, j int) {
257+
s.cols[i], s.cols[j] = s.cols[j], s.cols[i]
258+
s.vals[i], s.vals[j] = s.vals[j], s.vals[i]
259+
}
260+
261+
func (s insertColsSorter) Less(i, j int) bool {
262+
return s.cols[i] < s.cols[j]
263+
}
264+
248265
// Insert sets insert SQL
249266
func (b *Builder) Insert(eq ...interface{}) *Builder {
250267
if len(eq) > 0 {
@@ -275,10 +292,10 @@ func (b *Builder) Insert(eq ...interface{}) *Builder {
275292
}
276293

277294
if len(b.insertCols) == len(b.insertVals) {
278-
sort.Slice(b.insertVals, func(i, j int) bool {
279-
return b.insertCols[i] < b.insertCols[j]
295+
sort.Sort(insertColsSorter{
296+
cols: b.insertCols,
297+
vals: b.insertVals,
280298
})
281-
sort.Strings(b.insertCols)
282299
}
283300
b.optype = insertType
284301
return b

builder_insert_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ func TestBuilderInsert(t *testing.T) {
1515
assert.NoError(t, err)
1616
assert.EqualValues(t, "INSERT INTO table1 (c,d) Values (1,2)", sql)
1717

18+
sql, err = Insert(Eq{"e": 3}, Eq{"c": 1}, Eq{"d": 2}).Into("table1").ToBoundSQL()
19+
assert.NoError(t, err)
20+
assert.EqualValues(t, "INSERT INTO table1 (c,d,e) Values (1,2,3)", sql)
21+
1822
sql, err = Insert(Eq{"c": 1, "d": Expr("SELECT b FROM t WHERE d=? LIMIT 1", 2)}).Into("table1").ToBoundSQL()
1923
assert.NoError(t, err)
2024
assert.EqualValues(t, "INSERT INTO table1 (c,d) Values (1,(SELECT b FROM t WHERE d=2 LIMIT 1))", sql)

0 commit comments

Comments
 (0)