Skip to content

Commit

Permalink
Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Caideyipi committed Aug 9, 2024
1 parent e47d7ab commit eafcad6
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ public void testMockQuery() throws OperatorNotFoundException {
metadata.getOperatorReturnType(eq(OperatorType.ADD), eq(Arrays.asList(INT32, INT32))))
.thenReturn(DOUBLE);

Analysis actualAnalysis = analyzeSQL(sql, metadata);
Analysis actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
System.out.println(actualAnalysis.getTypes());
}
Expand All @@ -177,7 +177,7 @@ public void testMockQuery() throws OperatorNotFoundException {
public void singleTableNoFilterTest() {
// wildcard
sql = "SELECT * FROM testdb.table1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());

Expand Down Expand Up @@ -217,7 +217,7 @@ public void singleTableNoFilterTest() {
public void singleTableWithFilterTest1() {
// only global time filter
sql = "SELECT * FROM table1 where time > 1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand Down Expand Up @@ -268,7 +268,7 @@ public void singleTableWithFilterTest1() {
public void singleTableWithFilterTest2() {
// measurement value filter, which can be pushed down to TableScanNode
sql = "SELECT tag1, attr1, s2 FROM table1 where s1 > 1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand Down Expand Up @@ -331,7 +331,7 @@ public void singleTableWithFilterTest3() {
// timePredicate of TableScanNode
sql =
"SELECT tag1, attr1, s2 FROM table1 where s1 > 1 and s2>2 and tag1='A' and time > 1 and time < 10";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand Down Expand Up @@ -361,7 +361,7 @@ public void singleTableWithFilterTest4() {
// transfer to : ((("time" > 1) OR ("s1" > 1)) AND (("time" > 1) OR ("s2" > 2)) AND (("time" >
// 1) OR ("time" < 10)))
sql = "SELECT tag1, attr1, s2 FROM table1 where time > 1 or s1 > 1 and s2 > 2 and time < 10";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand Down Expand Up @@ -390,7 +390,7 @@ public void singleTableWithFilterTest4() {
public void singleTableWithFilterTest5() {
// measurement value filter with time filter
sql = "SELECT tag1, attr1, s2 FROM table1 where time > 1 or s1 > 1 or time < 10 or s2 > 2";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand Down Expand Up @@ -432,7 +432,7 @@ public void singleTableWithFilterTest5() {
public void singleTableWithFilterTest6() {
// value filter which can not be pushed down
sql = "SELECT tag1, attr1, s2 FROM table1 where diff(s1) > 1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
Expand Down Expand Up @@ -480,7 +480,7 @@ public void singleTableWithFilterTest6() {
distributedQueryPlan.getFragments().get(1).getPlanNodeTree().getChildren().get(0);

sql = "SELECT tag1, attr1, s2 FROM table1 where diff(s1) + 1 > 1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
Expand All @@ -505,14 +505,14 @@ public void singleTableWithFilterTest00() {
// TODO(beyyes) fix the CNFs parse error
sql =
"SELECT tag1, attr1, s2 FROM table1 where (time > 1 and s1 > 1 or s2 < 7) or (time < 10 and s1 > 4)";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
}

@Test
public void singleTableProjectTest() {
// 1. project without filter
sql = "SELECT time, tag1, attr1, s1 FROM table1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand All @@ -527,7 +527,7 @@ public void singleTableProjectTest() {

// 2. project with filter
sql = "SELECT tag1, attr1, s1 FROM table1 WHERE tag2='A' and s2=8";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
Expand All @@ -550,7 +550,7 @@ public void singleTableProjectTest() {
// 3. project with filter and function
sql =
"SELECT s1+s3, CAST(s2 AS DOUBLE) FROM table1 WHERE REPLACE(tag1, 'low', '!')='!' AND attr2='B'";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
Expand All @@ -571,7 +571,7 @@ public void singleTableProjectTest() {

// 4. project with not all attributes, to test the rightness of PruneUnUsedColumns
sql = "SELECT tag2, attr2, s2 FROM table1";
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
Expand All @@ -589,7 +589,7 @@ public void expressionTest() {
// 1. is null / is not null
sql = "SELECT * FROM table1 WHERE tag1 is not null and s1 is null";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -608,7 +608,7 @@ public void expressionTest() {
// 2. like
sql = "SELECT * FROM table1 WHERE tag1 like '%m'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -625,7 +625,7 @@ public void expressionTest() {
sql =
"SELECT *, s1/2, s2+1, s2*3, s1+s2, s2%1 FROM table1 WHERE tag1 in ('A', 'B') and tag2 not in ('A', 'C')";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -642,7 +642,7 @@ public void expressionTest() {
// 4. not
sql = "SELECT * FROM table1 WHERE tag1 not like '%m'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -651,7 +651,7 @@ public void expressionTest() {
// 5. String literal comparisons
sql = "SELECT * FROM table1 WHERE tag1 <= 's1'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -666,7 +666,7 @@ public void expressionTest() {
// 6. String column comparisons
sql = "SELECT * FROM table1 WHERE tag1 != attr1";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -684,7 +684,7 @@ public void functionTest() {
// 1. cast
sql = "SELECT CAST(s2 AS DOUBLE) FROM table1 WHERE CAST(s1 AS DOUBLE) > 1.0";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -693,23 +693,23 @@ public void functionTest() {
sql =
"SELECT SUBSTRING(tag1, 2), SUBSTRING(tag2, s1) FROM table1 WHERE SUBSTRING(tag2, 1) = 'A'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();

// 3. round
sql = "SELECT ROUND(s1, 1) FROM table1 WHERE ROUND(s2, 2) > 1.0";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();

// 4. replace
sql = "SELECT REPLACE(tag1, 'A', 'B') FROM table1 WHERE REPLACE(attr1, 'C', 'D') = 'D'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -720,7 +720,7 @@ public void diffTest() {
// 1. only diff
sql = "SELECT DIFF(s1) FROM table1 WHERE DIFF(s2) > 0";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand Down Expand Up @@ -763,7 +763,7 @@ public void diffTest() {
// 2. diff with time filter, tag filter and measurement filter
sql = "SELECT s1 FROM table1 WHERE DIFF(s2) > 0 and time > 5 and tag1 = 'A' and s1 = 1";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -781,7 +781,7 @@ public void predicatePushDownTest() {
"SELECT *, s1/2, s2+1 FROM table1 WHERE tag1 in ('A', 'B') and tag2 = 'C' and tag3 is not null and attr1 like '_'"
+ "and s2 iS NUll and S1 = 6 and s3 < 8.0 and tAG1 LIKE '%m'";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP)
.plan(actualAnalysis);
Expand All @@ -807,7 +807,7 @@ public void predicatePushDownTest() {
public void limitOffsetTest() {
sql = "SELECT tag1, attr1, s1 FROM table1 offset 3 limit 5";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, warningCollector).plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -821,7 +821,7 @@ public void limitOffsetTest() {
"SELECT *, s1/2, s2+1 FROM table1 WHERE tag1 in ('A', 'B') and tag2 = 'C' "
+ "and s2 iS NUll and S1 = 6 and s3 < 8.0 and tAG1 LIKE '%m' offset 3 limit 5";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, warningCollector).plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -837,7 +837,7 @@ public void limitOffsetTest() {
public void predicateCannotNormalizedTest() {
sql = "SELECT * FROM table1 where (time > 1 and s1 > 1 or s2 < 7) or (time < 10 and s1 > 4)";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, warningCollector).plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand All @@ -854,7 +854,7 @@ public void predicateCannotNormalizedTest() {
public void duplicateProjectionsTest() {
sql = "SELECT Time,time,s1+1,S1+1,tag1,TAG1 FROM table1";
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
actualAnalysis = analyzeSQL(sql, metadata);
actualAnalysis = analyzeSQL(sql, metadata, context);
logicalQueryPlan =
new LogicalPlanner(context, metadata, sessionInfo, warningCollector).plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
Expand Down Expand Up @@ -954,6 +954,7 @@ public void analyzeInsertTablet() {
analyzeStatement(
insertTabletStatement.toRelationalStatement(context),
mockMetadata,
context,
new SqlParser(),
sessionInfo);
assertEquals(1, actualAnalysis.getDataPartition().getDataPartitionMap().size());
Expand Down Expand Up @@ -999,6 +1000,7 @@ public void analyzeInsertRow() {
analyzeStatement(
insertStatement.toRelationalStatement(context),
mockMetadata,
context,
new SqlParser(),
sessionInfo);
assertEquals(1, actualAnalysis.getDataPartition().getDataPartitionMap().size());
Expand Down Expand Up @@ -1031,30 +1033,35 @@ public void analyzeInsertRow() {
assertEquals(1, distributedQueryPlan.getInstances().size());
}

public static Analysis analyzeSQL(String sql, Metadata metadata) {
public static Analysis analyzeSQL(String sql, Metadata metadata, final MPPQueryContext context) {
SqlParser sqlParser = new SqlParser();
Statement statement = sqlParser.createStatement(sql, ZoneId.systemDefault());
SessionInfo session =
new SessionInfo(
0, "test", ZoneId.systemDefault(), "testdb", IClientSession.SqlDialect.TABLE);
return analyzeStatement(statement, metadata, sqlParser, session);
return analyzeStatement(statement, metadata, context, sqlParser, session);
}

public static Analysis analyzeStatement(
Statement statement, Metadata metadata, SqlParser sqlParser, SessionInfo session) {
final Statement statement,
final Metadata metadata,
final MPPQueryContext context,
final SqlParser sqlParser,
final SessionInfo session) {
try {
StatementAnalyzerFactory statementAnalyzerFactory =
final StatementAnalyzerFactory statementAnalyzerFactory =
new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);

Analyzer analyzer =
new Analyzer(
context,
session,
statementAnalyzerFactory,
Collections.emptyList(),
Collections.emptyMap(),
NOOP);
return analyzer.analyze(statement);
} catch (Exception e) {
} catch (final Exception e) {
e.printStackTrace();
fail(statement + ", " + e.getMessage());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.iotdb.db.queryengine.plan.relational.planner;

import org.apache.iotdb.commons.conf.IoTDBConstant;
Expand Down Expand Up @@ -113,17 +114,24 @@ public static Analysis analyze(String sql, Metadata metadata) {
SessionInfo session =
new SessionInfo(
0, "test", ZoneId.systemDefault(), "testdb", IClientSession.SqlDialect.TABLE);
return analyzeStatement(statement, metadata, sqlParser, session);
final MPPQueryContext context =
new MPPQueryContext(sql, new QueryId("test_query"), session, null, null);
return analyzeStatement(statement, metadata, context, sqlParser, session);
}

public static Analysis analyzeStatement(
Statement statement, Metadata metadata, SqlParser sqlParser, SessionInfo session) {
Statement statement,
Metadata metadata,
MPPQueryContext context,
SqlParser sqlParser,
SessionInfo session) {
try {
StatementAnalyzerFactory statementAnalyzerFactory =
new StatementAnalyzerFactory(metadata, sqlParser, new NopAccessControl());

Analyzer analyzer =
new Analyzer(
context,
session,
statementAnalyzerFactory,
Collections.emptyList(),
Expand Down
Loading

0 comments on commit eafcad6

Please sign in to comment.