in src/core-common/src/main/java/org/apache/kylin/common/persistence/metadata/FileSystemFilterFactory.java [146:191]
public void process(final FilterConversionContext context) {
val isMetaKey = META_KEY_PROPERTIES_NAME.equals(condition.getName());
switch (condition.getOp()) {
case EQUAL:
if (isMetaKey && !context.hasWholeKey) {
context.setKeyPath(condition.getValues().get(0).toString());
} else if (!isMetaKey) {
context.addJsonFilterCondition(condition);
} // If isMetaKey && context.hasWholeKey, it is a whole path, so ignore it
break;
case EQUAL_CASE_INSENSITIVE:
if (isMetaKey && !context.hasWholeKey) {
condition.setEval("(?i)" + Pattern.quote(condition.getValues().get(0).toString() + JSON_SUFFIX));
context.setMetaKeyPathCondition(condition);
} else if (!isMetaKey) {
context.addJsonFilterCondition(condition);
}
break;
case LIKE_CASE_INSENSITIVE:
if (isMetaKey && !context.hasWholeKey) {
condition.setEval(String.format(Locale.ROOT, "(?i).*%s.*",
Pattern.quote(condition.getValues().get(0).toString())));
context.setMetaKeyPathCondition(condition);
} else if (!isMetaKey) {
context.addJsonFilterCondition(condition);
}
break;
case IN:
// If the in condition is empty, an empty string can skip all the files
if (isMetaKey && !context.hasWholeKey) {
condition.setEval(condition.getValues().stream().map(x -> Pattern.quote(x + JSON_SUFFIX))
.collect(Collectors.joining("|")));
context.setMetaKeyPathCondition(condition);
} else if (!isMetaKey) {
context.addJsonFilterCondition(condition);
}
break;
case GT:
case LT:
case GE:
case LE:
default:
context.addJsonFilterCondition(condition);
break;
}
}