Object getter(RowData rowData) {
    int pos = fieldIndex;
    if (rowData.isNullAt(pos)) {
      return null;
    }
    Preconditions.checkNotNull(dataType);
    LogicalType logicalType = dataType.getLogicalType();
    switch (logicalType.getTypeRoot()) {
      case CHAR:
      case VARCHAR:
        return rowData.getString(pos).toString();
      case BOOLEAN:
        return rowData.getBoolean(pos);
      case BINARY:
      case VARBINARY:
        return rowData.getBinary(pos);
      case DECIMAL:
        DecimalType decimalType = (DecimalType) logicalType;
        return rowData
            .getDecimal(pos, decimalType.getPrecision(), decimalType.getScale())
            .toBigDecimal();
      case TINYINT:
        return rowData.getByte(pos);
      case SMALLINT:
        return rowData.getShort(pos);
      case INTEGER:
      case DATE:
      case INTERVAL_YEAR_MONTH:
      case TIME_WITHOUT_TIME_ZONE:
        return rowData.getInt(pos);
      case BIGINT:
      case INTERVAL_DAY_TIME:
        return rowData.getLong(pos);
      case FLOAT:
        return rowData.getFloat(pos);
      case DOUBLE:
        return rowData.getDouble(pos);
      case TIMESTAMP_WITHOUT_TIME_ZONE:
      case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
        final int timestampPrecision = getPrecision(logicalType);
        return rowData.getTimestamp(pos, timestampPrecision).getMillisecond();
      default:
        throw new IllegalArgumentException(
            String.format("Not supported datatype: %s, field: %s", dataType, fieldName));
    }
  }
Combines this RowDataPredicate with another using the specified operator.

@param operator the operator to use for the combination
@param that the other RowDataPredicate to combine with this one
@return the combined RowDataPredicate
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/lookup/filter/RowDataPredicate.java