This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/TableModelGrammar by this
push:
new a4f22dfdd5d fix relational plan test
a4f22dfdd5d is described below
commit a4f22dfdd5d85394027c63571beb2a4bf55f7e53
Author: Beyyes <[email protected]>
AuthorDate: Mon Apr 8 14:29:17 2024 +0800
fix relational plan test
---
.../plan/relational/planner/LogicalPlanner.java | 29 ++++++++--------
.../plan/relational/planner/QueryPlanner.java | 8 ++---
.../plan/relational/planner/RelationPlan.java | 7 ++--
.../plan/relational/planner/RelationPlanner.java | 4 +--
.../relational/planner/RelationalModelPlanner.java | 24 +++++++++----
.../distribute/RelationalDistributionPlanner.java | 32 +++++++++++++++++
.../plan/relational/analyzer/AnalyzerTest.java | 40 +++++++---------------
.../plan/relational/analyzer/TestMatadata.java | 34 +++++++++++++++---
8 files changed, 117 insertions(+), 61 deletions(-)
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 517f627106f..1df569c2967 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
@@ -17,6 +17,7 @@ import org.apache.iotdb.commons.exception.IoTDBException;
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.planner.plan.LogicalQueryPlan;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Field;
@@ -35,16 +36,8 @@ import static java.util.Objects.requireNonNull;
public class LogicalPlanner {
private static final Logger LOG = Logger.get(LogicalPlanner.class);
-
- public enum Stage {
- CREATED,
- OPTIMIZED,
- OPTIMIZED_AND_VALIDATED
- }
-
private final MPPQueryContext context;
-
- private final SessionInfo session;
+ private final SessionInfo sessionInfo;
private final SymbolAllocator symbolAllocator = new SymbolAllocator();
private final Metadata metadata;
private final WarningCollector warningCollector;
@@ -52,19 +45,19 @@ public class LogicalPlanner {
public LogicalPlanner(
MPPQueryContext context,
Metadata metadata,
- SessionInfo session,
+ SessionInfo sessionInfo,
WarningCollector warningCollector) {
this.context = context;
this.metadata = metadata;
- this.session = requireNonNull(session, "session is null");
+ this.sessionInfo = requireNonNull(sessionInfo, "session is null");
this.warningCollector = requireNonNull(warningCollector, "warningCollector
is null");
}
- public PlanNode plan(Analysis analysis) throws IoTDBException {
- return planStatement(analysis, analysis.getStatement());
+ public LogicalQueryPlan plan(Analysis analysis) throws IoTDBException {
+ return new LogicalQueryPlan(context, planStatement(analysis,
analysis.getStatement()));
}
- public PlanNode planStatement(Analysis analysis, Statement statement) throws
IoTDBException {
+ private PlanNode planStatement(Analysis analysis, Statement statement)
throws IoTDBException {
return createOutputPlan(planStatementWithoutOutput(analysis, statement),
analysis);
}
@@ -109,6 +102,12 @@ public class LogicalPlanner {
private RelationPlanner getRelationPlanner(Analysis analysis) {
return new RelationPlanner(
- analysis, symbolAllocator, context.getQueryId(), session,
ImmutableMap.of());
+ analysis, symbolAllocator, context.getQueryId(), sessionInfo,
ImmutableMap.of());
+ }
+
+ private enum Stage {
+ CREATED,
+ OPTIMIZED,
+ OPTIMIZED_AND_VALIDATED
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
index 8a94321d735..eb23a4a2cbf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
@@ -202,9 +202,9 @@ class QueryPlanner {
private static List<Symbol> computeOutputs(
PlanBuilder builder, List<Expression> outputExpressions) {
ImmutableList.Builder<Symbol> outputSymbols = ImmutableList.builder();
- // for (Expression expression : outputExpressions) {
- // // outputSymbols.add(builder.translate(expression));
- // }
+ for (Expression expression : outputExpressions) {
+ outputSymbols.add(new Symbol(expression.toString()));
+ }
return outputSymbols.build();
}
@@ -259,7 +259,7 @@ class QueryPlanner {
ImmutableList.Builder<Symbol> orderBySymbols = ImmutableList.builder();
Map<Symbol, SortOrder> orderings = new HashMap<>();
for (Expression fieldOrExpression : orderByExpressions) {
- Symbol symbol = null;
+ Symbol symbol = new Symbol(fieldOrExpression.toString());
// subPlan.translate(fieldOrExpression);
SortItem sortItem = sortItems.next();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
index de035fd48fd..5ece186d194 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
@@ -30,9 +30,12 @@ import static java.util.Objects.requireNonNull;
* the outputs of the plan.
*/
class RelationPlan {
+
private final PlanNode root;
- private final List<Symbol>
- fieldMappings; // for each field in the relation, the corresponding
symbol from "root"
+
+ // for each field in the relation, the corresponding symbol from "root"
+ private final List<Symbol> fieldMappings;
+
private final Scope scope;
public RelationPlan(PlanNode root, Scope scope, List<Symbol> fieldMappings) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
index ec08bd7f4d3..b916c753b2e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
@@ -117,8 +117,8 @@ class RelationPlanner extends AstVisitor<RelationPlan,
Void> {
plan = new RelationPlan(root, scope, outputSymbols);
}
- plan = addRowFilters(node, plan);
- // TODO what's the meaning of addColumnMasks?
+ // TODO what's the meaning of RowFilters addColumnMasks?
+ // plan = addRowFilters(node, plan);
// plan = addColumnMasks(node, plan);
return plan;
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 e3b19c5d59c..713be1450bd 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
@@ -36,7 +36,9 @@ import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analyzer;
import
org.apache.iotdb.db.queryengine.plan.relational.analyzer.StatementAnalyzerFactory;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.RelationalDistributionPlanner;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
+import org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler;
import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
import org.apache.iotdb.db.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.relational.sql.tree.Statement;
@@ -105,19 +107,17 @@ public class RelationalModelPlanner implements IPlanner {
@Override
public LogicalQueryPlan doLogicalPlan(IAnalysis analysis, MPPQueryContext
context) {
- // TODO need implemented by Beyyes
try {
- new LogicalPlanner(context, metadata, null,
warningCollector).plan((Analysis) analysis);
+ return new LogicalPlanner(context, metadata, null, warningCollector)
+ .plan((Analysis) analysis);
} catch (IoTDBException e) {
throw new RuntimeException(e);
}
- return null;
}
@Override
public DistributedQueryPlan doDistributionPlan(IAnalysis analysis,
LogicalQueryPlan logicalPlan) {
- // TODO
- return null;
+ return new RelationalDistributionPlanner((Analysis) analysis,
logicalPlan).planFragments();
}
@Override
@@ -126,7 +126,19 @@ public class RelationalModelPlanner implements IPlanner {
DistributedQueryPlan distributedPlan,
MPPQueryContext context,
QueryStateMachine stateMachine) {
- return null;
+ IScheduler scheduler =
+ new ClusterScheduler(
+ context,
+ stateMachine,
+ distributedPlan.getInstances(),
+ context.getQueryType(),
+ executor,
+ writeOperationExecutor,
+ scheduledExecutor,
+ syncInternalServiceClientManager,
+ asyncInternalServiceClientManager);
+ scheduler.start();
+ return scheduler;
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
new file mode 100644
index 00000000000..0c85ad78cde
--- /dev/null
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.iotdb.db.queryengine.plan.relational.planner.distribute;
+
+import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
+import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
+
+public class RelationalDistributionPlanner {
+ private final Analysis analysis;
+ private final LogicalQueryPlan logicalQueryPlan;
+
+ public RelationalDistributionPlanner(Analysis analysis, LogicalQueryPlan
logicalQueryPlan) {
+ this.analysis = analysis;
+ this.logicalQueryPlan = logicalQueryPlan;
+ }
+
+ public DistributedQueryPlan planFragments() {
+ return 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 d2018ff4256..e1b5f3af7d5 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
@@ -19,9 +19,12 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
+import org.apache.iotdb.commons.exception.IoTDBException;
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.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
import org.apache.iotdb.db.queryengine.plan.relational.function.BoundSignature;
import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionId;
import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionKind;
@@ -34,6 +37,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectN
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.ResolvedFunction;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableHandle;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
import org.apache.iotdb.db.relational.sql.parser.SqlParser;
import org.apache.iotdb.db.relational.sql.tree.Statement;
@@ -122,42 +126,24 @@ public class AnalyzerTest {
}
@Test
- public void testSingleTableQuery() throws OperatorNotFoundException {
+ public void testSingleTableQuery() throws IoTDBException {
String sql =
- "SELECT tag1 as tt, tag2, attribute1 as attr1, s1+1, s2 FROM table1 "
- + "WHERE time>1 AND tag1=\"A\" and tag3=\"B\" AND s1=1 OR s3=3
ORDER BY time DESC OFFSET 10 LIMIT 5";
+ "SELECT tag1 as tt, tag2, attr1, s1+1 FROM table1 "
+ + "WHERE time>1 AND tag1='A' OR s2>3 ORDER BY time DESC OFFSET 10
LIMIT 5";
Metadata metadata = new TestMatadata();
- // ResolvedFunction lLessThanI =
- // new ResolvedFunction(
- // new BoundSignature("l<i", BOOLEAN, Arrays.asList(INT64,
INT32)),
- // new FunctionId("l<i"),
- // FunctionKind.SCALAR,
- // true);
- //
- // ResolvedFunction iAddi =
- // new ResolvedFunction(
- // new BoundSignature("l+i", INT64, Arrays.asList(INT32,
INT32)),
- // new FunctionId("l+i"),
- // FunctionKind.SCALAR,
- // true);
- //
- // Mockito.when(
- // metadata.resolveOperator(eq(OperatorType.LESS_THAN),
eq(Arrays.asList(INT64,
- // INT32))))
- // .thenReturn(lLessThanI);
- // Mockito.when(metadata.resolveOperator(eq(OperatorType.ADD),
eq(Arrays.asList(INT32,
- // INT32))))
- // .thenReturn(iAddi);
-
Analysis actualAnalysis = analyzeSQL(sql, metadata);
assertNotNull(actualAnalysis);
System.out.println(actualAnalysis.getTypes());
QueryId queryId = new QueryId("tmp_query");
MPPQueryContext context = new MPPQueryContext(queryId);
- // LogicalPlanner logicalPlanner = new LogicalPlanner(context, metadata);
-
+ SessionInfo sessionInfo = new SessionInfo(1L, "iotdb",
ZoneId.systemDefault());
+ WarningCollector warningCollector = WarningCollector.NOOP;
+ LogicalPlanner logicalPlanner =
+ new LogicalPlanner(context, metadata, sessionInfo, warningCollector);
+ LogicalQueryPlan result = logicalPlanner.plan(actualAnalysis);
+ System.out.println(result);
}
private Analysis analyzeSQL(String sql, Metadata metadata) {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
index 62ac6cae73c..1c37929bee0 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
@@ -1,6 +1,9 @@
package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
+import org.apache.iotdb.db.queryengine.plan.relational.function.BoundSignature;
+import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionId;
+import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionKind;
import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnHandle;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnMetadata;
@@ -13,7 +16,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.metadata.TableHandle;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadata;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
import org.apache.iotdb.tsfile.read.common.type.BinaryType;
-import org.apache.iotdb.tsfile.read.common.type.DoubleType;
+import org.apache.iotdb.tsfile.read.common.type.BooleanType;
import org.apache.iotdb.tsfile.read.common.type.Type;
import org.mockito.Mockito;
@@ -45,8 +48,8 @@ public class TestMatadata implements Metadata {
private static final ColumnMetadata TAG3_CM = new ColumnMetadata(TAG3,
BinaryType.TEXT);
private static final ColumnMetadata ATTR1_CM = new ColumnMetadata(ATTR1,
BinaryType.TEXT);
private static final ColumnMetadata ATTR2_CM = new ColumnMetadata(ATTR2,
BinaryType.TEXT);
- private static final ColumnMetadata S1_CM = new ColumnMetadata(S1, INT32);
- private static final ColumnMetadata S2_CM = new ColumnMetadata(S2,
DoubleType.DOUBLE);
+ private static final ColumnMetadata S1_CM = new ColumnMetadata(S1, INT64);
+ private static final ColumnMetadata S2_CM = new ColumnMetadata(S2, INT64);
public static final String DB2 = "db2";
public static final String TABLE2 = "table2";
@@ -82,7 +85,7 @@ public class TestMatadata implements Metadata {
@Override
public Optional<TableHandle> getTableHandle(SessionInfo session,
QualifiedObjectName name) {
- return Optional.empty();
+ return Optional.of(Mockito.mock(TableHandle.class));
}
@Override
@@ -104,6 +107,27 @@ public class TestMatadata implements Metadata {
public ResolvedFunction resolveOperator(
OperatorType operatorType, List<? extends Type> argumentTypes)
throws OperatorNotFoundException {
- return null;
+ if (operatorType == OperatorType.LESS_THAN) {
+ return new ResolvedFunction(
+ new BoundSignature("less_than", BooleanType.BOOLEAN,
Arrays.asList(INT64, INT32)),
+ new FunctionId("less_than"),
+ FunctionKind.SCALAR,
+ true);
+ } else if (operatorType == OperatorType.ADD) {
+ return new ResolvedFunction(
+ new BoundSignature("add", INT64, Arrays.asList(INT64, INT32)),
+ new FunctionId("add"),
+ FunctionKind.SCALAR,
+ true);
+ } else if (operatorType == OperatorType.EQUAL) {
+ return new ResolvedFunction(
+ new BoundSignature(
+ "equals", BooleanType.BOOLEAN, Arrays.asList(BinaryType.TEXT,
BinaryType.TEXT)),
+ new FunctionId("equals"),
+ FunctionKind.SCALAR,
+ true);
+ } else {
+ throw new OperatorNotFoundException(operatorType, argumentTypes, new
RuntimeException());
+ }
}
}