This is an automated email from the ASF dual-hosted git repository.
mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new 8bb5f727f2 [CALCITE-6218] RelToSqlConverter fails to convert
correlated lateral joins
8bb5f727f2 is described below
commit 8bb5f727f2cca66f75702bfb1c26b0aa187187aa
Author: YiwenWu <[email protected]>
AuthorDate: Mon Jul 15 15:26:16 2024 +0800
[CALCITE-6218] RelToSqlConverter fails to convert correlated lateral joins
---
.../apache/calcite/rel/rel2sql/RelToSqlConverter.java | 2 +-
.../rel/rel2sql/RelToSqlConverterStructsTest.java | 17 ++++++++++++++++-
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 2 +-
.../test/java/org/apache/calcite/test/PigRelOpTest.java | 14 +++++++-------
.../java/org/apache/calcite/test/CalciteAssert.java | 2 ++
5 files changed, 27 insertions(+), 10 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
index a352ca54e0..b1f75dd18f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
@@ -397,7 +397,7 @@ public class RelToSqlConverter extends SqlImplementor
public Result visit(Correlate e) {
final Result leftResult =
visitInput(e, 0)
- .resetAlias(e.getCorrelVariable(), e.getRowType());
+ .resetAlias(e.getCorrelVariable(), e.getInput(0).getRowType());
parseCorrelTable(e, leftResult);
final Result rightResult = visitInput(e, 1);
final SqlNode rightLateral =
diff --git
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java
index 284bc108a3..ccc422da83 100644
---
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java
+++
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java
@@ -43,7 +43,7 @@ class RelToSqlConverterStructsTest {
String query = "SELECT * FROM \"myTable\"";
String expected = "SELECT \"a\", "
+ "ROW(ROW(\"n1\".\"n11\".\"b\"), ROW(\"n1\".\"n12\".\"c\")) AS
\"n1\", "
- + "ROW(\"n2\".\"d\") AS \"n2\", "
+ + "ROW(\"n2\".\"d\") AS \"n2\", \"xs\", "
+ "\"e\"\n"
+ "FROM \"myDb\".\"myTable\"";
sql(query).ok(expected);
@@ -69,4 +69,19 @@ class RelToSqlConverterStructsTest {
+ "FROM \"myDb\".\"myTable\"";
sql(query).ok(expected);
}
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6218">[CALCITE-6218]
+ * RelToSqlConverter fails to convert correlated lateral joins</a>. */
+ @Test void testUncollectLateralJoin() {
+ final String query = "select \"a\",\n"
+ + "\"x\"\n"
+ + "from \"myDb\".\"myTable\",\n"
+ + "unnest(\"xs\") as \"x\"";
+ final String expected = "SELECT \"$cor0\".\"a\", \"t10\".\"xs\" AS \"x\"\n"
+ + "FROM (SELECT \"a\", \"n1\".\"n11\".\"b\", \"n1\".\"n12\".\"c\",
\"n2\".\"d\", \"xs\", \"e\"\n"
+ + "FROM \"myDb\".\"myTable\") AS \"$cor0\",\nLATERAL UNNEST (SELECT
\"$cor0\".\"xs\"\n"
+ + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")) AS \"t1\" (\"xs\") AS
\"t10\"";
+ sql(query).schema(CalciteAssert.SchemaSpec.MY_DB).ok(expected);
+ }
}
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 efefd37072..66e14e3745 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
@@ -6693,7 +6693,7 @@ class RelToSqlConverterTest {
+ " lateral (select d.\"department_id\" + 1 as d_plusOne"
+ " from (values(true)))";
- final String expected = "SELECT \"$cor0\".\"department_id\",
\"$cor0\".\"D_PLUSONE\"\n"
+ final String expected = "SELECT \"$cor0\".\"department_id\",
\"t1\".\"D_PLUSONE\"\n"
+ "FROM (SELECT \"department_id\", \"department_description\",
\"department_id\" + 1 AS \"$f2\"\n"
+ "FROM \"foodmart\".\"department\") AS \"$cor0\",\n"
+ "LATERAL (SELECT \"$cor0\".\"$f2\" AS \"D_PLUSONE\"\n"
diff --git a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
index 0da4ea734c..4e00b561c3 100644
--- a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
+++ b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
@@ -383,9 +383,9 @@ class PigRelOpTest extends PigRelTestBase {
+ " LogicalValues(tuples=[[{ 0 }]])\n";
final String sql = ""
- + "SELECT $cor1.DEPTNO AS dept, $cor1.JOB AS job, $cor1.EMPNO,"
- + " $cor1.ENAME, $cor1.JOB0 AS JOB, $cor1.MGR, $cor1.HIREDATE,"
- + " $cor1.SAL, $cor1.COMM, $cor1.DEPTNO0 AS DEPTNO\n"
+ + "SELECT $cor1.DEPTNO AS dept, $cor1.JOB AS job, t30.EMPNO,"
+ + " t30.ENAME, t30.JOB, t30.MGR, t30.HIREDATE,"
+ + " t30.SAL, t30.COMM, t30.DEPTNO\n"
+ "FROM (SELECT DEPTNO, JOB, COLLECT(ROW(EMPNO, ENAME, JOB, MGR, "
+ "HIREDATE, SAL, COMM, DEPTNO)) AS $f2\n"
+ " FROM scott.EMP\n"
@@ -470,11 +470,11 @@ class PigRelOpTest extends PigRelTestBase {
+ "(30,5,BLAKE,MANAGER,30,2850.00,2850.00)\n";
final String sql = ""
- + "SELECT $cor5.group, $cor5.cnt, $cor5.ENAME, $cor5.JOB, "
- + "$cor5.DEPTNO, $cor5.SAL, $cor5.$f3\n"
+ + "SELECT $cor5.group, $cor5.cnt, t110.ENAME, t110.JOB, "
+ + "t110.DEPTNO, t110.SAL, $cor5.$f3\n"
+ "FROM (SELECT $cor4.DEPTNO AS group, "
- + "COUNT(PIG_BAG($cor4.X)) AS cnt, $cor4.X, "
- + "BigDecimalMax(PIG_BAG(MULTISET_PROJECTION($cor4.X, 3))) AS $f3\n"
+ + "COUNT(PIG_BAG(t8.X)) AS cnt, t8.X, "
+ + "BigDecimalMax(PIG_BAG(MULTISET_PROJECTION(t8.X, 3))) AS $f3\n"
+ " FROM (SELECT DEPTNO, COLLECT(ROW(EMPNO, ENAME, JOB, MGR, "
+ "HIREDATE, SAL, COMM, DEPTNO)) AS A\n"
+ " FROM scott.EMP\n"
diff --git a/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
b/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
index 089bb53b00..61891df2e8 100644
--- a/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
+++ b/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java
@@ -2191,6 +2191,7 @@ public class CalciteAssert {
* n12: STRUCT<c: BIGINT>
* >,
* n2: STRUCT<d: BIGINT>,
+ * xs: ARRAY<BIGINT>,
* e: BIGINT)
* }</pre>
*/
@@ -2204,6 +2205,7 @@ public class CalciteAssert {
.add("n12", typeFactory.builder().add("c", bigint).build())
.build())
.add("n2", typeFactory.builder().add("d", bigint).build())
+ .add("xs", typeFactory.createArrayType(bigint, -1))
.add("e", bigint)
.build();
}