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);

Reply via email to