@Override
  public Optional<RowDataPredicate> visit(CallExpression call) {
    if (BuiltInFunctionDefinitions.EQUALS.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(EQUALS, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.LESS_THAN.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(LESS_THAN, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.LESS_THAN_OR_EQUAL.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(LESS_THAN_OR_EQUAL, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.GREATER_THAN.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(GREATER_THAN, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.GREATER_THAN_OR_EQUAL.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(GREATER_THAN_OR_EQUAL, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.NOT_EQUALS.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(NOT_EQUALS, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.OR.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(OR, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.AND.equals(call.getFunctionDefinition())) {
      return renderBinaryOperator(AND, call.getResolvedChildren());
    }
    if (BuiltInFunctionDefinitions.IS_NULL.equals(call.getFunctionDefinition())) {
      return renderUnaryOperator(IS_NULL, call.getResolvedChildren().get(0));
    }
    if (BuiltInFunctionDefinitions.IS_NOT_NULL.equals(call.getFunctionDefinition())) {
      return renderUnaryOperator(IS_NOT_NULL, call.getResolvedChildren().get(0));
    }
    if (BuiltInFunctionDefinitions.PLUS.equals(call.getFunctionDefinition())) {
      return arithmeticOperator(PLUS, call);
    }
    if (BuiltInFunctionDefinitions.MINUS.equals(call.getFunctionDefinition())) {
      return arithmeticOperator(MINUS, call);
    }
    if (BuiltInFunctionDefinitions.TIMES.equals(call.getFunctionDefinition())) {
      return arithmeticOperator(TIMES, call);
    }
    if (BuiltInFunctionDefinitions.DIVIDE.equals(call.getFunctionDefinition())) {
      return arithmeticOperator(DIVIDE, call);
    }
    if (BuiltInFunctionDefinitions.CAST.equals(call.getFunctionDefinition())) {
      return castOperator(call);
    }
    throw new IllegalArgumentException(
        String.format(
            "Not supported build-in function: %s, CallExpression: %s, for RowDataPredicateExpressionVisitor",
            call.getFunctionDefinition(), call));
  }
Visits a {@link CallExpression} and renders it as a {@link RowDataPredicate}.

@param call the call expression to visit
@return an optional {@link RowDataPredicate}
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/lookup/filter/RowDataPredicateExpressionVisitor.java