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 <[email protected]> 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]
