You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/05/18 03:20:29 UTC

[iotdb] 01/02: fix some as tests

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

rong pushed a commit to branch iotdb-1022-v2
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 4a1724e63f398df7eb2c5a438aa11d55bf813aeb
Author: SteveYurongSu <st...@outlook.com>
AuthorDate: Mon May 17 23:04:13 2021 +0800

    fix some as tests
---
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |  2 +-
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |  7 ----
 .../qp/strategy/optimizer/ConcatPathOptimizer.java |  2 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java | 12 ++-----
 .../iotdb/db/query/expression/ResultColumn.java    | 11 ++++++-
 .../query/expression/unary/TimeSeriesOperand.java  |  4 ++-
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 37 +++++-----------------
 7 files changed, 26 insertions(+), 49 deletions(-)

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 e2db5a2..6bd6ce4 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
@@ -138,7 +138,7 @@ public abstract class QueryPlan extends PhysicalPlan {
 
   public String getColumnForDisplay(String columnForReader, int pathIndex)
       throws IllegalPathException {
-    return columnForReader;
+    return resultColumns.get(pathIndex).getResultColumnName();
   }
 
   public boolean isEnableRedirect() {
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 390bded..bd2cc94 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
@@ -187,13 +187,6 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
   }
 
   @Override
-  public String getColumnForDisplay(String columnForReader, int pathIndex) {
-    return !(resultColumns.get(pathIndex).getExpression() instanceof TimeSeriesOperand)
-        ? getExecutorByOriginalOutputColumnIndex(pathIndex).getExpression().toString()
-        : columnForReader;
-  }
-
-  @Override
   public boolean isRawQuery() {
     return false;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
index 42784e1..cc6a81c 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
@@ -83,7 +83,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
     return true;
   }
 
-  private void concatSelect(QueryOperator queryOperator) {
+  private void concatSelect(QueryOperator queryOperator) throws LogicalOptimizeException {
     if (queryOperator.isAlignByDevice() && !queryOperator.isLastQuery()) {
       return;
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
index d6a3169..4100964 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
@@ -101,16 +101,10 @@ public class LastQueryExecutor {
       if (lastPairList.get(i).right != null && lastPairList.get(i).right.getValue() != null) {
         TimeValuePair lastTimeValuePair = lastPairList.get(i).right;
         RowRecord resultRecord = new RowRecord(lastTimeValuePair.getTimestamp());
+
         Field pathField = new Field(TSDataType.TEXT);
-        if (selectedSeries.get(i).isTsAliasExists()) {
-          pathField.setBinaryV(new Binary(selectedSeries.get(i).getTsAlias()));
-        } else {
-          if (selectedSeries.get(i).isMeasurementAliasExists()) {
-            pathField.setBinaryV(new Binary(selectedSeries.get(i).getFullPathWithAlias()));
-          } else {
-            pathField.setBinaryV(new Binary(selectedSeries.get(i).getFullPath()));
-          }
-        }
+        pathField.setBinaryV(
+            new Binary(lastQueryPlan.getResultColumns().get(i).getResultColumnName()));
         resultRecord.addField(pathField);
 
         Field valueField = new Field(TSDataType.TEXT);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java b/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
index 93c2d27..52b99c4 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
@@ -43,9 +43,14 @@ public class ResultColumn {
     alias = null;
   }
 
-  public void concat(List<PartialPath> prefixPaths, List<ResultColumn> resultColumns) {
+  public void concat(List<PartialPath> prefixPaths, List<ResultColumn> resultColumns)
+      throws LogicalOptimizeException {
     List<Expression> resultExpressions = new ArrayList<>();
     expression.concat(prefixPaths, resultExpressions);
+    if (hasAlias() && 1 < resultExpressions.size()) {
+      throw new LogicalOptimizeException(
+          String.format("alias '%s' can only be matched with one time series", alias));
+    }
     for (Expression resultExpression : resultExpressions) {
       resultColumns.add(new ResultColumn(resultExpression, alias));
     }
@@ -70,6 +75,10 @@ public class ResultColumn {
     return expression;
   }
 
+  public boolean hasAlias() {
+    return alias != null;
+  }
+
   public String getAlias() {
     return alias;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
index 3886abc..fd01123 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
@@ -81,6 +81,8 @@ public class TimeSeriesOperand extends Expression {
 
   @Override
   public String toString() {
-    return path.toString();
+    return path.isTsAliasExists()
+        ? path.getTsAlias()
+        : path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.getFullPath();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 2e7b8c9..74704ac 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -83,7 +83,7 @@ import org.apache.iotdb.db.query.dataset.DirectAlignByTimeDataSet;
 import org.apache.iotdb.db.query.dataset.DirectNonAlignDataSet;
 import org.apache.iotdb.db.query.dataset.UDTFDataSet;
 import org.apache.iotdb.db.query.expression.ResultColumn;
-import org.apache.iotdb.db.query.expression.unary.FunctionExpression;
+import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
 import org.apache.iotdb.db.tools.watermark.GroupedLSBWatermarkEncoder;
 import org.apache.iotdb.db.tools.watermark.WatermarkEncoder;
 import org.apache.iotdb.db.utils.QueryDataSetUtils;
@@ -990,7 +990,6 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   }
 
   // wide means not align by device
-  @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
   private void getWideQueryHeaders(
       QueryPlan plan, List<String> respColumns, List<String> columnTypes)
       throws TException, MetadataException {
@@ -1000,16 +999,9 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     switch (plan.getOperatorType()) {
       case QUERY:
       case FILL:
-        for (PartialPath path : paths) {
-          String column;
-          if (path.isTsAliasExists()) {
-            column = path.getTsAlias();
-          } else {
-            column =
-                path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.getFullPath();
-          }
-          respColumns.add(column);
-          seriesTypes.add(getSeriesTypeByPath(path));
+        for (int i = 0; i < resultColumns.size(); ++i) {
+          respColumns.add(resultColumns.get(i).getResultColumnName());
+          seriesTypes.add(getSeriesTypeByPath(paths.get(i)));
         }
         break;
       case AGGREGATION:
@@ -1021,18 +1013,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
             aggregations.add(aggregations.get(0));
           }
         }
-        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()
-                    ? aggregations.get(i) + "(" + paths.get(i).getFullPathWithAlias() + ")"
-                    : aggregations.get(i) + "(" + paths.get(i).getFullPath() + ")";
-          }
-          respColumns.add(column);
+        for (ResultColumn resultColumn : resultColumns) {
+          respColumns.add(resultColumn.getResultColumnName());
         }
         seriesTypes = getSeriesTypesByPaths(paths, aggregations);
         break;
@@ -1040,12 +1022,9 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         seriesTypes = new ArrayList<>();
         UDTFPlan udtfPlan = (UDTFPlan) plan;
         for (int i = 0; i < paths.size(); i++) {
-          respColumns.add(
-              !(resultColumns.get(i).getExpression() instanceof FunctionExpression)
-                  ? paths.get(i).getFullPath()
-                  : udtfPlan.getExecutorByOriginalOutputColumnIndex(i).getExpression().toString());
+          respColumns.add(resultColumns.get(i).getResultColumnName());
           seriesTypes.add(
-              !(resultColumns.get(i).getExpression() instanceof FunctionExpression)
+              resultColumns.get(i).getExpression() instanceof TimeSeriesOperand
                   ? udtfPlan.getDataTypes().get(i)
                   : udtfPlan
                       .getExecutorByOriginalOutputColumnIndex(i)