This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch select-into in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a710990edbb04e441d7d884b5b9861ea5e0b12c9 Author: Steve Yurong Su <[email protected]> AuthorDate: Tue Jul 13 17:14:43 2021 +0800 physical plan --- .../main/java/org/apache/iotdb/db/qp/Planner.java | 22 ++++++-- .../db/qp/logical/crud/SelectIntoOperator.java | 16 ++++++ .../apache/iotdb/db/qp/physical/PhysicalPlan.java | 6 +- .../iotdb/db/qp/physical/crud/SelectIntoPlan.java | 66 ++++++++++++++++++++++ .../iotdb/db/qp/strategy/LogicalChecker.java | 5 ++ 5 files changed, 108 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/qp/Planner.java b/server/src/main/java/org/apache/iotdb/db/qp/Planner.java index b12f8ce..28797c4 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/Planner.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/Planner.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.qp.logical.Operator; import org.apache.iotdb.db.qp.logical.crud.FilterOperator; import org.apache.iotdb.db.qp.logical.crud.QueryOperator; +import org.apache.iotdb.db.qp.logical.crud.SelectIntoOperator; import org.apache.iotdb.db.qp.logical.crud.WhereComponent; import org.apache.iotdb.db.qp.physical.PhysicalPlan; import org.apache.iotdb.db.qp.physical.crud.GroupByTimePlan; @@ -42,9 +43,6 @@ import org.apache.iotdb.service.rpc.thrift.TSRawDataQueryReq; import java.time.ZoneId; -import static org.apache.iotdb.db.qp.logical.Operator.OperatorType.QUERY; -import static org.apache.iotdb.db.qp.logical.Operator.OperatorType.QUERY_INDEX; - /** provide a integration method for other user. */ public class Planner { @@ -110,9 +108,15 @@ public class Planner { */ protected Operator logicalOptimize(Operator operator, int fetchSize) throws LogicalOperatorException, PathNumOverLimitException { - return operator.getType().equals(QUERY) || operator.getType().equals(QUERY_INDEX) - ? optimizeQueryOperator((QueryOperator) operator, fetchSize) - : operator; + switch (operator.getType()) { + case QUERY: + case QUERY_INDEX: + return optimizeQueryOperator((QueryOperator) operator, fetchSize); + case SELECT_INTO: + return optimizeSelectIntoOperator((SelectIntoOperator) operator, fetchSize); + default: + return operator; + } } /** @@ -139,6 +143,12 @@ public class Planner { return root; } + private Operator optimizeSelectIntoOperator(SelectIntoOperator operator, int fetchSize) + throws PathNumOverLimitException, LogicalOperatorException { + operator.setQueryOperator(optimizeQueryOperator(operator.getQueryOperator(), fetchSize)); + return operator; + } + @TestOnly public PhysicalPlan parseSQLToPhysicalPlan(String sqlStr) throws QueryProcessException { return parseSQLToPhysicalPlan(sqlStr, ZoneId.systemDefault(), 1024); diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java index 322b9f8..ee9f7fb 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java @@ -19,9 +19,15 @@ package org.apache.iotdb.db.qp.logical.crud; +import org.apache.iotdb.db.exception.query.LogicalOperatorException; +import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.metadata.PartialPath; import org.apache.iotdb.db.qp.constant.SQLConstant; import org.apache.iotdb.db.qp.logical.Operator; +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.db.qp.physical.crud.QueryPlan; +import org.apache.iotdb.db.qp.physical.crud.SelectIntoPlan; +import org.apache.iotdb.db.qp.strategy.PhysicalGenerator; import java.util.List; @@ -36,6 +42,16 @@ public class SelectIntoOperator extends Operator { operatorType = OperatorType.SELECT_INTO; } + @Override + public PhysicalPlan generatePhysicalPlan(PhysicalGenerator generator) + throws QueryProcessException { + return new SelectIntoPlan((QueryPlan) queryOperator.generatePhysicalPlan(generator), intoPaths); + } + + public void check() throws LogicalOperatorException { + queryOperator.check(); + } + public void setQueryOperator(QueryOperator queryOperator) { this.queryOperator = queryOperator; } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java index 97d5daa..74b4f05 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java @@ -29,6 +29,7 @@ import org.apache.iotdb.db.qp.physical.crud.InsertMultiTabletPlan; import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan; import org.apache.iotdb.db.qp.physical.crud.InsertRowsPlan; import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan; +import org.apache.iotdb.db.qp.physical.crud.SelectIntoPlan; import org.apache.iotdb.db.qp.physical.crud.SetDeviceTemplatePlan; import org.apache.iotdb.db.qp.physical.sys.AlterTimeSeriesPlan; import org.apache.iotdb.db.qp.physical.sys.AuthorPlan; @@ -380,6 +381,8 @@ public abstract class PhysicalPlan { case DROP_CONTINUOUS_QUERY: plan = new DropContinuousQueryPlan(); break; + case SELECT_INTO: + plan = new SelectIntoPlan(); default: throw new IOException("unrecognized log type " + type); } @@ -438,7 +441,8 @@ public abstract class PhysicalPlan { STOP_TRIGGER, CREATE_CONTINUOUS_QUERY, DROP_CONTINUOUS_QUERY, - SHOW_CONTINUOUS_QUERIES + SHOW_CONTINUOUS_QUERIES, + SELECT_INTO } public long getIndex() { diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/SelectIntoPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/SelectIntoPlan.java new file mode 100644 index 0000000..7edb17d --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/SelectIntoPlan.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.qp.physical.crud; + +import org.apache.iotdb.db.exception.metadata.IllegalPathException; +import org.apache.iotdb.db.metadata.PartialPath; +import org.apache.iotdb.db.qp.logical.Operator.OperatorType; +import org.apache.iotdb.db.qp.physical.PhysicalPlan; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.List; + +public class SelectIntoPlan extends PhysicalPlan { + + private QueryPlan queryPlan; + private List<PartialPath> intoPaths; + + public SelectIntoPlan() { + super(false, OperatorType.SELECT_INTO); + } + + public SelectIntoPlan(QueryPlan queryPlan, List<PartialPath> intoPaths) { + super(false, OperatorType.SELECT_INTO); + this.queryPlan = queryPlan; + this.intoPaths = intoPaths; + } + + @Override + public void serialize(DataOutputStream stream) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public void serialize(ByteBuffer buffer) { + throw new UnsupportedOperationException(); + } + + @Override + public void deserialize(ByteBuffer buffer) throws IllegalPathException { + throw new UnsupportedOperationException(); + } + + @Override + public List<PartialPath> getPaths() { + throw new UnsupportedOperationException(); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalChecker.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalChecker.java index 23f6a6f..14234d5 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalChecker.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalChecker.java @@ -22,6 +22,7 @@ package org.apache.iotdb.db.qp.strategy; import org.apache.iotdb.db.exception.query.LogicalOperatorException; import org.apache.iotdb.db.qp.logical.Operator; import org.apache.iotdb.db.qp.logical.crud.QueryOperator; +import org.apache.iotdb.db.qp.logical.crud.SelectIntoOperator; public class LogicalChecker { @@ -32,5 +33,9 @@ public class LogicalChecker { if (operator instanceof QueryOperator) { ((QueryOperator) operator).check(); } + + if (operator instanceof SelectIntoOperator) { + ((SelectIntoOperator) operator).check(); + } } }
