mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
140 lines
3.2 KiB
Java
140 lines
3.2 KiB
Java
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 java.util.List;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
|
public class TestLimitQuery extends BaseTestCase {
|
|
|
|
@Test
|
|
public void testLimitWithMany() {
|
|
rob();
|
|
rob();
|
|
}
|
|
|
|
@Test
|
|
public void testMaxRowsZeroWithFirstRow() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
Query<Order> query = Ebean.find(Order.class)
|
|
.setAutoTune(false)
|
|
.fetch("details")
|
|
.where().gt("details.id", 0)
|
|
.setMaxRows(0)
|
|
.setFirstRow(3)
|
|
.order().asc("orderDate");
|
|
|
|
query.findList();
|
|
|
|
String sql = query.getGeneratedSql();
|
|
if (isH2()) {
|
|
assertThat(sql).contains("offset 3");
|
|
assertThat(sql).contains("limit 0");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testMaxRowsWithFirstRowZero() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
Query<Order> query = Ebean.find(Order.class)
|
|
.setAutoTune(false)
|
|
.fetch("details")
|
|
.where().gt("details.id", 0)
|
|
.setMaxRows(3)
|
|
.setFirstRow(0);
|
|
|
|
query.findList();
|
|
|
|
String sql = query.getGeneratedSql();
|
|
boolean hasLimit = sql.contains("limit 3");
|
|
boolean hasOffset = sql.contains("offset");
|
|
|
|
if (isH2()) {
|
|
Assert.assertTrue(sql, hasLimit);
|
|
Assert.assertFalse(sql, hasOffset);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testDefaults() {
|
|
ResetBasicData.reset();
|
|
|
|
Query<Order> query = Ebean.find(Order.class)
|
|
.setAutoTune(false)
|
|
.fetch("details")
|
|
.where().gt("details.id", 0)
|
|
.query();
|
|
|
|
query.findList();
|
|
|
|
String sql = query.getGeneratedSql();
|
|
boolean hasLimit = sql.contains("limit");
|
|
boolean hasOffset = sql.contains("offset");
|
|
|
|
if (isH2()) {
|
|
Assert.assertFalse(hasLimit);
|
|
Assert.assertFalse(hasOffset);
|
|
}
|
|
}
|
|
|
|
private void rob() {
|
|
ResetBasicData.reset();
|
|
|
|
Query<Order> query = Ebean.find(Order.class)
|
|
.setAutoTune(false)
|
|
.fetch("details")
|
|
.where().gt("details.id", 0)
|
|
.setMaxRows(10);
|
|
//.findList();
|
|
|
|
List<Order> list = query.findList();
|
|
|
|
Assert.assertTrue("sz > 0", !list.isEmpty());
|
|
|
|
String sql = query.getGeneratedSql();
|
|
boolean hasDetailsJoin = sql.contains("join o_order_detail");
|
|
boolean hasLimit = sql.contains("limit 10");
|
|
boolean hasSelectedDetails = sql.contains("od.id,");
|
|
boolean hasDistinct = sql.contains("select distinct");
|
|
|
|
Assert.assertTrue(hasDetailsJoin);
|
|
Assert.assertFalse(hasSelectedDetails);
|
|
Assert.assertTrue(hasDistinct);
|
|
if (isH2()) {
|
|
Assert.assertTrue(hasLimit);
|
|
}
|
|
|
|
query = Ebean.find(Order.class)
|
|
.setAutoTune(false)
|
|
.fetch("details")
|
|
.setMaxRows(10);
|
|
|
|
query.findList();
|
|
|
|
sql = query.getGeneratedSql();
|
|
hasDetailsJoin = sql.contains("left join o_order_detail");
|
|
hasLimit = sql.contains("limit 10");
|
|
hasSelectedDetails = sql.contains("od.id");
|
|
hasDistinct = sql.contains("select distinct");
|
|
|
|
Assert.assertFalse("no join with maxRows", hasDetailsJoin);
|
|
Assert.assertFalse(hasSelectedDetails);
|
|
Assert.assertFalse(hasDistinct);
|
|
if (isH2()) {
|
|
Assert.assertTrue(hasLimit);
|
|
}
|
|
}
|
|
}
|