use of org.springframework.data.relational.core.query.Criteria in project spring-data-jdbc by spring-projects.
the class CriteriaFactoryUnitTests method shouldConsiderArrayValuesInInOperator.
// DATAJDBC-539
@Test
void shouldConsiderArrayValuesInInOperator() {
QueryMethod queryMethod = getQueryMethod("findAllByNameIn", String[].class);
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new String[] { "foo", "bar" } });
ParameterMetadataProvider parameterMetadata = new ParameterMetadataProvider(accessor);
CriteriaFactory criteriaFactory = new CriteriaFactory(parameterMetadata);
Part part = new Part("NameIn", User.class);
Criteria criteria = criteriaFactory.createCriteria(part);
assertThat(criteria.getValue()).isEqualTo(Arrays.asList("foo", "bar"));
}
use of org.springframework.data.relational.core.query.Criteria in project spring-data-jdbc by spring-projects.
the class RelationalExampleMapper method getMappedExample.
/**
* Transform each property of the {@link Example}'s probe into a {@link Criteria} and assemble them into a
* {@link Query}.
*
* @param example
* @param entity
* @return query
*/
private <T> Query getMappedExample(Example<T> example, RelationalPersistentEntity<?> entity) {
Assert.notNull(example, "Example must not be null!");
Assert.notNull(entity, "RelationalPersistentEntity must not be null!");
PersistentPropertyAccessor<T> propertyAccessor = entity.getPropertyAccessor(example.getProbe());
ExampleMatcherAccessor matcherAccessor = new ExampleMatcherAccessor(example.getMatcher());
final List<Criteria> criteriaBasedOnProperties = new ArrayList<>();
entity.doWithProperties((PropertyHandler<RelationalPersistentProperty>) property -> {
if (matcherAccessor.isIgnoredPath(property.getName())) {
return;
}
Optional<?> optionalConvertedPropValue = matcherAccessor.getValueTransformerForPath(property.getName()).apply(Optional.ofNullable(propertyAccessor.getProperty(property)));
if (!optionalConvertedPropValue.isPresent()) {
return;
}
Object convPropValue = optionalConvertedPropValue.get();
boolean ignoreCase = matcherAccessor.isIgnoreCaseForPath(property.getName());
String column = property.getName();
switch(matcherAccessor.getStringMatcherForPath(property.getName())) {
case DEFAULT:
case EXACT:
criteriaBasedOnProperties.add(includeNulls(example) ? Criteria.where(column).isNull().or(column).is(convPropValue).ignoreCase(ignoreCase) : Criteria.where(column).is(convPropValue).ignoreCase(ignoreCase));
break;
case ENDING:
criteriaBasedOnProperties.add(includeNulls(example) ? Criteria.where(column).isNull().or(column).like("%" + convPropValue).ignoreCase(ignoreCase) : Criteria.where(column).like("%" + convPropValue).ignoreCase(ignoreCase));
break;
case STARTING:
criteriaBasedOnProperties.add(includeNulls(example) ? Criteria.where(column).isNull().or(column).like(convPropValue + "%").ignoreCase(ignoreCase) : Criteria.where(column).like(convPropValue + "%").ignoreCase(ignoreCase));
break;
case CONTAINING:
criteriaBasedOnProperties.add(includeNulls(example) ? Criteria.where(column).isNull().or(column).like("%" + convPropValue + "%").ignoreCase(ignoreCase) : Criteria.where(column).like("%" + convPropValue + "%").ignoreCase(ignoreCase));
break;
default:
throw new IllegalStateException(example.getMatcher().getDefaultStringMatcher() + " is not supported!");
}
});
// Criteria, assemble!
Criteria criteria = Criteria.empty();
for (Criteria propertyCriteria : criteriaBasedOnProperties) {
if (example.getMatcher().isAllMatching()) {
criteria = criteria.and(propertyCriteria);
} else {
criteria = criteria.or(propertyCriteria);
}
}
return Query.query(criteria);
}
use of org.springframework.data.relational.core.query.Criteria in project spring-data-jdbc by spring-projects.
the class CriteriaUnitTests method shouldBuildNotEqualsCriteria.
// DATAJDBC-513
@Test
void shouldBuildNotEqualsCriteria() {
Criteria criteria = where("foo").not("bar");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(CriteriaDefinition.Comparator.NEQ);
assertThat(criteria.getValue()).isEqualTo("bar");
}
use of org.springframework.data.relational.core.query.Criteria in project spring-data-jdbc by spring-projects.
the class CriteriaUnitTests method orGroupedCriteria.
// DATAJDBC-513
@Test
void orGroupedCriteria() {
Criteria criteria = where("foo").is("bar").or(where("foo").is("baz"));
assertThat(criteria.isGroup()).isTrue();
assertThat(criteria.getGroup()).hasSize(1);
assertThat(criteria.getGroup().get(0).getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getCombinator()).isEqualTo(Criteria.Combinator.OR);
criteria = criteria.getPrevious();
assertThat(criteria).isNotNull();
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(CriteriaDefinition.Comparator.EQ);
assertThat(criteria.getValue()).isEqualTo("bar");
}
use of org.springframework.data.relational.core.query.Criteria in project spring-data-jdbc by spring-projects.
the class CriteriaUnitTests method shouldBuildEqualsIgnoreCaseCriteria.
@Test
void shouldBuildEqualsIgnoreCaseCriteria() {
Criteria criteria = where("foo").is("bar").ignoreCase(true);
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(CriteriaDefinition.Comparator.EQ);
assertThat(criteria.getValue()).isEqualTo("bar");
assertThat(criteria.isIgnoreCase()).isTrue();
}
Aggregations