You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2024/07/24 15:21:23 UTC
(ignite) branch master updated: IGNITE-22738 Sql: Fix nested subquery optimization - Fixes #11437.
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 <pl...@gmail.com>
AuthorDate: Wed Jul 24 18:20:13 2024 +0300
IGNITE-22738 Sql: Fix nested subquery optimization - Fixes #11437.
Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
.../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.