This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch release-0.4
in repository https://gitbox.apache.org/repos/asf/incubator-paimon-trino.git

commit 974a176d8eb137b142832190d4349e51b516cb98
Author: YeJunHao <[email protected]>
AuthorDate: Sun Jun 25 13:59:56 2023 +0800

    [bug] bugfix: add char type filter (#14)
---
 .../apache/paimon/trino/TrinoFilterConverter.java  | 12 ++++++++--
 .../paimon/trino/TestTrinoFilterConverter.java     | 26 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoFilterConverter.java
 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoFilterConverter.java
index 5255a8b..bce9e39 100644
--- 
a/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoFilterConverter.java
+++ 
b/paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoFilterConverter.java
@@ -32,6 +32,7 @@ import io.trino.spi.predicate.TupleDomain;
 import io.trino.spi.type.ArrayType;
 import io.trino.spi.type.BigintType;
 import io.trino.spi.type.BooleanType;
+import io.trino.spi.type.CharType;
 import io.trino.spi.type.DateType;
 import io.trino.spi.type.DecimalType;
 import io.trino.spi.type.DoubleType;
@@ -42,6 +43,8 @@ import io.trino.spi.type.RealType;
 import io.trino.spi.type.Type;
 import io.trino.spi.type.VarbinaryType;
 import io.trino.spi.type.VarcharType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -62,6 +65,8 @@ import static org.apache.paimon.predicate.PredicateBuilder.or;
 /** Trino filter to flink predicate. */
 public class TrinoFilterConverter {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(TrinoFilterConverter.class);
+
     private final RowType rowType;
     private final PredicateBuilder builder;
 
@@ -91,7 +96,10 @@ public class TrinoFilterConverter {
             if (index != -1) {
                 try {
                     conjuncts.add(toPredicate(index, 
columnHandle.getTrinoType(), domain));
-                } catch (UnsupportedOperationException ignored) {
+                } catch (UnsupportedOperationException exception) {
+                    LOG.warn(
+                            "Unsupported predicate, maybe the type of column 
is not supported yet.",
+                            exception);
                 }
             }
         }
@@ -230,7 +238,7 @@ public class TrinoFilterConverter {
                     ((LongTimestampWithTimeZone) 
trinoNativeValue).getEpochMillis());
         }
 
-        if (type instanceof VarcharType) {
+        if (type instanceof VarcharType || type instanceof CharType) {
             return BinaryString.fromBytes(((Slice) 
trinoNativeValue).getBytes());
         }
 
diff --git 
a/paimon-trino-common/src/test/java/org/apache/paimon/trino/TestTrinoFilterConverter.java
 
b/paimon-trino-common/src/test/java/org/apache/paimon/trino/TestTrinoFilterConverter.java
index a820795..80fd991 100644
--- 
a/paimon-trino-common/src/test/java/org/apache/paimon/trino/TestTrinoFilterConverter.java
+++ 
b/paimon-trino-common/src/test/java/org/apache/paimon/trino/TestTrinoFilterConverter.java
@@ -18,6 +18,7 @@
 
 package org.apache.paimon.trino;
 
+import org.apache.paimon.data.BinaryString;
 import org.apache.paimon.predicate.Predicate;
 import org.apache.paimon.predicate.PredicateBuilder;
 import org.apache.paimon.types.DataField;
@@ -25,10 +26,12 @@ import org.apache.paimon.types.IntType;
 import org.apache.paimon.types.RowType;
 
 import com.google.common.collect.ImmutableMap;
+import io.airlift.slice.Slices;
 import io.trino.spi.predicate.Domain;
 import io.trino.spi.predicate.Range;
 import io.trino.spi.predicate.TupleDomain;
 import io.trino.spi.predicate.ValueSet;
+import io.trino.spi.type.CharType;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -118,4 +121,27 @@ public class TestTrinoFilterConverter {
         Predicate actualIn = converter.convert(in).get();
         assertThat(actualIn).isEqualTo(expectedIn);
     }
+
+    @Test
+    public void testCharType() {
+        RowType rowType =
+                new RowType(
+                        Collections.singletonList(
+                                new DataField(
+                                        0, "date", new 
org.apache.paimon.types.CharType(10))));
+        TrinoFilterConverter converter = new TrinoFilterConverter(rowType);
+        PredicateBuilder builder = new PredicateBuilder(rowType);
+        TrinoColumnHandle idColumn =
+                TrinoColumnHandle.of("date", new 
org.apache.paimon.types.CharType(10));
+        TupleDomain<TrinoColumnHandle> eq =
+                TupleDomain.withColumnDomains(
+                        ImmutableMap.of(
+                                idColumn,
+                                Domain.singleValue(
+                                        CharType.createCharType(10),
+                                        Slices.utf8Slice("2020-11-11"))));
+        Predicate expectedEqq = builder.equal(0, 
BinaryString.fromString("2020-11-11"));
+        Predicate actualEqq = converter.convert(eq).get();
+        assertThat(actualEqq).isEqualTo(expectedEqq);
+    }
 }

Reply via email to