This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new e1fa0b055 [format] Fix ParquetFilters cannot handle tinyint and
smallint correctly (#4365)
e1fa0b055 is described below
commit e1fa0b055275697b15e317460d5f670363b5c2ca
Author: yuzelin <[email protected]>
AuthorDate: Wed Oct 23 18:31:27 2024 +0800
[format] Fix ParquetFilters cannot handle tinyint and smallint correctly
(#4365)
---
.../org/apache/paimon/flink/PredicateITCase.java | 38 ++++++++++++++++++++++
.../parquet/filter2/predicate/ParquetFilters.java | 5 +++
2 files changed, 43 insertions(+)
diff --git
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateITCase.java
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateITCase.java
index f50f7db60..0668c17ee 100644
---
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateITCase.java
+++
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateITCase.java
@@ -21,6 +21,8 @@ package org.apache.paimon.flink;
import org.apache.flink.types.Row;
import org.junit.jupiter.api.Test;
+import java.util.concurrent.ThreadLocalRandom;
+
import static org.assertj.core.api.Assertions.assertThat;
/** Predicate ITCase. */
@@ -50,6 +52,42 @@ public class PredicateITCase extends CatalogITCaseBase {
innerTestAllFields();
}
+ @Test
+ public void testIntegerFilter() {
+ int rand = ThreadLocalRandom.current().nextInt(3);
+ String fileFormat;
+ if (rand == 0) {
+ fileFormat = "avro";
+ } else if (rand == 1) {
+ fileFormat = "parquet";
+ } else {
+ fileFormat = "orc";
+ }
+
+ sql(
+ "CREATE TABLE T ("
+ + "a TINYINT,"
+ + "b SMALLINT,"
+ + "c INT,"
+ + "d BIGINT"
+ + ") WITH ("
+ + "'file.format' = '%s'"
+ + ")",
+ fileFormat);
+ sql(
+ "INSERT INTO T VALUES (CAST (1 AS TINYINT), CAST (1 AS
SMALLINT), 1, 1), "
+ + "(CAST (2 AS TINYINT), CAST (2 AS SMALLINT), 2, 2)");
+
+ Row expectedResult = Row.of((byte) 1, (short) 1, 1, 1L);
+ assertThat(sql("SELECT * FROM T WHERE a = CAST (1 AS TINYINT)"))
+ .containsExactly(expectedResult);
+ assertThat(sql("SELECT * FROM T WHERE b = CAST (1 AS SMALLINT)"))
+ .containsExactly(expectedResult);
+ assertThat(sql("SELECT * FROM T WHERE c =
1")).containsExactly(expectedResult);
+ assertThat(sql("SELECT * FROM T WHERE d = CAST (1 AS BIGINT)"))
+ .containsExactly(expectedResult);
+ }
+
private void writeRecords() throws Exception {
sql("INSERT INTO T VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10)");
}
diff --git
a/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
b/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
index cacc241fd..96cf2fe72 100644
---
a/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
+++
b/paimon-format/src/main/java/org/apache/parquet/filter2/predicate/ParquetFilters.java
@@ -172,6 +172,11 @@ public class ParquetFilters {
}
if (value instanceof Number) {
+ if (value instanceof Byte) {
+ return ((Byte) value).intValue();
+ } else if (value instanceof Short) {
+ return ((Short) value).intValue();
+ }
return (Comparable<?>) value;
} else if (value instanceof String) {
return Binary.fromString((String) value);