This is an automated email from the ASF dual-hosted git repository.
alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new f1af53169cb IGNITE-22738 Sql: Fix nested subquery optimization - Fixes
#11437.
f1af53169cb is described below
commit f1af53169cbd068b8ec4266a5754d42728d9a17e
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Wed Jul 24 18:20:13 2024 +0300
IGNITE-22738 Sql: Fix nested subquery optimization - Fixes #11437.
Signed-off-by: Aleksey Plekhanov <[email protected]>
---
.../processors/query/h2/GridSubqueryJoinOptimizer.java | 6 ++++--
.../query/h2/GridSubqueryJoinOptimizerSelfTest.java | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
index 875284dd631..c3ca1376a93 100644
---
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
+++
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
@@ -412,8 +412,10 @@ public class GridSubqueryJoinOptimizer {
remapColumns(
parent,
subSel,
- // reference equality used intentionally here
- col -> wrappedSubQry == col.expressionInFrom(),
+ // In case of several nested subqueries, inner subqueries are
wrapped into alias of outer subqueries,
+ // to check column belonging correctly we should unwrap aliases.
+ // Reference equality used intentionally here.
+ col -> GridSqlAlias.unwrap(wrappedSubQry) ==
GridSqlAlias.unwrap(col.expressionInFrom()),
subTbl
);
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
index 5849d1b8aea..9cd984af0c1 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
@@ -953,6 +953,22 @@ public class GridSubqueryJoinOptimizerSelfTest extends
GridCommonAbstractTest {
}
}
+ /**
+ * Case when select subquery from another subquery, which is select from
another subquery.
+ */
+ @Test
+ public void testSeveralNestedSubqueries() {
+ String innerSql = "SELECT id as id0, name as name0 FROM dep";
+ String outerSqlTemplate = "SELECT id%d as id%d, name%d as name%d FROM
%s WHERE id%d > %d";
+
+ String curSql = innerSql;
+
+ for (int i = 0; i < 5; i++) {
+ curSql = String.format(outerSqlTemplate, i, i + 1, i, i + 1, '(' +
curSql + ')', i, i);
+ check(curSql, 1);
+ }
+ }
+
/**
* @param sql Sql.
* @param expSelectClauses Expected select clauses.