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)
