@Override
  public Optional<RowDataPredicate> visit(ValueLiteralExpression valueLiteralExpression) {
    LogicalType tpe = valueLiteralExpression.getOutputDataType().getLogicalType();
    Serializable[] params = new Serializable[1];
    switch (tpe.getTypeRoot()) {
      case CHAR:
      case VARCHAR:
        params[0] = valueLiteralExpression.getValueAs(String.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case BOOLEAN:
        params[0] = valueLiteralExpression.getValueAs(Boolean.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case DECIMAL:
        params[0] = valueLiteralExpression.getValueAs(BigDecimal.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case TINYINT:
        params[0] = valueLiteralExpression.getValueAs(Byte.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case SMALLINT:
        params[0] = valueLiteralExpression.getValueAs(Short.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case INTEGER:
        params[0] = valueLiteralExpression.getValueAs(Integer.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case BIGINT:
        params[0] = valueLiteralExpression.getValueAs(Long.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case FLOAT:
        params[0] = valueLiteralExpression.getValueAs(Float.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case DOUBLE:
        params[0] = valueLiteralExpression.getValueAs(Double.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case DATE:
        params[0] =
            valueLiteralExpression.getValueAs(LocalDate.class).map(Date::valueOf).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case TIME_WITHOUT_TIME_ZONE:
        params[0] = valueLiteralExpression.getValueAs(java.sql.Time.class).orElse(null);
        return Optional.of(new RowDataPredicate(params));
      case TIMESTAMP_WITHOUT_TIME_ZONE:
        params[0] =
            valueLiteralExpression
                .getValueAs(LocalDateTime.class)
                .map(Timestamp::valueOf)
                .orElse(null);
        return Optional.of(new RowDataPredicate(params));
      default:
        return Optional.empty();
    }
  }
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