FIX for the limit query (#1540)

This commit is contained in:
Roland Praml
2018-11-13 21:08:53 +13:00
committed by Rob Bygrave
parent ec24374d72
commit e4cb5f0443
5 changed files with 14 additions and 10 deletions
@@ -31,12 +31,11 @@ public class LimitOffsetSqlLimiter implements SqlLimiter {
int firstRow = request.getFirstRow();
int maxRows = request.getMaxRows();
if (maxRows > 0 || firstRow > 0) {
if (maxRows > 0) {
sb.append(" ").append(LIMIT).append(" ").append(maxRows);
if (firstRow > 0) {
sb.append(" ").append(OFFSET).append(" ");
sb.append(firstRow);
}
}
if (firstRow > 0) {
sb.append(" ").append(OFFSET).append(" ").append(firstRow);
}
String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
@@ -20,6 +20,8 @@ public class Db2SqlLimiter implements SqlLimiter {
if (maxRows > 0) {
sb.append(" ").append(NEW_LINE).append("FETCH FIRST ").append(maxRows).append(" ROWS ONLY");
}
// FIXME: There is no 'firstRow' support for DB2. Maybe we can use the MYS compatibility:
// https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/limit_offset?lang=en
String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
return new SqlLimitResponse(sql, false);
@@ -22,11 +22,11 @@ public class HanaSqlLimiter implements SqlLimiter {
if (maxRows > 0) {
sb.append(" ").append("limit ").append(maxRows);
if (firstRow > 0) {
sb.append(" ").append("offset ");
sb.append(firstRow);
}
}
if (firstRow > 0) {
sb.append(" ").append("offset ").append(firstRow);
}
// CHECKME: Roland Praml: as far as I see, this code does the same as 'LimotOffsetSqlLimiter'
String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
@@ -6,6 +6,7 @@ import io.ebean.Query;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import java.util.List;
@@ -22,6 +23,7 @@ public class TestLimitQuery extends BaseTestCase {
}
@Test
@Ignore("TODO: maxRows=-1 should become the default value for 'unset'")
public void testMaxRowsZeroWithFirstRow() {
ResetBasicData.reset();
@@ -24,7 +24,7 @@ public class TestAddOrderByWithFirstRowsMaxRows extends BaseTestCase {
LoggedSqlCollector.start();
Ebean.find(Order.class)
List<Order> list = Ebean.find(Order.class)
.setFirstRow(3)
.orderBy().asc("id")
.findList();
@@ -33,6 +33,7 @@ public class TestAddOrderByWithFirstRowsMaxRows extends BaseTestCase {
assertThat(loggedSql).hasSize(1);
assertThat(loggedSql.get(0)).contains("order by t0.id");
assertThat(list).isNotEmpty();
}