protected Optional<RowDataPredicate> renderBinaryOperator(
      RowDataPredicate.Opt opt, List<ResolvedExpression> resolvedExpressions) {
    Optional<RowDataPredicate> leftPredicate = resolvedExpressions.get(0).accept(this);

    Optional<RowDataPredicate> rightPredicate = resolvedExpressions.get(1).accept(this);

    if (AND.equals(opt) || OR.equals(opt)) {
      Preconditions.checkArgument(leftPredicate.isPresent());
      Preconditions.checkArgument(rightPredicate.isPresent());
      return Optional.of(
          new RowDataPredicate(
              opt,
              new RowDataPredicate[] {leftPredicate.get()},
              new RowDataPredicate[] {rightPredicate.get()}));
    }

    return leftPredicate.flatMap(left -> rightPredicate.map(right -> left.combine(opt, right)));
  }
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