You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2021/03/17 09:32:00 UTC

[iotdb] 01/02: abstract method to getColumnForReaderAndDisplay

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

xiangweiwei pushed a commit to branch optimizeDDP
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 36e3b5eb8a94b1a0a5e68a36aba55c5a4490a1a2
Author: Alima777 <wx...@gmail.com>
AuthorDate: Wed Mar 17 17:10:54 2021 +0800

    abstract method to getColumnForReaderAndDisplay
---
 .../iotdb/db/qp/physical/crud/AggregationPlan.java | 24 ++++++++++++
 .../iotdb/db/qp/physical/crud/QueryPlan.java       | 16 ++++++++
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |  5 +++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    | 44 +++-------------------
 4 files changed, 50 insertions(+), 39 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
index b91b6db..4e523b2 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/AggregationPlan.java
@@ -109,4 +109,28 @@ public class AggregationPlan extends RawDataQueryPlan {
           getOperatorType().name() + " doesn't support disable align clause.");
     }
   }
+
+  @Override
+  public String getColumnForReaderFromPath(int pathIndex) {
+    String columnForReader = super.getColumnForReaderFromPath(pathIndex);
+    if (columnForReader == null) {
+      columnForReader = this.getAggregations().get(pathIndex) + "(" + columnForReader + ")";
+    }
+    return columnForReader;
+  }
+
+  @Override
+  public String getColumnForDisplay(String columnForReader, int pathIndex)
+      throws IllegalPathException {
+    String columnForDisplay = columnForReader;
+    if (level >= 0) {
+      PartialPath path = paths.get(pathIndex);
+      String aggregatePath =
+          path.isMeasurementAliasExists()
+              ? FilePathUtils.generatePartialPathByLevel(path.getFullPathWithAlias(), level)
+              : FilePathUtils.generatePartialPathByLevel(path.toString(), level);
+      columnForDisplay = aggregations.get(pathIndex) + "(" + aggregatePath + ")";
+    }
+    return columnForDisplay;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
index 5dd756a..12ab4cd 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.qp.physical.crud;
 
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator;
@@ -111,4 +112,19 @@ public abstract class QueryPlan extends PhysicalPlan {
   public void setAscending(boolean ascending) {
     this.ascending = ascending;
   }
+
+  public String getColumnForReaderFromPath(int pathIndex) {
+    PartialPath path = paths.get(pathIndex);
+    String columnForReader = path.isTsAliasExists() ? path.getTsAlias() : null;
+    if (columnForReader == null) {
+      columnForReader =
+          path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.toString();
+    }
+    return columnForReader;
+  }
+
+  public String getColumnForDisplay(String columnForReader, int pathIndex)
+      throws IllegalPathException {
+    return columnForReader;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
index 080d060..8a587fc 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
@@ -130,4 +130,9 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
   public void setPathNameToReaderIndex(Map<String, Integer> pathNameToReaderIndex) {
     this.pathNameToReaderIndex = pathNameToReaderIndex;
   }
+
+  @Override
+  public String getColumnForDisplay(String columnForReader, int pathIndex) {
+    return this.getExecutorByOriginalOutputColumnIndex(pathIndex).getContext().getColumnName();
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index c99f5dc..ce4f3b8 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -22,7 +22,6 @@ import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.LogicalOperatorException;
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.PathNumOverLimitException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.runtime.SQLParserException;
 import org.apache.iotdb.db.metadata.PartialPath;
@@ -125,7 +124,6 @@ import org.apache.iotdb.db.qp.physical.sys.StopTriggerPlan;
 import org.apache.iotdb.db.qp.physical.sys.TracingPlan;
 import org.apache.iotdb.db.query.udf.core.context.UDFContext;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.FilePathUtils;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
@@ -825,8 +823,7 @@ public class PhysicalGenerator {
   }
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
-  private void deduplicate(QueryPlan queryPlan)
-      throws MetadataException, PathNumOverLimitException {
+  private void deduplicate(QueryPlan queryPlan) throws MetadataException {
     // generate dataType first
     List<PartialPath> paths = queryPlan.getPaths();
     List<TSDataType> dataTypes = getSeriesTypes(paths);
@@ -843,12 +840,7 @@ public class PhysicalGenerator {
     if (queryPlan instanceof LastQueryPlan) {
       for (int i = 0; i < paths.size(); i++) {
         PartialPath path = paths.get(i);
-        String column;
-        if (path.isTsAliasExists()) {
-          column = path.getTsAlias();
-        } else {
-          column = path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.toString();
-        }
+        String column = queryPlan.getColumnForReaderFromPath(i);
         if (!columnForReaderSet.contains(column)) {
           TSDataType seriesType = dataTypes.get(i);
           rawDataQueryPlan.addDeduplicatedPaths(path);
@@ -881,18 +873,7 @@ public class PhysicalGenerator {
       PartialPath originalPath = indexedPath.left;
       Integer originalIndex = indexedPath.right;
 
-      String columnForReader = originalPath.isTsAliasExists() ? originalPath.getTsAlias() : null;
-      if (columnForReader == null) {
-        columnForReader =
-            originalPath.isMeasurementAliasExists()
-                ? originalPath.getFullPathWithAlias()
-                : originalPath.toString();
-        if (queryPlan instanceof AggregationPlan) {
-          columnForReader =
-              queryPlan.getAggregations().get(originalIndex) + "(" + columnForReader + ")";
-        }
-      }
-
+      String columnForReader = queryPlan.getColumnForReaderFromPath(originalIndex);
       boolean isUdf = queryPlan instanceof UDTFPlan && paths.get(originalIndex) == null;
 
       if (!columnForReaderSet.contains(columnForReader)) {
@@ -907,23 +888,8 @@ public class PhysicalGenerator {
         columnForReaderSet.add(columnForReader);
       }
 
-      String columnForDisplay =
-          isUdf
-              ? ((UDTFPlan) queryPlan)
-                  .getExecutorByOriginalOutputColumnIndex(originalIndex)
-                  .getContext()
-                  .getColumnName()
-              : columnForReader;
-      if (queryPlan instanceof AggregationPlan && ((AggregationPlan) queryPlan).getLevel() >= 0) {
-        String aggregatePath =
-            originalPath.isMeasurementAliasExists()
-                ? FilePathUtils.generatePartialPathByLevel(
-                    originalPath.getFullPathWithAlias(), ((AggregationPlan) queryPlan).getLevel())
-                : FilePathUtils.generatePartialPathByLevel(
-                    originalPath.toString(), ((AggregationPlan) queryPlan).getLevel());
-        columnForDisplay =
-            queryPlan.getAggregations().get(originalIndex) + "(" + aggregatePath + ")";
-      }
+      String columnForDisplay = queryPlan.getColumnForDisplay(columnForReader, originalIndex);
+
       if (!columnForDisplaySet.contains(columnForDisplay)) {
         queryPlan.addPathToIndex(columnForDisplay, queryPlan.getPathToIndex().size());
         if (queryPlan instanceof UDTFPlan) {