in data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java [43:89]
public static Predicate buildPredicate(AttributeFilter<?> filter, Root<?> root,
CriteriaBuilder builder) {
boolean isString;
List<Object> values;
switch (filter.getCondition()) {
case EQUAL:
isString = filter.getValue() instanceof String;
return builder.equal(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
case GT:
isString = filter.getValue() instanceof String;
return builder.greaterThan(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
case GTE:
isString = filter.getValue() instanceof String;
return builder.greaterThanOrEqualTo(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
case LT:
isString = filter.getValue() instanceof String;
return builder.lessThan(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
case LTE:
isString = filter.getValue() instanceof String;
return builder
.lessThanOrEqualTo(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
case LIKE:
return builder.like(buildPathExpression(builder, root, filter.getAttribute(), true),
filter.getValue().toString().replaceAll("\\*", "%"));
case IS_NULL:
return builder.isNull(buildPathExpression(builder, root, filter.getAttribute(), false));
case NOT_NULL:
return builder.isNotNull(buildPathExpression(builder, root, filter.getAttribute(), false));
case BETWEEN:
values = (List<Object>) filter.getValue();
isString = values.get(0) instanceof String;
return builder.between(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, values.get(0), isString),
buildObjectExpression(builder, values.get(1), isString));
case IN:
values = (List<Object>) filter.getValue();
isString = values.get(0) instanceof String;
return buildPathExpression(builder, root, filter.getAttribute(), isString).in(values.stream().map(o -> buildObjectExpression(builder, o, isString)).collect(Collectors.toList()));
case CONTAINS:
return builder.isTrue(
builder.function(ContainsSQLFunction.CONTAINS_NAME, Boolean.class, buildPathExpression(builder, root, filter.getAttribute(), false), builder.literal(filter.getValue())));
case CONTAINS_ANY:
return containsPredicate(filter, root, builder, ContainsSQLFunction.CONTAINS_ANY_NAME);
case CONTAINS_ALL:
return containsPredicate(filter, root, builder, ContainsSQLFunction.CONTAINS_ALL_NAME);
}
throw new UnsupportedOperationException("Filter " + filter + " is not supported");
}