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:30 UTC
[iotdb] 02/02: fix aggregation * query 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 c8164b884541526bd18909fe8debc37f8af0906d
Author: SteveYurongSu <st...@outlook.com>
AuthorDate: Tue May 18 11:19:14 2021 +0800
fix aggregation * query tests
---
.../iotdb/db/qp/logical/crud/SelectOperator.java | 14 ++++++++++----
.../iotdb/db/qp/strategy/PhysicalGenerator.java | 9 +++++----
.../apache/iotdb/db/qp/utils/WildcardsRemover.java | 21 ++++++++++++++++++---
.../db/integration/IoTDBQueryMemoryControlIT.java | 2 +-
4 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
index 14d2c24..7030161 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
@@ -96,10 +96,16 @@ public final class SelectOperator extends Operator {
pathsCache = new ArrayList<>();
for (ResultColumn resultColumn : resultColumns) {
Expression expression = resultColumn.getExpression();
- pathsCache.add(
- expression instanceof TimeSeriesOperand
- ? ((TimeSeriesOperand) expression).getPath()
- : null);
+ if (expression instanceof TimeSeriesOperand) {
+ pathsCache.add(((TimeSeriesOperand) expression).getPath());
+ } else if (expression instanceof FunctionExpression
+ && expression.isAggregationFunctionExpression()) {
+ pathsCache.add(
+ ((TimeSeriesOperand) ((FunctionExpression) expression).getExpressions().get(0))
+ .getPath());
+ } else {
+ pathsCache.add(null);
+ }
}
}
return pathsCache;
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 9ea5d3a..6b3e691 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -462,7 +462,7 @@ public class PhysicalGenerator {
@Override
public QueryPlan transform(QueryOperator queryOperator) throws QueryProcessException {
- QueryPlan queryPlan;
+ AggregationPlan queryPlan;
if (queryOperator.hasTimeSeriesGeneratingFunction()) {
throw new QueryProcessException(
"User-defined and built-in hybrid aggregation is not supported.");
@@ -474,8 +474,9 @@ public class PhysicalGenerator {
} else {
queryPlan = new AggregationPlan();
}
- ((AggregationPlan) queryPlan)
- .setAggregations(queryOperator.getSelectOperator().getAggregationFunctions());
+
+ queryPlan.setPaths(queryOperator.getSelectOperator().getPaths());
+ queryPlan.setAggregations(queryOperator.getSelectOperator().getAggregationFunctions());
if (queryOperator.isGroupByTime()) {
GroupByTimePlan groupByTimePlan = (GroupByTimePlan) queryPlan;
@@ -500,7 +501,7 @@ public class PhysicalGenerator {
}
}
} else if (queryOperator.isGroupByLevel()) {
- ((AggregationPlan) queryPlan).setLevel(queryOperator.getLevel());
+ queryPlan.setLevel(queryOperator.getLevel());
try {
if (!verifyAllAggregationDataTypesEqual(queryOperator)) {
throw new QueryProcessException("Aggregate among unmatched data types");
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
index 41696af..580b3e4 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
@@ -65,6 +65,15 @@ public class WildcardsRemover {
consumed = 0;
}
+ public WildcardsRemover(ConcatPathOptimizer concatPathOptimizer) {
+ this.concatPathOptimizer = concatPathOptimizer;
+
+ maxDeduplicatedPathNum = Integer.MAX_VALUE - 1;
+ soffset = 0;
+ limit = maxDeduplicatedPathNum + 1;
+ consumed = 0;
+ }
+
public List<PartialPath> removeWildcardFrom(PartialPath path) throws LogicalOptimizeException {
try {
Pair<List<PartialPath>, Integer> pair =
@@ -108,7 +117,8 @@ public class WildcardsRemover {
boolean atLeastOneSeriesNotExisted = false;
for (Expression originExpression : expressions) {
List<Expression> actualExpressions = new ArrayList<>();
- originExpression.removeWildcards(this, actualExpressions);
+ originExpression.removeWildcards(
+ new WildcardsRemover(concatPathOptimizer), actualExpressions);
if (actualExpressions.isEmpty()) {
atLeastOneSeriesNotExisted = true;
break;
@@ -122,16 +132,21 @@ public class WildcardsRemover {
List<List<Expression>> actualExpressions = new ArrayList<>();
ConcatPathOptimizer.cartesianProduct(
extendedExpressions, actualExpressions, 0, new ArrayList<>());
- for (@SuppressWarnings("squid:S1481") List<Expression> ignored : actualExpressions) {
+
+ List<List<Expression>> splitExpressions = new ArrayList<>();
+ for (List<Expression> actualExpression : actualExpressions) {
if (offset != 0) {
--offset;
+ continue;
} else if (limit != 0) {
--limit;
} else {
break;
}
+ splitExpressions.add(actualExpression);
}
- return actualExpressions;
+ consumed += actualExpressions.size();
+ return splitExpressions;
}
/** @return should break the loop or not */
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java
index 05e3f14..6d863e8 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java
@@ -170,7 +170,7 @@ public class IoTDBQueryMemoryControlIT {
statement.execute(
"select count(wf01.*), avg(wf02.*), sum(wf03.*) from root.ln slimit 5 soffset 7");
- resultSetMetaData = statement.getResultSet().getMetaData();
+ ResultSetMetaData resultSetMetaData = statement.getResultSet().getMetaData();
assertEquals(5, resultSetMetaData.getColumnCount());
for (int i = 1; i < 3 + 1; ++i) {
assertTrue(resultSetMetaData.getColumnName(i).contains("root.ln.wf02.wt0"));