You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2021/05/20 00:56:50 UTC
[calcite] 01/01: [CALCITE-4610] Join on range causes AssertionError
in RelToSqlConverter
This is an automated email from the ASF dual-hosted git repository.
jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 204b5ab42d9e365c55636cd0aca9f750f4d50e5d
Author: Julian Hyde <jh...@apache.org>
AuthorDate: Tue May 18 15:37:58 2021 -0700
[CALCITE-4610] Join on range causes AssertionError in RelToSqlConverter
---
.../apache/calcite/rel/rel2sql/SqlImplementor.java | 10 ++++++++++
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 23 ++++++++++++++++++++++
2 files changed, 33 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 7912359..8d5f965 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
@@ -350,6 +350,16 @@ public abstract class SqlImplementor {
joinContext =
leftContext.implementor().joinContext(leftContext, rightContext);
return joinContext.toSql(null, node);
+
+ case SEARCH:
+ final RexCall search = (RexCall) node;
+ final RexLiteral literal = (RexLiteral) search.operands.get(1);
+ final Sarg sarg = castNonNull(literal.getValueAs(Sarg.class));
+ joinContext =
+ leftContext.implementor().joinContext(leftContext, rightContext);
+ return joinContext.toSql(null, search.operands.get(0), literal.getType(),
+ sarg);
+
case IS_NULL:
case IS_NOT_NULL:
operands = ((RexCall) node).getOperands();
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 9b70a0d..75ea3fc 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
@@ -2914,6 +2914,29 @@ class RelToSqlConverterTest {
}
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-4610">[CALCITE-4610]
+ * Join on range causes AssertionError in RelToSqlConverter</a>. */
+ @Test void testJoinOnRange() {
+ final String sql = "SELECT d.deptno, e.deptno\n"
+ + "FROM dept d\n"
+ + "LEFT JOIN emp e\n"
+ + " ON d.deptno = e.deptno\n"
+ + " AND d.deptno < 15\n"
+ + " AND d.deptno > 10\n"
+ + "WHERE e.job LIKE 'PRESIDENT'";
+ final String expected = "SELECT \"DEPT\".\"DEPTNO\","
+ + " \"EMP\".\"DEPTNO\" AS \"DEPTNO0\"\n"
+ + "FROM \"SCOTT\".\"DEPT\"\n"
+ + "LEFT JOIN \"SCOTT\".\"EMP\" "
+ + "ON \"DEPT\".\"DEPTNO\" = \"EMP\".\"DEPTNO\" "
+ + "AND (\"DEPT\".\"DEPTNO\" > 10"
+ + " AND \"DEPT\".\"DEPTNO\" < 15)\n"
+ + "WHERE \"EMP\".\"JOB\" LIKE 'PRESIDENT'";
+ sql(sql)
+ .schema(CalciteAssert.SchemaSpec.JDBC_SCOTT)
+ .ok(expected);
+ }
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-1586">[CALCITE-1586]