in persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java [217:287]
private String filterStringFunction(AttributeFilter<?> filter) {
JsonField field = fields.get(filter.getAttribute());
switch (filter.getCondition()) {
case CONTAINS:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("= %s", getValueForQueryString(filter.getValue())))
.toString();
case CONTAINS_ALL:
return (String) ((List) filter.getValue())
.stream()
.map(o -> cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("= %s", getValueForQueryString(o))))
.collect(joining(AND));
case CONTAINS_ANY:
return (String) ((List) filter.getValue())
.stream()
.map(o -> cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("= %s", getValueForQueryString(o))))
.collect(joining(OR));
case LIKE:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("LIKE %s", getValueForQueryString(filter.getValue())))
.toString()
.replaceAll("\\*", "%");
case EQUAL:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("= %s", getValueForQueryString(filter.getValue())))
.toString();
case IN:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("IN (%s)", ((List) filter.getValue()).stream().map(PostgresQuery::getValueForQueryString).collect(joining(", "))))
.toString();
case IS_NULL:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append("IS NULL")
.toString();
case NOT_NULL:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append("IS NOT NULL")
.toString();
case BETWEEN:
List<Object> value = (List<Object>) filter.getValue();
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("BETWEEN %s AND %s", getValueForQueryString(value.get(0)), getValueForQueryString(value.get(1))))
.toString();
case GT:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("> %s", getValueForQueryString(filter.getValue())))
.toString();
case GTE:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format(">= %s", getValueForQueryString(filter.getValue())))
.toString();
case LT:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("< %s", getValueForQueryString(filter.getValue())))
.toString();
case LTE:
return cast(field, format(ATTRIBUTE_ACCESSOR, filter.getAttribute()))
.append(format("<= %s", getValueForQueryString(filter.getValue())))
.toString();
case OR:
return getRecursiveString(filter, OR);
case AND:
return getRecursiveString(filter, AND);
case NOT:
return format("not %s", filterStringFunction((AttributeFilter<?>) filter.getValue()));
default:
return null;
}
}