in elasticsearch/src/main/java/org/apache/calcite/adapter/elasticsearch/PredicateAnalyzer.java [142:202]
private static boolean supportedRexCall(RexCall call) {
final SqlSyntax syntax = call.getOperator().getSyntax();
switch (syntax) {
case BINARY:
switch (call.getKind()) {
case CONTAINS:
case AND:
case OR:
case LIKE:
case EQUALS:
case NOT_EQUALS:
case GREATER_THAN:
case GREATER_THAN_OR_EQUAL:
case LESS_THAN:
case LESS_THAN_OR_EQUAL:
return true;
default:
return false;
}
case SPECIAL:
switch (call.getKind()) {
case CAST:
case LIKE:
case ITEM:
case OTHER_FUNCTION:
return true;
case CASE:
case SIMILAR:
default:
return false;
}
case FUNCTION:
return true;
case POSTFIX:
switch (call.getKind()) {
case IS_NOT_NULL:
case IS_NULL:
return true;
default:
return false;
}
case PREFIX: // NOT()
switch (call.getKind()) {
case NOT:
return true;
default:
return false;
}
case INTERNAL:
switch (call.getKind()) {
case SEARCH:
return canBeTranslatedToTermsQuery(call);
default:
return false;
}
case FUNCTION_ID:
case FUNCTION_STAR:
default:
return false;
}
}