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