This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/intoOperator in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 248dacce5624045b38aa1ab40441976c3d732974 Author: Minghui Liu <[email protected]> AuthorDate: Mon Oct 17 22:27:01 2022 +0800 implement LogicalPlan for SELECT INTO statement --- .../db/mpp/plan/planner/LogicalPlanBuilder.java | 26 ++++++++++++++++++++++ .../db/mpp/plan/planner/LogicalPlanVisitor.java | 7 ++++++ 2 files changed, 33 insertions(+) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java index 965c4bd477..90f1219767 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java @@ -52,11 +52,13 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.metedata.read.SchemaQueryO import org.apache.iotdb.db.mpp.plan.planner.plan.node.metedata.read.TimeSeriesCountNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.metedata.read.TimeSeriesSchemaScanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.AggregationNode; +import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewIntoNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByTagNode; +import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.IntoNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.SlidingWindowAggregationNode; @@ -73,8 +75,10 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationStep; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.CrossSeriesAggregationDescriptor; +import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByTimeParameter; +import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.IntoPathDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.OrderByParameter; import org.apache.iotdb.db.mpp.plan.statement.component.Ordering; import org.apache.iotdb.db.mpp.plan.statement.component.SortItem; @@ -844,6 +848,28 @@ public class LogicalPlanBuilder { } } + public LogicalPlanBuilder planDeviceViewInto( + DeviceViewIntoPathDescriptor deviceViewIntoPathDescriptor) { + if (deviceViewIntoPathDescriptor == null) { + return this; + } + + this.root = + new DeviceViewIntoNode( + context.getQueryId().genPlanNodeId(), this.getRoot(), deviceViewIntoPathDescriptor); + return this; + } + + public LogicalPlanBuilder planInto(IntoPathDescriptor intoPathDescriptor) { + if (intoPathDescriptor == null) { + return this; + } + + this.root = + new IntoNode(context.getQueryId().genPlanNodeId(), this.getRoot(), intoPathDescriptor); + return this; + } + /** Meta Query* */ public LogicalPlanBuilder planTimeSeriesSchemaSource( PartialPath pathPattern, diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java index 2f2f954520..ccac3a83e1 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java @@ -158,6 +158,13 @@ public class LogicalPlanVisitor extends StatementVisitor<PlanNode, MPPQueryConte .planOffset(queryStatement.getRowOffset()) .planLimit(queryStatement.getRowLimit()); + // plan select into + if (queryStatement.isAlignByDevice()) { + planBuilder = planBuilder.planDeviceViewInto(analysis.getDeviceViewIntoPathDescriptor()); + } else { + planBuilder = planBuilder.planInto(analysis.getIntoPathDescriptor()); + } + return planBuilder.getRoot(); }
