mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
193 lines
5.4 KiB
Java
193 lines
5.4 KiB
Java
package org.tests.rawsql;
|
|
|
|
import io.ebean.BaseTestCase;
|
|
import io.ebean.Ebean;
|
|
import io.ebean.FetchConfig;
|
|
import io.ebean.FutureRowCount;
|
|
import io.ebean.PagedList;
|
|
import io.ebean.Query;
|
|
import io.ebean.RawSql;
|
|
import io.ebean.RawSqlBuilder;
|
|
import org.tests.model.basic.Customer;
|
|
import org.tests.model.basic.Order;
|
|
import org.tests.model.basic.ResetBasicData;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
|
|
import java.util.List;
|
|
import java.util.concurrent.ExecutionException;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
public class TestRawSqlOrmQuery extends BaseTestCase {
|
|
|
|
@Test
|
|
public void testNamed() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
Query<Order> query = Ebean.createNamedQuery(Order.class, "myRawTest");
|
|
query.setParameter("orderStatus", Order.Status.NEW);
|
|
query.setMaxRows(10);
|
|
List<Order> list = query.findList();
|
|
for (Order order : list) {
|
|
order.getCretime();
|
|
}
|
|
|
|
String sql = query.getGeneratedSql();
|
|
assertThat(sql).contains("select o.id, o.status, o.ship_date, c.id, c.name, a.id, a.line_1, a.line_2, a.city from o_order o");
|
|
assertThat(sql).contains("join o_customer c on o.kcustomer_id = c.id ");
|
|
assertThat(sql).contains("where o.status = ? order by c.name, c.id");
|
|
}
|
|
|
|
@Test
|
|
public void test() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql = RawSqlBuilder.parse("select r.id, r.name from o_customer r ")
|
|
.columnMapping("r.id", "id")
|
|
.columnMapping("r.name", "name").create();
|
|
|
|
Query<Customer> query = Ebean.find(Customer.class);
|
|
query.setRawSql(rawSql);
|
|
query.where().ilike("name", "r%");
|
|
|
|
query.fetch("contacts", new FetchConfig().query());
|
|
query.filterMany("contacts").gt("lastName", "b");
|
|
|
|
List<Customer> list = query.findList();
|
|
Assert.assertNotNull(list);
|
|
}
|
|
|
|
@Test
|
|
public void testFirstRowsMaxRows() throws InterruptedException, ExecutionException {
|
|
|
|
if (isMsSqlServer()) return;
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql =
|
|
RawSqlBuilder
|
|
.parse("select r.id, r.name from o_customer r ")
|
|
.columnMapping("r.id", "id")
|
|
.columnMapping("r.name", "name")
|
|
.create();
|
|
|
|
Query<Customer> query = Ebean.find(Customer.class);
|
|
query.setRawSql(rawSql);
|
|
|
|
int initialRowCount = query.findCount();
|
|
|
|
query.setFirstRow(1);
|
|
query.setMaxRows(2);
|
|
List<Customer> list = query.findList();
|
|
|
|
int rowCount = query.findCount();
|
|
FutureRowCount<Customer> futureRowCount = query.findFutureCount();
|
|
|
|
Assert.assertEquals(initialRowCount, rowCount);
|
|
Assert.assertEquals(initialRowCount, futureRowCount.get().intValue());
|
|
|
|
// check that lazy loading still executes
|
|
for (Customer customer : list) {
|
|
customer.getCretime();
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testPaging() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql = RawSqlBuilder.parse("select r.id, r.name from o_customer r ")
|
|
.columnMapping("r.id", "id")
|
|
.columnMapping("r.name", "name")
|
|
.create();
|
|
|
|
Query<Customer> query = Ebean.find(Customer.class);
|
|
query.setRawSql(rawSql);
|
|
|
|
int initialRowCount = query.findCount();
|
|
|
|
PagedList<Customer> page = query.setMaxRows(2).findPagedList();
|
|
|
|
List<Customer> list = page.getList();
|
|
int rowCount = page.getTotalCount();
|
|
|
|
Assert.assertEquals(2, list.size());
|
|
Assert.assertEquals(initialRowCount, rowCount);
|
|
|
|
// check that lazy loading executes
|
|
for (Customer customer : list) {
|
|
customer.getCretime();
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testPaging_with_existingRawSqlOrderBy_expect_id_appendToOrderBy() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc")
|
|
.columnMapping("o.id", "id")
|
|
.columnMapping("o.order_date", "orderDate")
|
|
.columnMapping("o.ship_date", "shipDate")
|
|
.create();
|
|
|
|
Query<Order> query = Ebean.find(Order.class);
|
|
query.setRawSql(rawSql);
|
|
|
|
query.setMaxRows(100);
|
|
query.findList();
|
|
|
|
assertThat(query.getGeneratedSql()).contains("order by o.ship_date desc, o.id limit 100");
|
|
}
|
|
|
|
@Test
|
|
public void testPaging_when_setOrderBy_expect_id_appendToOrderBy() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc nulls last")
|
|
.columnMapping("o.id", "id")
|
|
.columnMapping("o.order_date", "orderDate")
|
|
.columnMapping("o.ship_date", "shipDate")
|
|
.create();
|
|
|
|
Query<Order> query = Ebean.find(Order.class);
|
|
query.setRawSql(rawSql);
|
|
|
|
query.setMaxRows(100);
|
|
query.order("coalesce(shipDate, now()) desc");
|
|
query.findList();
|
|
|
|
assertThat(query.getGeneratedSql()).contains("order by coalesce(o.ship_date, now()) desc, o.id limit 100");
|
|
}
|
|
|
|
@Test
|
|
public void testPaging_when_setOrderBy_containsId_expect_leaveAsIs() {
|
|
|
|
ResetBasicData.reset();
|
|
|
|
RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc")
|
|
.columnMapping("o.id", "id")
|
|
.columnMapping("o.order_date", "orderDate")
|
|
.columnMapping("o.ship_date", "shipDate")
|
|
.create();
|
|
|
|
Query<Order> query = Ebean.find(Order.class);
|
|
query.setRawSql(rawSql);
|
|
|
|
query.setMaxRows(100);
|
|
query.order("id desc");
|
|
PagedList<Order> pagedList = query.findPagedList();
|
|
pagedList.getList();
|
|
pagedList.getTotalCount();
|
|
|
|
assertThat(query.getGeneratedSql()).contains("order by o.id desc limit 100");
|
|
}
|
|
}
|