#660 - findPagedList() does not handle raw sql order by

This commit is contained in:
Robin Bygrave
2016-04-26 22:54:34 +12:00
parent d2ae044d1f
commit ae261d3782
5 changed files with 181 additions and 12 deletions
@@ -3,6 +3,7 @@ package com.avaje.tests.rawsql;
import java.util.List;
import java.util.concurrent.ExecutionException;
import com.avaje.tests.model.basic.Order;
import org.junit.Assert;
import org.junit.Test;
@@ -17,6 +18,8 @@ import com.avaje.ebean.RawSqlBuilder;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import static org.assertj.core.api.Assertions.assertThat;
public class TestRawSqlOrmQuery extends BaseTestCase {
@Test
@@ -107,4 +110,71 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
}
}
@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 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.setUseCache(false).setUseQueryCache(false);
query.setRawSql(rawSql);
query.setMaxRows(100);
query.findList();
assertThat(query.getGeneratedSql()).contains("order by o.ship_date desc nulls last, 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.setUseCache(false).setUseQueryCache(false);
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 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.setUseCache(false).setUseQueryCache(false);
query.setRawSql(rawSql);
query.setMaxRows(100);
query.order("id desc");
PagedList<Order> pagedList = query.findPagedList();
pagedList.getList();
pagedList.getTotalRowCount();
assertThat(query.getGeneratedSql()).contains("order by o.id desc limit 100");
}
}