You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2023/04/09 14:22:03 UTC
[iotdb] 01/02: fix
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/FixAliasBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6eb159741d0524a2ea44ae01223965b88db936c6
Author: liuminghui233 <54...@qq.com>
AuthorDate: Sun Apr 9 21:57:51 2023 +0800
fix
---
.../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 20 ++++++++++++--------
.../db/mpp/plan/analyze/ConcatPathRewriter.java | 8 --------
2 files changed, 12 insertions(+), 16 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 939417253c..cad032697d 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
@@ -432,26 +432,23 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
private Map<Integer, List<Pair<Expression, String>>> analyzeSelect(
Analysis analysis, QueryStatement queryStatement, ISchemaTree schemaTree) {
Map<Integer, List<Pair<Expression, String>>> outputExpressionMap = new HashMap<>();
+
boolean isGroupByLevel = queryStatement.isGroupByLevel();
ColumnPaginationController paginationController =
new ColumnPaginationController(
queryStatement.getSeriesLimit(),
queryStatement.getSeriesOffset(),
queryStatement.isLastQuery() || isGroupByLevel);
+
+ Set<String> aliasSet = new HashSet<>();
+
int columnIndex = 0;
for (ResultColumn resultColumn : queryStatement.getSelectComponent().getResultColumns()) {
List<Pair<Expression, String>> outputExpressions = new ArrayList<>();
+
boolean hasAlias = resultColumn.hasAlias();
List<Expression> resultExpressions =
ExpressionAnalyzer.removeWildcardInExpression(resultColumn.getExpression(), schemaTree);
- if (hasAlias
- && !queryStatement.isGroupByLevel()
- && !queryStatement.isGroupByTag()
- && resultExpressions.size() > 1) {
- throw new SemanticException(
- String.format(
- "alias '%s' can only be matched with one time series", resultColumn.getAlias()));
- }
for (Expression expression : resultExpressions) {
if (paginationController.hasCurOffset()) {
paginationController.consumeOffset();
@@ -472,6 +469,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
? expression.getExpressionString()
: null;
alias = hasAlias ? resultColumn.getAlias() : alias;
+ if (hasAlias) {
+ if (aliasSet.contains(alias)) {
+ throw new SemanticException(
+ String.format("alias '%s' can only be matched with one time series", alias));
+ }
+ aliasSet.add(alias);
+ }
analyzeExpression(analysis, expressionWithoutAlias);
outputExpressions.add(new Pair<>(expressionWithoutAlias, alias));
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java
index e5ffd54285..1dca937376 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java
@@ -20,7 +20,6 @@ package org.apache.iotdb.db.mpp.plan.analyze;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.statement.Statement;
@@ -105,16 +104,9 @@ public class ConcatPathRewriter {
// resultColumns after concat
List<ResultColumn> resultColumns = new ArrayList<>();
for (ResultColumn resultColumn : selectComponent.getResultColumns()) {
- boolean needAliasCheck = resultColumn.hasAlias() && !isGroupByLevel;
List<Expression> resultExpressions =
ExpressionAnalyzer.concatExpressionWithSuffixPaths(
resultColumn.getExpression(), prefixPaths, patternTree);
- if (needAliasCheck && resultExpressions.size() > 1) {
- throw new SemanticException(
- String.format(
- "alias '%s' can only be matched with one time series", resultColumn.getAlias()));
- }
-
for (Expression resultExpression : resultExpressions) {
resultColumns.add(
new ResultColumn(