diff --git a/src/main/java/io/ebean/config/dbplatform/LimitOffsetSqlLimiter.java b/src/main/java/io/ebean/config/dbplatform/LimitOffsetSqlLimiter.java index 113a402e3..81f9b7625 100644 --- a/src/main/java/io/ebean/config/dbplatform/LimitOffsetSqlLimiter.java +++ b/src/main/java/io/ebean/config/dbplatform/LimitOffsetSqlLimiter.java @@ -31,11 +31,12 @@ public class LimitOffsetSqlLimiter implements SqlLimiter { int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); - if (maxRows > 0) { + if (maxRows > 0 || firstRow > 0) { sb.append(" ").append(LIMIT).append(" ").append(maxRows); - } - if (firstRow > 0) { - sb.append(" ").append(OFFSET).append(" ").append(firstRow); + if (firstRow > 0) { + sb.append(" ").append(OFFSET).append(" "); + sb.append(firstRow); + } } String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); diff --git a/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java b/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java index f22571082..d8ae313ed 100644 --- a/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java +++ b/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java @@ -20,8 +20,6 @@ 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); diff --git a/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java b/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java index bf3685c9d..bf8ca4e7b 100644 --- a/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java +++ b/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java @@ -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()); diff --git a/src/test/java/org/tests/basic/TestLimitQuery.java b/src/test/java/org/tests/basic/TestLimitQuery.java index fdc6c4236..6e92f6b61 100644 --- a/src/test/java/org/tests/basic/TestLimitQuery.java +++ b/src/test/java/org/tests/basic/TestLimitQuery.java @@ -3,11 +3,10 @@ package org.tests.basic; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; +import org.junit.Assert; +import org.junit.Test; 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; @@ -23,7 +22,6 @@ public class TestLimitQuery extends BaseTestCase { } @Test - @Ignore("TODO: maxRows=-1 should become the default value for 'unset'") public void testMaxRowsZeroWithFirstRow() { ResetBasicData.reset(); diff --git a/src/test/java/org/tests/query/TestAddOrderByWithFirstRowsMaxRows.java b/src/test/java/org/tests/query/TestAddOrderByWithFirstRowsMaxRows.java index 6fc4c3199..b6a9d0a01 100644 --- a/src/test/java/org/tests/query/TestAddOrderByWithFirstRowsMaxRows.java +++ b/src/test/java/org/tests/query/TestAddOrderByWithFirstRowsMaxRows.java @@ -24,7 +24,7 @@ public class TestAddOrderByWithFirstRowsMaxRows extends BaseTestCase { LoggedSqlCollector.start(); - List list = Ebean.find(Order.class) + Ebean.find(Order.class) .setFirstRow(3) .orderBy().asc("id") .findList(); @@ -33,7 +33,6 @@ public class TestAddOrderByWithFirstRowsMaxRows extends BaseTestCase { assertThat(loggedSql).hasSize(1); assertThat(loggedSql.get(0)).contains("order by t0.id"); - assertThat(list).isNotEmpty(); }