You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by da...@apache.org on 2019/07/30 13:57:15 UTC
[calcite] branch master updated: [CALCITE-3207] Fail to convert
Join RelNode with like condition to sql statement (wojustme)
This is an automated email from the ASF dual-hosted git repository.
danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new 3309396 [CALCITE-3207] Fail to convert Join RelNode with like condition to sql statement (wojustme)
3309396 is described below
commit 3309396dbb73d1f2ec2e32e8ffee0f9e68262db1
Author: xurenhe <re...@antfin.com>
AuthorDate: Tue Jul 23 20:08:13 2019 +0800
[CALCITE-3207] Fail to convert Join RelNode with like condition to sql statement (wojustme)
close apache/calcite#1328
---
.../apache/calcite/rel/rel2sql/SqlImplementor.java | 1 +
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 30 ++++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index 009f66e..3371209 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -223,6 +223,7 @@ public abstract class SqlImplementor {
case GREATER_THAN_OR_EQUAL:
case LESS_THAN:
case LESS_THAN_OR_EQUAL:
+ case LIKE:
node = stripCastFromString(node);
operands = ((RexCall) node).getOperands();
op = ((RexCall) node).getOperator();
diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index d249137..9bf1b01 100644
--- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -23,6 +23,7 @@ import org.apache.calcite.plan.hep.HepPlanner;
import org.apache.calcite.plan.hep.HepProgram;
import org.apache.calcite.plan.hep.HepProgramBuilder;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.JoinRelType;
import org.apache.calcite.rel.rules.UnionMergeRule;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
@@ -614,6 +615,35 @@ public class RelToSqlConverterTest {
assertThat(toSql(root, dialect), isLinux(expectedSql));
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-3207">[CALCITE-3207]
+ * Fail to convert Join RelNode with like condition to sql statement </a>.
+ */
+ @Test public void testJoinWithLikeConditionRel2Sql() {
+ final RelBuilder builder = relBuilder();
+ final RelNode rel = builder
+ .scan("EMP")
+ .scan("DEPT")
+ .join(JoinRelType.LEFT,
+ builder.and(
+ builder.call(SqlStdOperatorTable.EQUALS,
+ builder.field(2, 0, "DEPTNO"),
+ builder.field(2, 1, "DEPTNO")
+ ),
+ builder.call(SqlStdOperatorTable.LIKE,
+ builder.field(2, 1, "DNAME"),
+ builder.literal("ACCOUNTING")
+ )
+ )).build();
+ final String sql = toSql(rel);
+ final String expectedSql = "SELECT *\n"
+ + "FROM \"scott\".\"EMP\"\n"
+ + "LEFT JOIN \"scott\".\"DEPT\" "
+ + "ON \"EMP\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\" "
+ + "AND \"DEPT\".\"DNAME\" LIKE 'ACCOUNTING'";
+ assertThat(sql, isLinux(expectedSql));
+ }
+
@Test public void testSelectQueryWithGroupByAndProjectList1() {
String query =
"select count(*) from \"product\" group by \"product_class_id\", \"product_id\"";