Skip to content

Commit 590c04d

Browse files
authored
Add test for count with orderby and limit (go-xorm#880)
* add test for count with orderby and limit * fix the bug
1 parent 99ab88d commit 590c04d

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

session_find.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{})
161161
}
162162

163163
args = append(session.statement.joinArgs, condArgs...)
164-
sqlStr, err = session.statement.genSelectSQL(columnStr, condSQL, true)
164+
sqlStr, err = session.statement.genSelectSQL(columnStr, condSQL, true, true)
165165
if err != nil {
166166
return err
167167
}

session_query.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interfa
7070
}
7171

7272
args := append(session.statement.joinArgs, condArgs...)
73-
sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL, true)
73+
sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL, true, true)
7474
if err != nil {
7575
return "", nil, err
7676
}

session_stats_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,28 @@ func TestSQLCount(t *testing.T) {
158158
assert.NoError(t, err)
159159
assert.EqualValues(t, 0, total)
160160
}
161+
162+
func TestCountWithOthers(t *testing.T) {
163+
assert.NoError(t, prepareEngine())
164+
165+
type CountWithOthers struct {
166+
Id int64
167+
Name string
168+
}
169+
170+
assertSync(t, new(CountWithOthers))
171+
172+
_, err := testEngine.Insert(&CountWithOthers{
173+
Name: "orderby",
174+
})
175+
assert.NoError(t, err)
176+
177+
_, err = testEngine.Insert(&CountWithOthers{
178+
Name: "limit",
179+
})
180+
assert.NoError(t, err)
181+
182+
total, err := testEngine.OrderBy("id desc").Limit(1).Count(new(CountWithOthers))
183+
assert.NoError(t, err)
184+
assert.EqualValues(t, 2, total)
185+
}

statement.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{},
971971
return "", nil, err
972972
}
973973

974-
sqlStr, err := statement.genSelectSQL(columnStr, condSQL, true)
974+
sqlStr, err := statement.genSelectSQL(columnStr, condSQL, true, true)
975975
if err != nil {
976976
return "", nil, err
977977
}
@@ -1001,7 +1001,7 @@ func (statement *Statement) genCountSQL(beans ...interface{}) (string, []interfa
10011001
selectSQL = "count(*)"
10021002
}
10031003
}
1004-
sqlStr, err := statement.genSelectSQL(selectSQL, condSQL, false)
1004+
sqlStr, err := statement.genSelectSQL(selectSQL, condSQL, false, false)
10051005
if err != nil {
10061006
return "", nil, err
10071007
}
@@ -1026,15 +1026,15 @@ func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (stri
10261026
return "", nil, err
10271027
}
10281028

1029-
sqlStr, err := statement.genSelectSQL(sumSelect, condSQL, true)
1029+
sqlStr, err := statement.genSelectSQL(sumSelect, condSQL, true, true)
10301030
if err != nil {
10311031
return "", nil, err
10321032
}
10331033

10341034
return sqlStr, append(statement.joinArgs, condArgs...), nil
10351035
}
10361036

1037-
func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit bool) (a string, err error) {
1037+
func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit, needOrderBy bool) (a string, err error) {
10381038
var distinct string
10391039
if statement.IsDistinct && !strings.HasPrefix(columnStr, "count") {
10401040
distinct = "DISTINCT "
@@ -1101,9 +1101,10 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit bo
11011101
}
11021102

11031103
var orderStr string
1104-
if len(statement.OrderStr) > 0 {
1104+
if needOrderBy && len(statement.OrderStr) > 0 {
11051105
orderStr = " ORDER BY " + statement.OrderStr
11061106
}
1107+
11071108
var groupStr string
11081109
if len(statement.GroupByStr) > 0 {
11091110
groupStr = " GROUP BY " + statement.GroupByStr
@@ -1129,7 +1130,7 @@ func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit bo
11291130
if statement.HavingStr != "" {
11301131
a = fmt.Sprintf("%v %v", a, statement.HavingStr)
11311132
}
1132-
if statement.OrderStr != "" {
1133+
if needOrderBy && statement.OrderStr != "" {
11331134
a = fmt.Sprintf("%v ORDER BY %v", a, statement.OrderStr)
11341135
}
11351136
if needLimit {

0 commit comments

Comments
 (0)