package org.tests.query.sqlquery;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.SqlQuery;
import io.ebean.SqlRow;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
public class SqlQueryTests extends BaseTestCase {
@Test
public void firstRowMaxRows() {
ResetBasicData.reset();
SqlQuery sqlQuery = Ebean.createSqlQuery("Select * from o_order");
sqlQuery.setFirstRow(3);
sqlQuery.setMaxRows(10);
LoggedSqlCollector.start();
List<SqlRow> list = sqlQuery.findList();
List<String> sql = LoggedSqlCollector.stop();
assertThat(sql.get(0)).contains("Select * from o_order limit 10 offset 3; --bind()");
assertThat(list).isNotEmpty();
}
@Test
public void firstRow() {
if (isPostgres()) {
ResetBasicData.reset();
SqlQuery sqlQuery = Ebean.createSqlQuery("Select * from o_order order by id");
sqlQuery.setFirstRow(3);
LoggedSqlCollector.start();
sqlQuery.findList();
List<String> sql = LoggedSqlCollector.stop();
assertThat(sql.get(0)).contains("Select * from o_order order by id offset 3");
}
}
@Test
public void maxRows() {
ResetBasicData.reset();
SqlQuery sqlQuery = Ebean.createSqlQuery("Select * from o_order order by id");
sqlQuery.setMaxRows(10);
LoggedSqlCollector.start();
sqlQuery.findList();
List<String> sql = LoggedSqlCollector.stop();
assertThat(sql.get(0)).contains("Select * from o_order order by id limit 10");
}
@Test
public void maxRows_withParam() {
ResetBasicData.reset();
SqlQuery sqlQuery = Ebean.createSqlQuery("select * from o_order where o_order.id > :id order by id ");
sqlQuery.setParameter("id", 3);
sqlQuery.setMaxRows(10);
LoggedSqlCollector.start();
sqlQuery.findList();
List<String> sql = LoggedSqlCollector.stop();
assertThat(sql.get(0)).contains("select * from o_order where o_order.id > ? order by id limit 10;");
}
@Test
public void findEachMaxRows() {
ResetBasicData.reset();
SqlQuery sqlQuery = Ebean.createSqlQuery("Select * from o_order");
sqlQuery.setMaxRows(10);
LoggedSqlCollector.start();
sqlQuery.findEach(bean -> bean.get("id"));
List<String> sql = LoggedSqlCollector.stop();
assertThat(sql.get(0)).contains("limit 10");
}
@Test
public void findEach() {
ResetBasicData.reset();
int expectedRows = Ebean.find(Order.class).findCount();
final AtomicInteger count = new AtomicInteger();
SqlQuery sqlQuery = Ebean.createSqlQuery("select * from o_order");
sqlQuery.findEach(bean -> count.incrementAndGet());
assertEquals(expectedRows, count.get());
}
@Test
public void findEachWhile() {
ResetBasicData.reset();
final AtomicInteger count = new AtomicInteger();
SqlQuery sqlQuery = Ebean.createSqlQuery("select * from o_order order by id");
sqlQuery.findEachWhile(bean -> {
count.incrementAndGet();
Integer id = bean.getInteger("id");
return id < 3;
});
assertEquals(3, count.get());
}
}