This is an automated email from the ASF dual-hosted git repository.

hui 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 1f151ba1cf SELECT INTO: implement explain & ignore ORDER BY (#7794)
1f151ba1cf is described below

commit 1f151ba1cf81af3b0df80d96b0a58b6bcb31cdaa
Author: liuminghui233 <[email protected]>
AuthorDate: Sun Oct 30 09:03:02 2022 +0800

    SELECT INTO: implement explain & ignore ORDER BY (#7794)
---
 .../iotdb/db/it/selectinto/IoTDBSelectInto2IT.java |  2 -
 ...BSelectInto2IT.java => IoTDBSelectInto3IT.java} |  9 +---
 .../iotdb/db/it/selectinto/IoTDBSelectIntoIT.java  |  7 +--
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  |  2 +
 .../plan/planner/plan/node/PlanGraphPrinter.java   | 51 ++++++++++++++++++++++
 5 files changed, 56 insertions(+), 15 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
index 8f3545b2a7..2b646a9daf 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
@@ -36,8 +36,6 @@ import static 
org.apache.iotdb.db.it.utils.TestUtils.prepareData;
 @Category({ClusterIT.class})
 public class IoTDBSelectInto2IT extends IoTDBSelectIntoIT {
 
-  private static int numOfPointsPerPage;
-
   @BeforeClass
   public static void setUp() throws Exception {
     selectIntoInsertTabletPlanRowLimit =
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto3IT.java
similarity index 85%
copy from 
integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
copy to 
integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto3IT.java
index 8f3545b2a7..3a38e50684 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto2IT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectInto3IT.java
@@ -34,17 +34,13 @@ import static 
org.apache.iotdb.db.it.utils.TestUtils.prepareData;
 @RunWith(IoTDBTestRunner.class)
 // TODO add LocalStandaloneIT back while deleting old standalone
 @Category({ClusterIT.class})
-public class IoTDBSelectInto2IT extends IoTDBSelectIntoIT {
-
-  private static int numOfPointsPerPage;
+public class IoTDBSelectInto3IT extends IoTDBSelectIntoIT {
 
   @BeforeClass
   public static void setUp() throws Exception {
     selectIntoInsertTabletPlanRowLimit =
         ConfigFactory.getConfig().getSelectIntoInsertTabletPlanRowLimit();
-    numOfPointsPerPage = 
ConfigFactory.getConfig().getMaxNumberOfPointsInPage();
-    ConfigFactory.getConfig().setSelectIntoInsertTabletPlanRowLimit(8);
-    ConfigFactory.getConfig().setMaxNumberOfPointsInPage(5);
+    ConfigFactory.getConfig().setSelectIntoInsertTabletPlanRowLimit(5);
     EnvFactory.getEnv().initBeforeClass();
     prepareData(SQLs);
   }
@@ -54,6 +50,5 @@ public class IoTDBSelectInto2IT extends IoTDBSelectIntoIT {
     EnvFactory.getEnv().cleanAfterClass();
     ConfigFactory.getConfig()
         
.setSelectIntoInsertTabletPlanRowLimit(selectIntoInsertTabletPlanRowLimit);
-    ConfigFactory.getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage);
   }
 }
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
index f42c86cd97..422b8aa22c 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.it.selectinto;
 
-import org.apache.iotdb.it.env.ConfigFactory;
 import org.apache.iotdb.it.env.EnvFactory;
 import org.apache.iotdb.it.framework.IoTDBTestRunner;
 import org.apache.iotdb.itbase.category.ClusterIT;
@@ -48,6 +47,7 @@ import static org.junit.Assert.fail;
 public class IoTDBSelectIntoIT {
 
   protected static int selectIntoInsertTabletPlanRowLimit;
+  protected static int numOfPointsPerPage;
 
   protected static final String[] SQLs =
       new String[] {
@@ -107,9 +107,6 @@ public class IoTDBSelectIntoIT {
 
   @BeforeClass
   public static void setUp() throws Exception {
-    selectIntoInsertTabletPlanRowLimit =
-        ConfigFactory.getConfig().getSelectIntoInsertTabletPlanRowLimit();
-    ConfigFactory.getConfig().setSelectIntoInsertTabletPlanRowLimit(5);
     EnvFactory.getEnv().initBeforeClass();
     prepareData(SQLs);
   }
@@ -117,8 +114,6 @@ public class IoTDBSelectIntoIT {
   @AfterClass
   public static void tearDown() throws Exception {
     EnvFactory.getEnv().cleanAfterClass();
-    ConfigFactory.getConfig()
-        
.setSelectIntoInsertTabletPlanRowLimit(selectIntoInsertTabletPlanRowLimit);
   }
 
   // -------------------------------------- ALIGN BY TIME 
---------------------------------------
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index 396ab2f851..f45234b24d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -1105,6 +1105,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     if (!queryStatement.isSelectInto()) {
       return;
     }
+    queryStatement.setOrderByComponent(null);
 
     List<PartialPath> sourceDevices = new ArrayList<>(deviceSet);
     List<Expression> sourceColumns =
@@ -1152,6 +1153,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     if (!queryStatement.isSelectInto()) {
       return;
     }
+    queryStatement.setOrderByComponent(null);
 
     List<Expression> sourceColumns =
         outputExpressions.stream()
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
index e803180818..3f91f89c0d 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
@@ -21,15 +21,18 @@ package org.apache.iotdb.db.mpp.plan.planner.plan.node;
 
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.commons.partition.DataPartition;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.AggregationNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceMergeNode;
+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.ExchangeNode;
 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;
@@ -43,6 +46,9 @@ import 
org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesAggregationSc
 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.CrossSeriesAggregationDescriptor;
+import 
org.apache.iotdb.db.mpp.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor;
+import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.IntoPathDescriptor;
+import org.apache.iotdb.tsfile.utils.Pair;
 
 import org.apache.commons.lang3.Validate;
 
@@ -292,6 +298,51 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
     return render(node, boxValue, context);
   }
 
+  @Override
+  public List<String> visitInto(IntoNode node, GraphContext context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("Into-%s", node.getPlanNodeId().getId()));
+    IntoPathDescriptor descriptor = node.getIntoPathDescriptor();
+    drawSourceTargetPath(
+        boxValue,
+        descriptor.getSourceTargetPathPairList(),
+        descriptor.getTargetDeviceToAlignedMap());
+    return render(node, boxValue, context);
+  }
+
+  @Override
+  public List<String> visitDeviceViewInto(DeviceViewIntoNode node, 
GraphContext context) {
+    List<String> boxValue = new ArrayList<>();
+    boxValue.add(String.format("DeviceViewInto-%s", 
node.getPlanNodeId().getId()));
+    DeviceViewIntoPathDescriptor descriptor = 
node.getDeviceViewIntoPathDescriptor();
+    Map<String, List<Pair<String, PartialPath>>> 
deviceToSourceTargetPathPairListMap =
+        descriptor.getDeviceToSourceTargetPathPairListMap();
+    for (String deviceName : deviceToSourceTargetPathPairListMap.keySet()) {
+      boxValue.add(String.format("Device [%s]:", deviceName));
+      drawSourceTargetPath(
+          boxValue,
+          deviceToSourceTargetPathPairListMap.get(deviceName),
+          descriptor.getTargetDeviceToAlignedMap());
+    }
+    return render(node, boxValue, context);
+  }
+
+  private void drawSourceTargetPath(
+      List<String> boxValue,
+      List<Pair<String, PartialPath>> sourceTargetPathPairList,
+      Map<String, Boolean> targetDeviceToAlignedMap) {
+    for (Pair<String, PartialPath> sourceTargetPathPair : 
sourceTargetPathPairList) {
+      boxValue.add(
+          String.format(
+              "%s -> %s %s",
+              sourceTargetPathPair.left,
+              sourceTargetPathPair.right,
+              
targetDeviceToAlignedMap.get(sourceTargetPathPair.right.getDevice())
+                  ? "[ALIGNED]"
+                  : ""));
+    }
+  }
+
   private String printRegion(TRegionReplicaSet regionReplicaSet) {
     return String.format(
         "Partition: %s",

Reply via email to