Merge pull request #2645 from FOCONIS/sort-beancache

NPE executing query with beanCache and order by & clear
This commit is contained in:
Rob Bygrave
2022-04-13 10:23:28 +12:00
committed by GitHub
2 changed files with 17 additions and 3 deletions
@@ -524,7 +524,7 @@ public final class OrmQueryRequest<T> extends BeanRequest implements SpiOrmQuery
}
if (result instanceof BeanList) {
OrderBy<T> orderBy = query.getOrderBy();
if (orderBy != null) {
if (orderBy != null && !orderBy.isEmpty()) {
// in memory sort after merging the cache hits with the DB hits
beanDescriptor.sort(((BeanList<T>) result).getActualList(), orderBy.toStringFormat());
}
@@ -543,7 +543,7 @@ public final class OrmQueryRequest<T> extends BeanRequest implements SpiOrmQuery
@Override
public List<T> beanCacheHits() {
OrderBy<T> orderBy = query.getOrderBy();
if (orderBy != null) {
if (orderBy != null && !orderBy.isEmpty()) {
beanDescriptor.sort(cacheBeans, orderBy.toStringFormat());
}
return cacheBeans;
@@ -552,7 +552,7 @@ public final class OrmQueryRequest<T> extends BeanRequest implements SpiOrmQuery
@Override
public <K> Map<K, T> beanCacheHitsAsMap() {
OrderBy<T> orderBy = query.getOrderBy();
if (orderBy != null) {
if (orderBy != null && !orderBy.isEmpty()) {
beanDescriptor.sort(cacheBeans, orderBy.toStringFormat());
}
return cacheBeansToMap();
@@ -6,6 +6,7 @@ import io.ebean.OrderBy;
import io.ebean.Query;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order;
import org.tests.model.basic.OrderDetail;
import org.tests.model.basic.ResetBasicData;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -37,5 +38,18 @@ public class TestOrderByClear extends BaseTestCase {
assertTrue(sql.contains("order by t0.ship_date"));
}
@Test
public void testWithCache() {
ResetBasicData.reset();
Query<OrderDetail> query = DB.find(OrderDetail.class).where().idIn(1,2,3).query();
query.setUseCache(true);
query.findList();
query.order().asc("cretime").findList(); // hit cache
query.order().clear();
query.findList(); // hit cache again
}
}