You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@paimon.apache.org by lz...@apache.org on 2023/06/25 06:01:48 UTC
[incubator-paimon-trino] 02/02: [bug] bugfix: add char type filter (#14)
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 <41...@users.noreply.github.com>
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);
+ }
}