private static Object convertValue(
      net.sf.jsqlparser.expression.Expression expr, Types.NestedField column) {
    switch (column.type().typeId()) {
      case BOOLEAN:
        return Boolean.valueOf(((Column) expr).getColumnName());
      case STRING:
        return ((StringValue) expr).getValue();
      case INTEGER:
      case LONG:
        return ((LongValue) expr).getValue();
      case FLOAT:
      case DOUBLE:
        return ((DoubleValue) expr).getValue();
      case DATE:
        String dateStr = getDateTimeLiteralStr(expr, "date");
        if (dateStr != null) {
          return Date.valueOf(dateStr).toLocalDate().toEpochDay();
        }
        break;
      case TIME:
        String timeStr = getDateTimeLiteralStr(expr, "time");
        if (timeStr != null) {
          return Time.valueOf(timeStr).toLocalTime().getLong(ChronoField.MICRO_OF_DAY);
        }
        break;
      case TIMESTAMP:
        String timestampStr = getDateTimeLiteralStr(expr, "timestamp");
        if (timestampStr != null) {
          long timestamp;
          if (column.type().equals(Types.TimestampType.withZone())) {
            timestamp = OffsetDateTime.parse(timestampStr).toEpochSecond();
          } else {
            timestamp = LocalDateTime.parse(timestampStr).toEpochSecond(ZoneOffset.ofHours(0));
          }
          return timestamp * 1_000_000L;
        }
        break;
    }
    throw new IllegalArgumentException(
        expr + " can not be converted to column type: " + column.type());
  }
Convert SQL filter to Iceberg {@link Expression}.

@param sqlFilter the SQL filter
@param tableColumns the list of table columns
@return the Iceberg {@link Expression}
amoro-format-iceberg/src/main/java/org/apache/amoro/utils/ExpressionUtil.java