This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 4a3c1d3e331 Fixed query type of create table device
4a3c1d3e331 is described below
commit 4a3c1d3e331dfed32fe5c8a22ce60e8b1930ae2f
Author: Caideyipi <[email protected]>
AuthorDate: Mon Aug 12 14:32:29 2024 +0800
Fixed query type of create table device
---
.../plan/relational/analyzer/Analyzer.java | 16 ++-
.../relational/analyzer/ExpressionAnalyzer.java | 20 +++-
.../relational/analyzer/StatementAnalyzer.java | 10 +-
.../analyzer/StatementAnalyzerFactory.java | 11 +-
.../plan/relational/planner/LogicalPlanner.java | 15 +--
.../relational/planner/RelationalModelPlanner.java | 1 +
.../relational/sql/ast/WrappedInsertStatement.java | 3 +-
.../plan/relational/sql/ast/WrappedStatement.java | 2 +-
.../plan/relational/analyzer/AnalyzerTest.java | 124 +++++++++++----------
.../analyzer/LimitOffsetPushDownTest.java | 13 ++-
.../plan/relational/analyzer/SortTest.java | 28 ++---
.../plan/relational/planner/PlanTester.java | 12 +-
.../relational/planner/PredicateUtilsTest.java | 26 ++++-
13 files changed, 176 insertions(+), 105 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
index 7f3a9321bb3..f5861cf45fe 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
import org.apache.iotdb.db.exception.sql.SemanticException;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
@@ -36,6 +37,7 @@ public class Analyzer {
private final StatementAnalyzerFactory statementAnalyzerFactory;
+ private final MPPQueryContext context;
private final SessionInfo session;
private final List<Expression> parameters;
@@ -44,11 +46,13 @@ public class Analyzer {
private final WarningCollector warningCollector;
public Analyzer(
- SessionInfo session,
- StatementAnalyzerFactory statementAnalyzerFactory,
- List<Expression> parameters,
- Map<NodeRef<Parameter>, Expression> parameterLookup,
- WarningCollector warningCollector) {
+ final MPPQueryContext context,
+ final SessionInfo session,
+ final StatementAnalyzerFactory statementAnalyzerFactory,
+ final List<Expression> parameters,
+ final Map<NodeRef<Parameter>, Expression> parameterLookup,
+ final WarningCollector warningCollector) {
+ this.context = context;
this.session = requireNonNull(session, "session is null");
this.statementAnalyzerFactory =
requireNonNull(statementAnalyzerFactory, "statementAnalyzerFactory is
null");
@@ -74,7 +78,7 @@ public class Analyzer {
StatementAnalyzer analyzer =
statementAnalyzerFactory.createStatementAnalyzer(
- analysis, session, warningCollector, CorrelationSupport.ALLOWED);
+ analysis, context, session, warningCollector,
CorrelationSupport.ALLOWED);
analyzer.analyze(statement);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
index abd20c49c4a..ff4223ef732 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
import org.apache.iotdb.db.exception.sql.SemanticException;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
@@ -140,6 +141,7 @@ public class ExpressionAnalyzer {
// Track referenced fields from source relation node
private final Multimap<NodeRef<Node>, Field> referencedFields =
HashMultimap.create();
+ private final MPPQueryContext context;
private final SessionInfo session;
private final Map<NodeRef<Parameter>, Expression> parameters;
@@ -155,6 +157,7 @@ public class ExpressionAnalyzer {
private ExpressionAnalyzer(
Metadata metadata,
+ MPPQueryContext context,
AccessControl accessControl,
StatementAnalyzerFactory statementAnalyzerFactory,
Analysis analysis,
@@ -163,10 +166,11 @@ public class ExpressionAnalyzer {
WarningCollector warningCollector) {
this(
metadata,
+ context,
accessControl,
(node, correlationSupport) ->
statementAnalyzerFactory.createStatementAnalyzer(
- analysis, session, warningCollector, correlationSupport),
+ analysis, context, session, warningCollector,
correlationSupport),
session,
types,
analysis.getParameters(),
@@ -176,6 +180,7 @@ public class ExpressionAnalyzer {
ExpressionAnalyzer(
Metadata metadata,
+ MPPQueryContext context,
AccessControl accessControl,
BiFunction<Node, CorrelationSupport, StatementAnalyzer>
statementAnalyzerFactory,
SessionInfo session,
@@ -184,6 +189,7 @@ public class ExpressionAnalyzer {
WarningCollector warningCollector,
Function<Expression, Type> getPreanalyzedType) {
this.metadata = requireNonNull(metadata, "metadata is null");
+ this.context = requireNonNull(context, "context is null");
this.accessControl = requireNonNull(accessControl, "accessControl is
null");
this.statementAnalyzerFactory =
requireNonNull(statementAnalyzerFactory, "statementAnalyzerFactory is
null");
@@ -1324,6 +1330,7 @@ public class ExpressionAnalyzer {
public static ExpressionAnalysis analyzeExpressions(
Metadata metadata,
+ MPPQueryContext context,
SessionInfo session,
StatementAnalyzerFactory statementAnalyzerFactory,
AccessControl accessControl,
@@ -1336,6 +1343,7 @@ public class ExpressionAnalyzer {
ExpressionAnalyzer analyzer =
new ExpressionAnalyzer(
metadata,
+ context,
accessControl,
statementAnalyzerFactory,
analysis,
@@ -1359,6 +1367,7 @@ public class ExpressionAnalyzer {
public static ExpressionAnalysis analyzeExpression(
Metadata metadata,
+ MPPQueryContext context,
SessionInfo session,
StatementAnalyzerFactory statementAnalyzerFactory,
AccessControl accessControl,
@@ -1370,6 +1379,7 @@ public class ExpressionAnalyzer {
ExpressionAnalyzer analyzer =
new ExpressionAnalyzer(
metadata,
+ context,
accessControl,
statementAnalyzerFactory,
analysis,
@@ -1392,6 +1402,7 @@ public class ExpressionAnalyzer {
public static void analyzeExpressionWithoutSubqueries(
Metadata metadata,
+ MPPQueryContext context,
SessionInfo session,
AccessControl accessControl,
Scope scope,
@@ -1403,6 +1414,7 @@ public class ExpressionAnalyzer {
ExpressionAnalyzer analyzer =
new ExpressionAnalyzer(
metadata,
+ context,
accessControl,
(node, ignored) -> {
throw new SemanticException(message);
@@ -1431,12 +1443,14 @@ public class ExpressionAnalyzer {
public static ExpressionAnalyzer createConstantAnalyzer(
Metadata metadata,
+ MPPQueryContext context,
AccessControl accessControl,
SessionInfo session,
Map<NodeRef<Parameter>, Expression> parameters,
WarningCollector warningCollector) {
return createWithoutSubqueries(
metadata,
+ context,
accessControl,
session,
parameters,
@@ -1446,6 +1460,7 @@ public class ExpressionAnalyzer {
public static ExpressionAnalyzer createWithoutSubqueries(
Metadata metadata,
+ MPPQueryContext context,
AccessControl accessControl,
SessionInfo session,
Map<NodeRef<Parameter>, Expression> parameters,
@@ -1453,6 +1468,7 @@ public class ExpressionAnalyzer {
WarningCollector warningCollector) {
return createWithoutSubqueries(
metadata,
+ context,
accessControl,
session,
TypeProvider.empty(),
@@ -1463,6 +1479,7 @@ public class ExpressionAnalyzer {
public static ExpressionAnalyzer createWithoutSubqueries(
Metadata metadata,
+ MPPQueryContext context,
AccessControl accessControl,
SessionInfo session,
TypeProvider symbolTypes,
@@ -1471,6 +1488,7 @@ public class ExpressionAnalyzer {
WarningCollector warningCollector) {
return new ExpressionAnalyzer(
metadata,
+ context,
accessControl,
(node, correlationSupport) -> {
throw statementAnalyzerRejection.apply(node);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 1b78943299b..b54ffafd5e2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.IoTDBWarning;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils;
+import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -166,6 +167,7 @@ public class StatementAnalyzer {
private final StatementAnalyzerFactory statementAnalyzerFactory;
private Analysis analysis;
+ private final MPPQueryContext queryContext;
private final AccessControl accessControl;
@@ -180,6 +182,7 @@ public class StatementAnalyzer {
public StatementAnalyzer(
StatementAnalyzerFactory statementAnalyzerFactory,
Analysis analysis,
+ MPPQueryContext queryContext,
AccessControl accessControl,
WarningCollector warningCollector,
SessionInfo sessionContext,
@@ -187,6 +190,7 @@ public class StatementAnalyzer {
CorrelationSupport correlationSupport) {
this.statementAnalyzerFactory = statementAnalyzerFactory;
this.analysis = analysis;
+ this.queryContext = queryContext;
this.accessControl = accessControl;
this.warningCollector = warningCollector;
this.sessionContext = sessionContext;
@@ -692,7 +696,7 @@ public class StatementAnalyzer {
protected Scope visitTableSubquery(TableSubquery node, Optional<Scope>
scope) {
StatementAnalyzer analyzer =
statementAnalyzerFactory.createStatementAnalyzer(
- analysis, sessionContext, warningCollector,
CorrelationSupport.ALLOWED);
+ analysis, queryContext, sessionContext, warningCollector,
CorrelationSupport.ALLOWED);
Scope queryScope =
analyzer.analyze(
node.getQuery(),
@@ -1972,6 +1976,7 @@ public class StatementAnalyzer {
ExpressionAnalysis expressionAnalysis =
ExpressionAnalyzer.analyzeExpression(
metadata,
+ queryContext,
sessionContext,
statementAnalyzerFactory,
accessControl,
@@ -2159,6 +2164,7 @@ public class StatementAnalyzer {
private ExpressionAnalysis analyzeExpression(Expression expression, Scope
scope) {
return ExpressionAnalyzer.analyzeExpression(
metadata,
+ queryContext,
sessionContext,
statementAnalyzerFactory,
accessControl,
@@ -2173,6 +2179,7 @@ public class StatementAnalyzer {
Expression expression, Scope scope, CorrelationSupport
correlationSupport) {
return ExpressionAnalyzer.analyzeExpression(
metadata,
+ queryContext,
sessionContext,
statementAnalyzerFactory,
accessControl,
@@ -2478,6 +2485,7 @@ public class StatementAnalyzer {
@Override
protected Scope visitCreateDevice(final CreateDevice node, final
Optional<Scope> context) {
+ queryContext.setQueryType(QueryType.WRITE);
return null;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
index f37b6460994..155e0d3338e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -46,11 +47,19 @@ public class StatementAnalyzerFactory {
public StatementAnalyzer createStatementAnalyzer(
Analysis analysis,
+ MPPQueryContext context,
SessionInfo session,
WarningCollector warningCollector,
CorrelationSupport correlationSupport) {
return new StatementAnalyzer(
- this, analysis, accessControl, warningCollector, session, metadata,
correlationSupport);
+ this,
+ analysis,
+ context,
+ accessControl,
+ warningCollector,
+ session,
+ metadata,
+ correlationSupport);
}
public static StatementAnalyzerFactory createTestingStatementAnalyzerFactory(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
index 44310f9b7e8..c5e73eeac05 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
-import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
@@ -215,8 +214,6 @@ public class LogicalPlanner {
}
private PlanNode planCreateDevice(final CreateDevice statement, final
Analysis analysis) {
- queryContext.setQueryType(QueryType.WRITE);
-
final CreateTableDeviceNode node =
new CreateTableDeviceNode(
queryContext.getQueryId().genPlanNodeId(),
@@ -238,8 +235,6 @@ public class LogicalPlanner {
}
private PlanNode planFetchDevice(final FetchDevice statement, final Analysis
analysis) {
- queryContext.setQueryType(QueryType.READ);
-
final List<ColumnHeader> columnHeaderList =
getColumnHeaderList(statement.getDatabase(), statement.getTableName());
@@ -312,8 +307,6 @@ public class LogicalPlanner {
}
private String planQueryDevice(final AbstractQueryDevice statement, final
Analysis analysis) {
- queryContext.setQueryType(QueryType.READ);
-
final String database =
Objects.isNull(statement.getDatabase())
? analysis.getDatabaseName()
@@ -341,12 +334,12 @@ public class LogicalPlanner {
return database;
}
- private List<ColumnHeader> getColumnHeaderList(String database, String
tableName) {
- List<TsTableColumnSchema> columnSchemaList =
+ private List<ColumnHeader> getColumnHeaderList(final String database, final
String tableName) {
+ final List<TsTableColumnSchema> columnSchemaList =
DataNodeTableCache.getInstance().getTable(database,
tableName).getColumnList();
- List<ColumnHeader> columnHeaderList = new
ArrayList<>(columnSchemaList.size());
- for (TsTableColumnSchema columnSchema : columnSchemaList) {
+ final List<ColumnHeader> columnHeaderList = new
ArrayList<>(columnSchemaList.size());
+ for (final TsTableColumnSchema columnSchema : columnSchemaList) {
if (columnSchema.getColumnCategory().equals(TsTableColumnCategory.ID)
||
columnSchema.getColumnCategory().equals(TsTableColumnCategory.ATTRIBUTE)) {
columnHeaderList.add(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
index d764877950a..2a2f40e94ca 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
@@ -96,6 +96,7 @@ public class RelationalModelPlanner implements IPlanner {
Analyzer analyzer =
new Analyzer(
+ context,
context.getSession(),
statementAnalyzerFactory,
Collections.emptyList(),
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
index 3ea6bac3540..e8481557784 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
@@ -49,7 +49,8 @@ public abstract class WrappedInsertStatement extends
WrappedStatement
protected TableSchema tableSchema;
- public WrappedInsertStatement(InsertBaseStatement innerTreeStatement,
MPPQueryContext context) {
+ protected WrappedInsertStatement(
+ InsertBaseStatement innerTreeStatement, MPPQueryContext context) {
super(innerTreeStatement, context);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
index 003dd2ed431..af11be5ad73 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
@@ -29,7 +29,7 @@ public abstract class WrappedStatement extends Statement {
protected org.apache.iotdb.db.queryengine.plan.statement.Statement
innerTreeStatement;
protected MPPQueryContext context;
- public WrappedStatement(
+ protected WrappedStatement(
org.apache.iotdb.db.queryengine.plan.statement.Statement
innerTreeStatement,
MPPQueryContext context) {
super(null);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index ae9996eb3db..34824d537bf 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -132,27 +132,27 @@ public class AnalyzerTest {
@Test
public void testMockQuery() throws OperatorNotFoundException {
- String sql =
+ final String sql =
"SELECT s1, (s1 + 1) as t from table1 where time > 100 and s2 > 10
offset 2 limit 3";
- Metadata metadata = Mockito.mock(Metadata.class);
+ final Metadata metadata = Mockito.mock(Metadata.class);
Mockito.when(metadata.tableExists(Mockito.any())).thenReturn(true);
- Map<String, ColumnHandle> map = new HashMap<>();
- TableSchema tableSchema = Mockito.mock(TableSchema.class);
+ final Map<String, ColumnHandle> map = new HashMap<>();
+ final TableSchema tableSchema = Mockito.mock(TableSchema.class);
Mockito.when(tableSchema.getTableName()).thenReturn("table1");
- ColumnSchema column1 =
+ final ColumnSchema column1 =
ColumnSchema.builder().setName("time").setType(INT64).setHidden(false).build();
- ColumnHandle column1Handle = Mockito.mock(ColumnHandle.class);
+ final ColumnHandle column1Handle = Mockito.mock(ColumnHandle.class);
map.put("time", column1Handle);
- ColumnSchema column2 =
+ final ColumnSchema column2 =
ColumnSchema.builder().setName("s1").setType(INT32).setHidden(false).build();
- ColumnHandle column2Handle = Mockito.mock(ColumnHandle.class);
+ final ColumnHandle column2Handle = Mockito.mock(ColumnHandle.class);
map.put("s1", column2Handle);
- ColumnSchema column3 =
+ final ColumnSchema column3 =
ColumnSchema.builder().setName("s2").setType(INT64).setHidden(false).build();
- ColumnHandle column3Handle = Mockito.mock(ColumnHandle.class);
+ final ColumnHandle column3Handle = Mockito.mock(ColumnHandle.class);
map.put("s2", column3Handle);
- List<ColumnSchema> columnSchemaList = Arrays.asList(column1, column2,
column3);
+ final List<ColumnSchema> columnSchemaList = Arrays.asList(column1,
column2, column3);
Mockito.when(tableSchema.getColumns()).thenReturn(columnSchemaList);
Mockito.when(
@@ -167,7 +167,8 @@ public class AnalyzerTest {
metadata.getOperatorReturnType(eq(OperatorType.ADD),
eq(Arrays.asList(INT32, INT32))))
.thenReturn(DOUBLE);
- Analysis actualAnalysis = analyzeSQL(sql, metadata);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ final Analysis actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
System.out.println(actualAnalysis.getTypes());
}
@@ -176,11 +177,11 @@ public class AnalyzerTest {
public void singleTableNoFilterTest() {
// wildcard
sql = "SELECT * FROM testdb.table1";
- actualAnalysis = analyzeSQL(sql, metadata);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -216,10 +217,10 @@ public class AnalyzerTest {
public void singleTableWithFilterTest1() {
// only global time filter
sql = "SELECT * FROM table1 where time > 1";
- actualAnalysis = analyzeSQL(sql, metadata);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -267,10 +268,10 @@ public class AnalyzerTest {
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);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -330,10 +331,10 @@ public class AnalyzerTest {
// 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);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -360,10 +361,10 @@ public class AnalyzerTest {
// 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);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -389,10 +390,10 @@ public class AnalyzerTest {
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);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -431,9 +432,9 @@ public class AnalyzerTest {
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);
- assertEquals(1, actualAnalysis.getTables().size());
context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
+ assertEquals(1, actualAnalysis.getTables().size());
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -479,7 +480,7 @@ public class AnalyzerTest {
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);
@@ -504,17 +505,17 @@ public class AnalyzerTest {
// 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);
+ context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
assertNotNull(actualAnalysis);
assertEquals(1, actualAnalysis.getTables().size());
- context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo,
WarningCollector.NOOP);
logicalQueryPlan = logicalPlanner.plan(actualAnalysis);
rootNode = logicalQueryPlan.getRootNode();
@@ -526,7 +527,7 @@ public class AnalyzerTest {
// 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);
@@ -549,7 +550,7 @@ public class AnalyzerTest {
// 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)
@@ -570,7 +571,7 @@ public class AnalyzerTest {
// 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)
@@ -588,7 +589,7 @@ public class AnalyzerTest {
// 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);
@@ -607,7 +608,7 @@ public class AnalyzerTest {
// 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);
@@ -624,7 +625,7 @@ public class AnalyzerTest {
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);
@@ -641,7 +642,7 @@ public class AnalyzerTest {
// 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);
@@ -650,7 +651,7 @@ public class AnalyzerTest {
// 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);
@@ -665,7 +666,7 @@ public class AnalyzerTest {
// 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);
@@ -683,7 +684,7 @@ public class AnalyzerTest {
// 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();
@@ -692,7 +693,7 @@ public class AnalyzerTest {
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();
@@ -700,7 +701,7 @@ public class AnalyzerTest {
// 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();
@@ -708,7 +709,7 @@ public class AnalyzerTest {
// 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();
@@ -719,7 +720,7 @@ public class AnalyzerTest {
// 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();
@@ -762,7 +763,7 @@ public class AnalyzerTest {
// 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();
@@ -780,7 +781,7 @@ public class AnalyzerTest {
"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);
@@ -806,7 +807,7 @@ public class AnalyzerTest {
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();
@@ -820,7 +821,7 @@ public class AnalyzerTest {
"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();
@@ -836,7 +837,7 @@ public class AnalyzerTest {
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();
@@ -853,7 +854,7 @@ public class AnalyzerTest {
public void limitEliminationTest() {
sql = "SELECT s1+s3 FROM table1 limit 10";
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);
// logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
@@ -886,7 +887,7 @@ public class AnalyzerTest {
sql = "SELECT s1,s1+s3 FROM table1 where tag1='beijing' and tag2='A1'
limit 10";
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);
// logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
@@ -909,7 +910,7 @@ public class AnalyzerTest {
sql = "SELECT diff(s1) FROM table1 where tag1='beijing' and tag2='A1'
limit 10";
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);
// logical plan: `OutputNode - ProjectNode - LimitNode - TableScanNode`
@@ -929,7 +930,7 @@ public class AnalyzerTest {
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();
@@ -1029,6 +1030,7 @@ public class AnalyzerTest {
analyzeStatement(
insertTabletStatement.toRelationalStatement(context),
mockMetadata,
+ context,
new SqlParser(),
sessionInfo);
assertEquals(1,
actualAnalysis.getDataPartition().getDataPartitionMap().size());
@@ -1074,6 +1076,7 @@ public class AnalyzerTest {
analyzeStatement(
insertStatement.toRelationalStatement(context),
mockMetadata,
+ context,
new SqlParser(),
sessionInfo);
assertEquals(1,
actualAnalysis.getDataPartition().getDataPartitionMap().size());
@@ -1106,30 +1109,35 @@ public class AnalyzerTest {
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());
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
index d5045ac4163..6791070b16c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
@@ -11,6 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
import org.apache.iotdb.commons.conf.IoTDBConstant;
@@ -70,7 +71,7 @@ public class LimitOffsetPushDownTest {
public void noOrderByTest() {
sql = "SELECT time, tag3, cast(s2 AS double) FROM table1 where s1>1 offset
5 limit 10";
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);
@@ -110,7 +111,7 @@ public class LimitOffsetPushDownTest {
sql =
"SELECT time, tag3, cast(s2 AS double) FROM table1 where s1>1 order by
tag2 desc, tag1 asc, attr1 desc, tag3 desc, time desc, s1+s3 asc offset 5 limit
10";
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);
@@ -144,7 +145,7 @@ public class LimitOffsetPushDownTest {
sql = "SELECT * FROM table1 order by tag2 desc, tag1 asc, attr1 desc, tag3
desc limit 10";
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);
@@ -183,7 +184,7 @@ public class LimitOffsetPushDownTest {
sql =
"SELECT time, tag3, cast(s2 AS double) FROM table1 where s1>1 order by
tag2 desc, attr1 desc, tag3 desc, time desc, s1+s3 asc offset 5 limit 10";
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);
@@ -224,7 +225,7 @@ public class LimitOffsetPushDownTest {
sql =
"SELECT time, tag3, cast(s2 AS double) FROM table1 where s1>1 order by
time desc, tag2 asc, s1+s3 asc offset 5 limit 10";
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);
@@ -264,7 +265,7 @@ public class LimitOffsetPushDownTest {
sql =
"SELECT time, tag3, cast(s2 AS double) FROM table1 where s1>1 order by
s1 desc, tag2 desc, attr1 desc, tag3 desc, time desc, s1+s3 asc offset 5 limit
10";
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);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
index 7feb9dc1b1c..238bacc8180 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
@@ -100,7 +100,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by tag2
desc, tag3 asc, time desc, s1+s2 desc offset 5 limit 10";
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();
@@ -176,7 +176,7 @@ public class SortTest {
sql = "SELECT * FROM table1 order by tag2 desc, tag3 asc offset 5 limit
10";
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();
@@ -202,7 +202,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by tag2
desc, tag1 desc, tag3 asc, time desc, s1+s2 desc offset 5 limit 10";
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();
@@ -280,7 +280,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by tag2
desc, tag1 desc, tag3 asc, time desc, s1+s2 desc";
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();
@@ -348,7 +348,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by tag2
desc, tag1 desc, s1+s2 desc, time desc offset 5 limit 10";
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();
@@ -428,7 +428,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by tag2
desc, tag1 desc, tag3 asc, s1+s2 desc, time desc offset 5 limit 10";
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();
@@ -506,7 +506,7 @@ public class SortTest {
sql =
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
order by time desc, tag2 asc, tag3 desc, s1+s2 desc offset 5 limit 10";
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();
@@ -518,7 +518,7 @@ public class SortTest {
"SELECT time, tag3, substring(tag1, 1), cast(s2 as double), s2+s3,
attr1 FROM table1 "
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by time
desc, s1+s2 asc, tag2 asc, tag1 desc offset 5 limit 10";
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();
@@ -529,7 +529,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by time
desc, s1+s2 asc, tag2 asc, tag3 desc, tag1 desc offset 5 limit 10";
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();
@@ -540,7 +540,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by time
desc, tag2 asc, tag3 desc, tag1 asc, s1+s2 desc offset 5 limit 10";
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();
@@ -555,7 +555,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "order by s1+s2 desc, tag2 desc, tag1 desc, time desc offset 5
limit 10";
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();
@@ -566,7 +566,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by
s1+s2 desc, tag2 desc, tag1 desc, tag3 desc, time asc offset 5 limit 10";
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();
@@ -577,7 +577,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by
s1+s2 desc, time desc, tag2 desc, tag1 desc offset 5 limit 10";
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();
@@ -588,7 +588,7 @@ public class SortTest {
"SELECT time, tag3, tag1, cast(s2 as double), s2+s3, attr1 FROM table1
"
+ "where s1>1 and s1+s3>0 and cast(s1 as double)>1.0 order by
s1+s2 desc, time desc, tag2 desc, tag1 desc, tag3 asc offset 5 limit 10";
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();
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
index 170cff354d0..254fd5f0912 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
@@ -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;
@@ -113,17 +114,24 @@ public class PlanTester {
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(),
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PredicateUtilsTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PredicateUtilsTest.java
index ad68875c172..4820b14eadc 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PredicateUtilsTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PredicateUtilsTest.java
@@ -19,6 +19,11 @@
package org.apache.iotdb.db.queryengine.plan.relational.planner;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.db.protocol.session.IClientSession;
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+import org.apache.iotdb.db.queryengine.common.QueryId;
+import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.TestMatadata;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -27,6 +32,8 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
import org.apache.tsfile.utils.Pair;
import org.junit.Test;
+import java.time.ZoneId;
+
import static
org.apache.iotdb.db.queryengine.plan.relational.analyzer.AnalyzerTest.analyzeSQL;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.PredicateUtils.extractGlobalTimePredicate;
@@ -34,16 +41,29 @@ public class PredicateUtilsTest {
@Test
public void extractGlobalTimePredicateTest() {
String sql = "SELECT tag1 FROM table1 where time>1 and s1>1";
- Metadata metadata = new TestMatadata();
+ final Metadata metadata = new TestMatadata();
+ final MPPQueryContext context =
+ new MPPQueryContext(
+ sql,
+ new QueryId("test_query"),
+ new SessionInfo(
+ 1L,
+ "iotdb-user",
+ ZoneId.systemDefault(),
+ IoTDBConstant.ClientVersion.V_1_0,
+ "db",
+ IClientSession.SqlDialect.TABLE),
+ null,
+ null);
- Analysis actualAnalysis = analyzeSQL(sql, metadata);
+ Analysis actualAnalysis = analyzeSQL(sql, metadata, context);
Pair<Expression, Boolean> ret =
extractGlobalTimePredicate(
actualAnalysis.getWhereMap().values().iterator().next(), true,
true);
System.out.println(ret.getLeft());
sql = "SELECT tag1 FROM table1 where time>1 and s1>1 or tag1='A'";
- actualAnalysis = analyzeSQL(sql, metadata);
+ actualAnalysis = analyzeSQL(sql, metadata, context);
ret =
extractGlobalTimePredicate(
actualAnalysis.getWhereMap().values().iterator().next(), true,
true);