Generate valid SQL when firstRow is set but not maxRows

This commit is contained in:
Tobias
2013-10-07 16:29:23 +02:00
parent 09ea5217dc
commit 1330fe8fb6
2 changed files with 88 additions and 12 deletions
@@ -16,17 +16,94 @@ import com.avaje.tests.model.basic.ResetBasicData;
public class TestLimitQuery extends BaseTestCase {
@Test
@Test
public void testNothing() {
}
@Test
@Test
public void testLimitWithMany() {
rob();
rob();
}
@Test
public void testMaxRowsZeroWithFirstRow() {
ResetBasicData.reset();
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
boolean h2Db = "h2".equals(server.getDatabasePlatform().getName());
Query<Order> query = Ebean.find(Order.class)
.setAutofetch(false)
.fetch("details")
.where().gt("details.id", 0)
.setMaxRows(0)
.setFirstRow(3);
List<Order> list = query.findList();
String sql = query.getGeneratedSql();
boolean hasLimit = sql.indexOf("limit 0") > -1;
boolean hasOffset = sql.indexOf("offset 3") > -1;
if (h2Db) {
Assert.assertTrue(hasLimit);
Assert.assertTrue(hasOffset);
}
}
@Test
public void testMaxRowsWithFirstRowZero() {
ResetBasicData.reset();
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
boolean h2Db = "h2".equals(server.getDatabasePlatform().getName());
Query<Order> query = Ebean.find(Order.class)
.setAutofetch(false)
.fetch("details")
.where().gt("details.id", 0)
.setMaxRows(3)
.setFirstRow(0);
List<Order> list = query.findList();
String sql = query.getGeneratedSql();
boolean hasLimit = sql.indexOf("limit 4") > -1;
boolean hasOffset = sql.indexOf("offset") > -1;
if (h2Db) {
Assert.assertTrue(hasLimit);
Assert.assertFalse(hasOffset);
}
}
@Test
public void testDefaults() {
ResetBasicData.reset();
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
boolean h2Db = "h2".equals(server.getDatabasePlatform().getName());
Query<Order> query = Ebean.find(Order.class)
.setAutofetch(false)
.fetch("details")
.where().gt("details.id", 0)
.query();
List<Order> list = query.findList();
String sql = query.getGeneratedSql();
boolean hasLimit = sql.indexOf("limit") > -1;
boolean hasOffset = sql.indexOf("offset") > -1;
if (h2Db) {
Assert.assertFalse(hasLimit);
Assert.assertFalse(hasOffset);
}
}
private void rob() {
ResetBasicData.reset();
@@ -43,7 +120,7 @@ public class TestLimitQuery extends BaseTestCase {
List<Order> list = query.findList();
Assert.assertTrue("sz > 0", list.size() > 0);
String sql = query.getGeneratedSql();
boolean hasDetailsJoin = sql.indexOf("join o_order_detail") > -1;
boolean hasLimit = sql.indexOf("limit 11") > -1;
@@ -69,7 +146,7 @@ public class TestLimitQuery extends BaseTestCase {
hasLimit = sql.indexOf("limit 11") > -1;
hasSelectedDetails = sql.indexOf("od.id") > -1;
hasDistinct = sql.indexOf("select distinct") > -1;
Assert.assertFalse("no join with maxRows",hasDetailsJoin);
Assert.assertFalse(hasSelectedDetails);
Assert.assertFalse(hasDistinct);