You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ro...@apache.org on 2023/05/10 05:07:41 UTC
[pinot] branch master updated: [multistage] 10736: Fix for self join table names extraction in multistage (#10739)
This is an automated email from the ASF dual-hosted git repository.
rongr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 6eeb9fb594 [multistage] 10736: Fix for self join table names extraction in multistage (#10739)
6eeb9fb594 is described below
commit 6eeb9fb5946c3e08eb3f48c72205092517539e60
Author: Abhishek Sharma <ab...@spothero.com>
AuthorDate: Wed May 10 01:07:34 2023 -0400
[multistage] 10736: Fix for self join table names extraction in multistage (#10739)
* 10736: Fix for self join table names extraction in multistage
* 10736: Added comment in unit test case.
* 10736: Added the test case as per PR comment.
* 10736: Minor change for re-triggering PR build pipelines.
---
.../apache/pinot/sql/parsers/CalciteSqlParser.java | 6 +++++-
.../pinot/sql/parsers/CalciteSqlCompilerTest.java | 25 ++++++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
index 3a19108041..c39878e840 100644
--- a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
+++ b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
@@ -172,7 +172,11 @@ public class CalciteSqlParser {
} else if (sqlNode instanceof SqlBasicCall) {
if (((SqlBasicCall) sqlNode).getOperator() instanceof SqlAsOperator) {
SqlNode firstOperand = ((SqlBasicCall) sqlNode).getOperandList().get(0);
- tableNames.addAll(((SqlIdentifier) firstOperand).names);
+ if (firstOperand instanceof SqlSelect) {
+ tableNames.addAll(extractTableNamesFromNode(firstOperand));
+ } else {
+ tableNames.addAll(((SqlIdentifier) firstOperand).names);
+ }
} else {
for (SqlNode node : ((SqlBasicCall) sqlNode).getOperandList()) {
tableNames.addAll(extractTableNamesFromNode(node));
diff --git a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
index f45f611d50..fd6c3b6ac3 100644
--- a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
+++ b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
@@ -3138,6 +3138,14 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(tableNames.get(1), "tbl2");
Assert.assertEquals(tableNames.get(2), "tbl3");
Assert.assertEquals(tableNames.get(3), "tbl4");
+
+ // test for self join queries
+ query = "SELECT tbl1.a FROM tbl1 JOIN(SELECT a FROM tbl1) as self ON tbl1.a=self.a ";
+ sqlNodeAndOptions = RequestUtils.parseQuery(query);
+ tableNames = CalciteSqlParser.extractTableNamesFromNode(sqlNodeAndOptions.getSqlNode());
+ Assert.assertEquals(tableNames.size(), 2);
+ Assert.assertEquals(tableNames.get(0), "tbl1");
+ Assert.assertEquals(tableNames.get(1), "tbl1");
}
@Test
@@ -3223,5 +3231,22 @@ public class CalciteSqlCompilerTest {
Assert.assertEquals(rightSubquery,
CalciteSqlParser.compileToPinotQuery("SELECT key, COUNT(*) AS b FROM T3 JOIN T4 GROUP BY key"));
Assert.assertEquals(join.getCondition(), CalciteSqlParser.compileToExpression("T1.key = T2.key"));
+
+ // test for self join queries.
+ query = "SELECT T1.a FROM T1 JOIN(SELECT key FROM T1) as self ON T1.key=self.key";
+ pinotQuery = CalciteSqlParser.compileToPinotQuery(query);
+ dataSource = pinotQuery.getDataSource();
+ Assert.assertNull(dataSource.getTableName());
+ Assert.assertNull(dataSource.getSubquery());
+ Assert.assertNotNull(dataSource.getJoin());
+ join = dataSource.getJoin();
+ Assert.assertEquals(join.getType(), JoinType.INNER);
+ Assert.assertEquals(join.getLeft().getTableName(), "T1");
+ right = join.getRight();
+ Assert.assertEquals(right.getTableName(), "self");
+ rightSubquery = right.getSubquery();
+ Assert.assertEquals(rightSubquery,
+ CalciteSqlParser.compileToPinotQuery("SELECT key FROM T1"));
+ Assert.assertEquals(join.getCondition(), CalciteSqlParser.compileToExpression("T1.key = self.key"));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org