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 <[email protected]>
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)

Reply via email to