From 5a0694a9fc3311acc88aa5d8b1272387755d52cc Mon Sep 17 00:00:00 2001 From: chenjian2664 Date: Tue, 7 Mar 2023 09:49:48 +0800 Subject: [PATCH] Support predicate pushdown with like in Ignite --- .../java/io/trino/plugin/ignite/IgniteClient.java | 12 +++++++++++- .../trino/plugin/ignite/TestIgniteConnectorTest.java | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plugin/trino-ignite/src/main/java/io/trino/plugin/ignite/IgniteClient.java b/plugin/trino-ignite/src/main/java/io/trino/plugin/ignite/IgniteClient.java index 53fe80b908d5..a7f7523eb805 100644 --- a/plugin/trino-ignite/src/main/java/io/trino/plugin/ignite/IgniteClient.java +++ b/plugin/trino-ignite/src/main/java/io/trino/plugin/ignite/IgniteClient.java @@ -52,6 +52,7 @@ import io.trino.spi.connector.ConnectorTableMetadata; import io.trino.spi.connector.SchemaNotFoundException; import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.expression.ConnectorExpression; import io.trino.spi.type.CharType; import io.trino.spi.type.DateType; import io.trino.spi.type.DecimalType; @@ -142,6 +143,7 @@ public class IgniteClient private static final LocalDate MIN_DATE = LocalDate.parse("1970-01-01"); private static final LocalDate MAX_DATE = LocalDate.parse("9999-12-31"); + private final ConnectorExpressionRewriter connectorExpressionRewriter; private final AggregateFunctionRewriter aggregateFunctionRewriter; @Inject @@ -155,8 +157,10 @@ public IgniteClient( super(config, "`", connectionFactory, queryBuilder, identifierMapping, queryModifier); JdbcTypeHandle bigintTypeHandle = new JdbcTypeHandle(Types.BIGINT, Optional.of("bigint"), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); - ConnectorExpressionRewriter connectorExpressionRewriter = JdbcConnectorExpressionRewriterBuilder.newBuilder() + this.connectorExpressionRewriter = JdbcConnectorExpressionRewriterBuilder.newBuilder() .addStandardRules(this::quoted) + .map("$like(value: varchar, pattern: varchar): boolean").to("value LIKE pattern") + .map("$like(value: varchar, pattern: varchar, escape: varchar(1)): boolean").to("value LIKE pattern ESCAPE escape") .build(); this.aggregateFunctionRewriter = new AggregateFunctionRewriter<>( connectorExpressionRewriter, @@ -305,6 +309,12 @@ public Optional implementAggregation(ConnectorSession session, A return aggregateFunctionRewriter.rewrite(session, aggregate, assignments); } + @Override + public Optional convertPredicate(ConnectorSession session, ConnectorExpression expression, Map assignments) + { + return connectorExpressionRewriter.rewrite(session, expression, assignments); + } + private static Optional toTypeHandle(DecimalType decimalType) { return Optional.of( diff --git a/plugin/trino-ignite/src/test/java/io/trino/plugin/ignite/TestIgniteConnectorTest.java b/plugin/trino-ignite/src/test/java/io/trino/plugin/ignite/TestIgniteConnectorTest.java index 9399afc91bdb..0f8793395457 100644 --- a/plugin/trino-ignite/src/test/java/io/trino/plugin/ignite/TestIgniteConnectorTest.java +++ b/plugin/trino-ignite/src/test/java/io/trino/plugin/ignite/TestIgniteConnectorTest.java @@ -84,6 +84,7 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) case SUPPORTS_NEGATIVE_DATE: return false; + case SUPPORTS_PREDICATE_EXPRESSION_PUSHDOWN_WITH_LIKE: case SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT: case SUPPORTS_DROP_COLUMN: case SUPPORTS_LIMIT_PUSHDOWN: