use of io.crnk.core.queryspec.FilterSpec in project crnk-framework by crnk-project.
the class DefaultQuerySpecDeserializerTestBase method testFilterWithDotNotation.
@Test
public void testFilterWithDotNotation() {
QuerySpec expectedSpec = new QuerySpec(Task.class);
expectedSpec.addFilter(new FilterSpec(Arrays.asList("project", "name"), FilterOperator.EQ, "value"));
Map<String, Set<String>> params = new HashMap<>();
add(params, "filter[project.name]", "value");
QuerySpec actualSpec = deserializer.deserialize(taskInformation, params);
Assert.assertEquals(expectedSpec, actualSpec);
}
use of io.crnk.core.queryspec.FilterSpec in project crnk-framework by crnk-project.
the class DefaultQuerySpecDeserializerTestBase method checkIgnoreParseExceptions.
@Test
public void checkIgnoreParseExceptions() {
Assert.assertFalse(deserializer.isIgnoreParseExceptions());
deserializer.setIgnoreParseExceptions(true);
Assert.assertTrue(deserializer.isIgnoreParseExceptions());
Map<String, Set<String>> params = new HashMap<>();
add(params, "filter[id]", "notAnInteger");
QuerySpec actualSpec = deserializer.deserialize(taskInformation, params);
QuerySpec expectedSpec = new QuerySpec(Task.class);
expectedSpec.addFilter(new FilterSpec(Arrays.asList("id"), FilterOperator.EQ, "notAnInteger"));
Assert.assertEquals(expectedSpec, actualSpec);
}
use of io.crnk.core.queryspec.FilterSpec in project crnk-framework by crnk-project.
the class DefaultQuerySpecDeserializerTestBase method testFilterWithDefaultOp.
@Test
public void testFilterWithDefaultOp() {
QuerySpec expectedSpec = new QuerySpec(Task.class);
expectedSpec.addFilter(new FilterSpec(Arrays.asList("name"), FilterOperator.EQ, "value"));
Map<String, Set<String>> params = new HashMap<>();
add(params, "filter[tasks][name]", "value");
QuerySpec actualSpec = deserializer.deserialize(taskInformation, params);
Assert.assertEquals(expectedSpec, actualSpec);
}
use of io.crnk.core.queryspec.FilterSpec in project crnk-framework by crnk-project.
the class DtoMappingTest method testSubQueryComputation.
@Test
public void testSubQueryComputation() {
ResourceRepositoryV2<TestDTO, Serializable> dtoRepo = client.getQuerySpecRepository(TestDTO.class);
int n = 5;
for (long i = 0; i < n; i++) {
TestDTO dto = new TestDTO();
dto.setId(i + 100);
dto.setStringValue(Long.toString(i));
dtoRepo.create(dto);
}
// select, sort, filter by complex subquery
QuerySpec querySpec = new QuerySpec(TestDTO.class);
querySpec.addFilter(new FilterSpec(Arrays.asList(TestDTO.ATTR_COMPUTED_NUMBER_OF_SMALLER_IDS), FilterOperator.LT, 4));
// TODO enable querySpec parser
// querySpec.addSort(new SortSpec(Arrays.asList(TestDTO.ATTR_COMPUTED_NUMBER_OF_SMALLER_IDS), Direction.DESC));
ResourceList<TestDTO> dtos = dtoRepo.findAll(querySpec);
Assert.assertEquals(4, dtos.size());
for (int i = 0; i < dtos.size(); i++) {
TestDTO dto = dtos.get(i);
// 4 - i;
int j = i;
Assert.assertEquals(100 + j, dto.getId().longValue());
Assert.assertEquals(j, dto.getComputedNumberOfSmallerIds());
}
}
use of io.crnk.core.queryspec.FilterSpec in project crnk-framework by crnk-project.
the class QueryFilterBuilder method filterLargeValueSets.
private P filterLargeValueSets(FilterSpec filterSpec, MetaDataObject rootMeta, F root, JoinType defaultPredicateJoinType) {
// Split filter values with two many elements. Oracle is limited to 1000.
ArrayList<FilterSpec> filterSpecs = new ArrayList<>();
List<?> list = new ArrayList<>((Collection<?>) filterSpec.getValue());
for (int i = 0; i < list.size(); i += PARAM_LIMIT_FOR_ORACLE) {
int nextOffset = i + Math.min(list.size() - i, PARAM_LIMIT_FOR_ORACLE);
List<?> batchList = list.subList(i, nextOffset);
filterSpecs.add(new FilterSpec(filterSpec.getAttributePath(), filterSpec.getOperator(), batchList));
}
FilterSpec orSpec = FilterSpec.or(filterSpecs);
return filterSpecListToPredicate(rootMeta, root, orSpec, defaultPredicateJoinType);
}
Aggregations