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)