Merge pull request #797 from backslash47/master

Add check for distinct query when adding id attribute to order clause in paging query
This commit is contained in:
Rob Bygrave
2016-08-01 22:47:34 +12:00
committed by GitHub
2 changed files with 29 additions and 1 deletions
@@ -300,9 +300,10 @@ public class CQueryEngine {
SpiQuery<T> query = request.getQuery();
if (query.getMaxRows() > 1 || query.getFirstRow() > 0) {
if (!query.isDistinct() && (query.getMaxRows() > 1 || query.getFirstRow() > 0)) {
// deemed to be a be a paging query - check that the order by contains
// the id property to ensure unique row ordering for predicable paging
// but only in case, this is not a distinct query
request.getBeanDescriptor().appendOrderById(query);
}
@@ -80,5 +80,32 @@ public class TestQueryDistinct extends BaseTestCase {
Assert.assertNull(customer.getAnniversary());
}
}
@Test
public void testPagingQuery() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class)
.setMaxRows(10)
.setDistinct(true)
.select("name");
List<Customer> customers = query.findList();
String generatedSql = query.getGeneratedSql();
Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0 limit 10"));
for (Customer customer : customers) {
EntityBeanIntercept ebi = ((EntityBean)customer)._ebean_getIntercept();
Assert.assertTrue(ebi.isDisableLazyLoad());
Assert.assertNull(ebi.getPersistenceContext());
// lazy loading disabled
Assert.assertNull(customer.getId());
Assert.assertNull(customer.getAnniversary());
}
}
}