Add test for limit with query (#1787)

Reviewed-on: https://gitea.com/xorm/xorm/pulls/1787
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-committed-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
Lunny Xiao 2021-07-21 21:13:15 +08:00
parent 0f3f4ea7fb
commit 47cfe0347f
2 changed files with 25 additions and 0 deletions

View File

@ -396,3 +396,25 @@ func TestJoinWithSubQuery(t *testing.T) {
assert.EqualValues(t, 1, len(querys)) assert.EqualValues(t, 1, len(querys))
assert.EqualValues(t, q, querys[0]) assert.EqualValues(t, q, querys[0])
} }
func TestQueryStringWithLimit(t *testing.T) {
assert.NoError(t, PrepareEngine())
if testEngine.Dialect().URI().DBType == schemas.MSSQL {
t.SkipNow()
return
}
type QueryWithLimit struct {
Id int64 `xorm:"autoincr pk"`
Msg string `xorm:"varchar(255)"`
DepartId int64
Money float32
}
assert.NoError(t, testEngine.Sync2(new(QueryWithLimit)))
data, err := testEngine.Table("query_with_limit").Limit(20, 20).QueryString()
assert.NoError(t, err)
assert.EqualValues(t, 0, len(data))
}

View File

@ -247,6 +247,9 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB
top = fmt.Sprintf("TOP %d ", LimitNValue) top = fmt.Sprintf("TOP %d ", LimitNValue)
} }
if statement.Start > 0 { if statement.Start > 0 {
if statement.RefTable == nil {
return "", nil, errors.New("Unsupported query limit without reference table")
}
var column string var column string
if len(statement.RefTable.PKColumns()) == 0 { if len(statement.RefTable.PKColumns()) == 0 {
for _, index := range statement.RefTable.Indexes { for _, index := range statement.RefTable.Indexes {