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

hui pushed a commit to branch lmh/ABDwithView
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 7da3b7a6e5c4894904fc5b250d429c8d9618f323
Author: Minghui Liu <[email protected]>
AuthorDate: Tue Jun 27 14:23:52 2023 +0800

    fix timeseries alias
---
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 32 ++++++++++++----------
 .../db/mpp/plan/analyze/ExpressionAnalyzer.java    | 11 ++++++--
 ...isitor.java => ExpressionNormalizeVisitor.java} |  2 +-
 ...or.java => ExpressionSemiNormalizeVisitor.java} | 22 +--------------
 .../visitor/GetMeasurementExpressionVisitor.java   | 17 ++++++------
 .../plan/statement/component/GroupByComponent.java |  4 ++-
 .../plan/statement/component/HavingCondition.java  |  4 +--
 .../plan/statement/component/OrderByComponent.java |  4 ++-
 .../plan/statement/component/WhereCondition.java   |  4 +--
 9 files changed, 46 insertions(+), 54 deletions(-)

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 a980b0a4f52..0341ee2a4de 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
@@ -525,8 +525,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
                 .getGroupByLevelComponent()
                 .updateIsCountStar(resultColumn.getExpression());
           } else {
-            Expression expressionWithoutAlias =
-                ExpressionAnalyzer.removeAliasFromExpression(expression);
+            Expression expressionWithoutAlias = 
ExpressionAnalyzer.normalizeExpression(expression);
             if (hasAlias) {
               String alias = resultColumn.getAlias();
               if (aliasSet.contains(alias)) {
@@ -599,7 +598,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
               ExpressionAnalyzer.getMeasurementExpression(expression, 
analysis);
           measurementToDeviceSelectExpressions
               .computeIfAbsent(measurementExpression, key -> new 
LinkedHashMap<>())
-              .put(device.getFullPath(), expression);
+              .put(device.getFullPath(), 
ExpressionAnalyzer.semiNormalizeExpression(expression));
         }
       }
 
@@ -631,7 +630,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
 
           // add outputExpressions
           Expression measurementExpressionWithoutAlias =
-              
ExpressionAnalyzer.removeAliasFromExpression(measurementExpression);
+              
ExpressionAnalyzer.semiNormalizeExpression(measurementExpression);
           String outputColumnName =
               hasAlias ? resultColumn.getAlias() : 
measurementExpression.getOutputSymbol();
           analyzeExpression(analysis, measurementExpressionWithoutAlias);
@@ -642,10 +641,13 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
               deviceToSelectExpressionsOfOneMeasurement.entrySet()) {
             String deviceName = deviceNameSelectExpressionEntry.getKey();
             Expression expression = deviceNameSelectExpressionEntry.getValue();
-            analyzeExpression(analysis, expression);
+
+            Expression expressionWithoutAlias =
+                ExpressionAnalyzer.semiNormalizeExpression(expression);
+            analyzeExpression(analysis, expressionWithoutAlias);
             deviceToSelectExpressions
                 .computeIfAbsent(deviceName, key -> new LinkedHashSet<>())
-                .add(expression);
+                .add(expressionWithoutAlias);
           }
           paginationController.consumeLimit();
         } else {
@@ -677,7 +679,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     Expression havingExpression =
         ExpressionUtils.constructQueryFilter(
             conJunctions.stream().distinct().collect(Collectors.toList()));
-    havingExpression = 
ExpressionAnalyzer.removeAliasFromExpression(havingExpression);
+    havingExpression = 
ExpressionAnalyzer.normalizeExpression(havingExpression);
     TSDataType outputType = analyzeExpression(analysis, havingExpression);
     if (outputType != TSDataType.BOOLEAN) {
       throw new SemanticException(
@@ -835,10 +837,10 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
         ExpressionAnalyzer.searchAggregationExpressions(expression)) {
       Set<Expression> groupedExpressionSet =
           
groupedExpressionToRawExpressionsMap.get(groupedAggregationExpression).stream()
-              .map(ExpressionAnalyzer::removeAliasFromExpression)
+              .map(ExpressionAnalyzer::normalizeExpression)
               .collect(Collectors.toSet());
       Expression groupedAggregationExpressionWithoutAlias =
-          
ExpressionAnalyzer.removeAliasFromExpression(groupedAggregationExpression);
+          ExpressionAnalyzer.normalizeExpression(groupedAggregationExpression);
 
       analyzeExpression(analysis, groupedAggregationExpressionWithoutAlias);
       groupedExpressionSet.forEach(
@@ -852,7 +854,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
 
   private Pair<Expression, String> removeAliasFromExpression(
       Expression rawExpression, String rawAlias) {
-    Expression expressionWithoutAlias = 
ExpressionAnalyzer.removeAliasFromExpression(rawExpression);
+    Expression expressionWithoutAlias = 
ExpressionAnalyzer.normalizeExpression(rawExpression);
     String alias =
         !Objects.equals(expressionWithoutAlias, rawExpression)
             ? rawExpression.getExpressionString()
@@ -1089,7 +1091,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       Set<String> queriedDevices = new HashSet<>();
       for (Expression expression : sourceExpressionsUnderDevice) {
         
queriedDevices.add(ExpressionAnalyzer.getDeviceNameInSourceExpression(expression));
-        
actualSourceExpressions.add(ExpressionAnalyzer.removeAliasFromExpression(expression));
+        
actualSourceExpressions.add(ExpressionAnalyzer.normalizeExpression(expression));
       }
       if (queriedDevices.size() > 1) {
         throw new SemanticException(
@@ -1097,7 +1099,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       }
       if (actualSourceExpressions.size() < 
sourceExpressionsUnderDevice.size()) {
         throw new SemanticException(
-            "Views representing the same data source cannot be queried 
concurrently in ALIGN BY DEVICE queries.");
+            "Views or measurement aliases representing the same data source 
cannot be queried concurrently in ALIGN BY DEVICE queries.");
       }
       outputDeviceToQueriedDevicesMap.put(deviceName, new 
ArrayList<>(queriedDevices));
     }
@@ -1170,7 +1172,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     Expression whereExpression =
         ExpressionUtils.constructQueryFilter(
             conJunctions.stream().distinct().collect(Collectors.toList()));
-    whereExpression = 
ExpressionAnalyzer.removeAliasFromExpression(whereExpression);
+    whereExpression = ExpressionAnalyzer.normalizeExpression(whereExpression);
     TSDataType outputType = analyzeExpression(analysis, whereExpression);
     if (outputType != TSDataType.BOOLEAN) {
       throw new SemanticException(String.format(WHERE_WRONG_TYPE_ERROR_MSG, 
outputType));
@@ -1362,7 +1364,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
                 "%s in order by clause shouldn't refer to more than one 
timeseries.",
                 expressionForItem.getExpressionString()));
       }
-      expressionForItem = 
ExpressionAnalyzer.removeAliasFromExpression(expressions.get(0));
+      expressionForItem = 
ExpressionAnalyzer.normalizeExpression(expressions.get(0));
       TSDataType dataType = analyzeExpression(analysis, expressionForItem);
       if (!dataType.isComparable()) {
         throw new SemanticException(
@@ -1547,7 +1549,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       if (aggregationExpression != null && !aggregationExpression.isEmpty()) {
         throw new SemanticException("Aggregation expression shouldn't exist in 
group by clause");
       }
-      groupByExpression = 
ExpressionAnalyzer.removeAliasFromExpression(expressions.get(0));
+      groupByExpression = 
ExpressionAnalyzer.normalizeExpression(expressions.get(0));
     }
 
     if (windowType == WindowType.VARIATION_WINDOW) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
index afcfc133ba9..95ab38643e4 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
@@ -47,8 +47,9 @@ import 
org.apache.iotdb.db.mpp.plan.expression.unary.UnaryExpression;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.BindTypeForTimeSeriesOperandVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.CollectAggregationExpressionsVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.CollectSourceExpressionsVisitor;
+import 
org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionNormalizeVisitor;
+import 
org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionSemiNormalizeVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.GetMeasurementExpressionVisitor;
-import 
org.apache.iotdb.db.mpp.plan.expression.visitor.RemoveAliasFromExpressionVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.ReplaceRawPathWithGroupedPathVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.cartesian.BindSchemaForExpressionVisitor;
 import 
org.apache.iotdb.db.mpp.plan.expression.visitor.cartesian.BindSchemaForPredicateVisitor;
@@ -666,8 +667,12 @@ public class ExpressionAnalyzer {
    *
    * @return expression after removing alias
    */
-  public static Expression removeAliasFromExpression(Expression expression) {
-    return new RemoveAliasFromExpressionVisitor().process(expression, null);
+  public static Expression normalizeExpression(Expression expression) {
+    return new ExpressionNormalizeVisitor().process(expression, null);
+  }
+
+  public static Expression semiNormalizeExpression(Expression expression) {
+    return new ExpressionSemiNormalizeVisitor().process(expression, null);
   }
 
   /** Check for arithmetic expression, logical expression, UDF. Returns true 
if it exists. */
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionNormalizeVisitor.java
similarity index 96%
copy from 
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
copy to 
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionNormalizeVisitor.java
index 94cdecf6f31..d1a533429b6 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionNormalizeVisitor.java
@@ -28,7 +28,7 @@ import 
org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
 import java.util.ArrayList;
 import java.util.List;
 
-public class RemoveAliasFromExpressionVisitor extends ReconstructVisitor<Void> 
{
+public class ExpressionNormalizeVisitor extends ReconstructVisitor<Void> {
 
   @Override
   public Expression process(Expression expression, Void context) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionSemiNormalizeVisitor.java
similarity index 63%
rename from 
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
rename to 
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionSemiNormalizeVisitor.java
index 94cdecf6f31..274c6c31865 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/RemoveAliasFromExpressionVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ExpressionSemiNormalizeVisitor.java
@@ -19,23 +19,13 @@
 
 package org.apache.iotdb.db.mpp.plan.expression.visitor;
 
-import org.apache.iotdb.commons.path.MeasurementPath;
-import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
-import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class RemoveAliasFromExpressionVisitor extends ReconstructVisitor<Void> 
{
-
-  @Override
-  public Expression process(Expression expression, Void context) {
-    Expression resultExpression = expression.accept(this, context);
-    resultExpression.setViewPath(null);
-    return resultExpression;
-  }
+public class ExpressionSemiNormalizeVisitor extends ReconstructVisitor<Void> {
 
   @Override
   public Expression visitFunctionExpression(FunctionExpression 
functionExpression, Void context) {
@@ -46,14 +36,4 @@ public class RemoveAliasFromExpressionVisitor extends 
ReconstructVisitor<Void> {
         functionExpression.getFunctionAttributes(),
         childResult);
   }
-
-  @Override
-  public Expression visitTimeSeriesOperand(TimeSeriesOperand 
timeSeriesOperand, Void context) {
-    PartialPath rawPath = timeSeriesOperand.getPath();
-    PartialPath newPath = rawPath.copy();
-    if (newPath.isMeasurementAliasExists()) {
-      ((MeasurementPath) newPath).removeMeasurementAlias();
-    }
-    return new TimeSeriesOperand(newPath);
-  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/GetMeasurementExpressionVisitor.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/GetMeasurementExpressionVisitor.java
index ade126ffe8f..57676198504 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/GetMeasurementExpressionVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/GetMeasurementExpressionVisitor.java
@@ -60,13 +60,14 @@ public class GetMeasurementExpressionVisitor extends 
ReconstructVisitor<Analysis
   @Override
   public Expression visitTimeSeriesOperand(TimeSeriesOperand 
timeSeriesOperand, Analysis analysis) {
     MeasurementPath rawPath = (MeasurementPath) timeSeriesOperand.getPath();
-    PartialPath measurement = new PartialPath(rawPath.getMeasurement(), false);
-    MeasurementPath measurementWithSchema =
-        new MeasurementPath(measurement, rawPath.getMeasurementSchema());
-    if (rawPath.isMeasurementAliasExists()) {
-      measurementWithSchema.setMeasurementAlias(rawPath.getMeasurementAlias());
-    }
-    measurementWithSchema.setTagMap(rawPath.getTagMap());
-    return new TimeSeriesOperand(measurementWithSchema);
+    String measurementName =
+        rawPath.isMeasurementAliasExists()
+            ? rawPath.getMeasurementAlias()
+            : rawPath.getMeasurement();
+    MeasurementPath measurementPath =
+        new MeasurementPath(
+            new PartialPath(measurementName, false), 
rawPath.getMeasurementSchema());
+    measurementPath.setTagMap(rawPath.getTagMap());
+    return new TimeSeriesOperand(measurementPath);
   }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/GroupByComponent.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/GroupByComponent.java
index 2b3c96a9136..590fbad56a3 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/GroupByComponent.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/GroupByComponent.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.mpp.plan.statement.component;
 
 import org.apache.iotdb.db.mpp.execution.operator.window.WindowType;
+import org.apache.iotdb.db.mpp.plan.analyze.ExpressionAnalyzer;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.statement.StatementNode;
 
@@ -40,7 +41,8 @@ public abstract class GroupByComponent extends StatementNode {
   }
 
   public void setControlColumnExpression(Expression controlColumnExpression) {
-    this.controlColumnExpression = controlColumnExpression;
+    this.controlColumnExpression =
+        ExpressionAnalyzer.semiNormalizeExpression(controlColumnExpression);
   }
 
   public Expression getControlColumnExpression() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
index 6a7ab8912ee..5ce77865232 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
@@ -32,7 +32,7 @@ public class HavingCondition extends StatementNode {
 
   public HavingCondition(Expression predicate) {
     // cast functionName to lowercase in havingExpression
-    this.predicate = ExpressionAnalyzer.removeAliasFromExpression(predicate);
+    this.predicate = ExpressionAnalyzer.semiNormalizeExpression(predicate);
   }
 
   public Expression getPredicate() {
@@ -40,7 +40,7 @@ public class HavingCondition extends StatementNode {
   }
 
   public void setPredicate(Expression predicate) {
-    this.predicate = ExpressionAnalyzer.removeAliasFromExpression(predicate);
+    this.predicate = ExpressionAnalyzer.semiNormalizeExpression(predicate);
   }
 
   public String toSQLString() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/OrderByComponent.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/OrderByComponent.java
index 193b6cee205..8e16688d697 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/OrderByComponent.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/OrderByComponent.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.mpp.plan.statement.component;
 
+import org.apache.iotdb.db.mpp.plan.analyze.ExpressionAnalyzer;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.statement.StatementNode;
 
@@ -84,7 +85,8 @@ public class OrderByComponent extends StatementNode {
 
   public void addExpressionSortItem(SortItem sortItem) {
     this.sortItemList.add(sortItem);
-    this.sortItemExpressionList.add(sortItem.getExpression());
+    this.sortItemExpressionList.add(
+        ExpressionAnalyzer.semiNormalizeExpression(sortItem.getExpression()));
   }
 
   public List<SortItem> getSortItemList() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
index 4bba6613edb..cec2a81518b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
@@ -32,7 +32,7 @@ public class WhereCondition extends StatementNode {
 
   // cast functionName to lowercase in where predicate
   public WhereCondition(Expression predicate) {
-    this.predicate = ExpressionAnalyzer.removeAliasFromExpression(predicate);
+    this.predicate = ExpressionAnalyzer.semiNormalizeExpression(predicate);
   }
 
   public Expression getPredicate() {
@@ -40,7 +40,7 @@ public class WhereCondition extends StatementNode {
   }
 
   public void setPredicate(Expression predicate) {
-    this.predicate = ExpressionAnalyzer.removeAliasFromExpression(predicate);
+    this.predicate = ExpressionAnalyzer.semiNormalizeExpression(predicate);
   }
 
   public String toSQLString() {

Reply via email to