forked from mirror/gorm
fix no limit no offset. (#3101)
* fix no limit no offset. * add test for playground.
This commit is contained in:
parent
3f355dc050
commit
3c03b6e527
|
@ -18,11 +18,13 @@ func (limit Limit) Build(builder Builder) {
|
||||||
if limit.Limit > 0 {
|
if limit.Limit > 0 {
|
||||||
builder.WriteString("LIMIT ")
|
builder.WriteString("LIMIT ")
|
||||||
builder.WriteString(strconv.Itoa(limit.Limit))
|
builder.WriteString(strconv.Itoa(limit.Limit))
|
||||||
|
}
|
||||||
if limit.Offset > 0 {
|
if limit.Offset > 0 {
|
||||||
builder.WriteString(" OFFSET ")
|
if limit.Limit > 0 {
|
||||||
builder.WriteString(strconv.Itoa(limit.Offset))
|
builder.WriteString(" ")
|
||||||
}
|
}
|
||||||
|
builder.WriteString("OFFSET ")
|
||||||
|
builder.WriteString(strconv.Itoa(limit.Offset))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,18 @@ func TestLimit(t *testing.T) {
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` LIMIT 10 OFFSET 20", nil,
|
"SELECT * FROM `users` LIMIT 10 OFFSET 20", nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}},
|
||||||
|
"SELECT * FROM `users` OFFSET 20", nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Offset: 30}},
|
||||||
|
"SELECT * FROM `users` OFFSET 30", nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Limit: 10}},
|
||||||
|
"SELECT * FROM `users` LIMIT 10 OFFSET 20", nil,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}},
|
||||||
"SELECT * FROM `users` LIMIT 10 OFFSET 30", nil,
|
"SELECT * FROM `users` LIMIT 10 OFFSET 30", nil,
|
||||||
|
@ -30,7 +42,7 @@ func TestLimit(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: -10}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: -10}},
|
||||||
"SELECT * FROM `users`", nil,
|
"SELECT * FROM `users` OFFSET 30", nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: 50}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: 10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: 50}},
|
||||||
|
|
|
@ -381,6 +381,12 @@ func TestOffset(t *testing.T) {
|
||||||
if (len(users1) != len(users4)) || (len(users1)-len(users2) != 3) || (len(users1)-len(users3) != 5) {
|
if (len(users1) != len(users4)) || (len(users1)-len(users2) != 3) || (len(users1)-len(users3) != 5) {
|
||||||
t.Errorf("Offset should work")
|
t.Errorf("Offset should work")
|
||||||
}
|
}
|
||||||
|
DB.Where("name like ?", "OffsetUser%").Order("age desc").Find(&users1).Offset(3).Find(&users2).Offset(5).Find(&users3).Offset(-1).Find(&users4)
|
||||||
|
|
||||||
|
if (len(users1) != len(users4)) || (len(users1)-len(users2) != 3) || (len(users1)-len(users3) != 5) {
|
||||||
|
t.Errorf("Offset should work without limit.")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSearchWithMap(t *testing.T) {
|
func TestSearchWithMap(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue