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();
+    }
   }
 }

Reply via email to