diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java index d8f1781bdaf6..28fb15bad6ac 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java @@ -275,6 +275,9 @@ public Analysis visitExplainAnalyze( @Override public Analysis visitQuery(QueryStatement queryStatement, MPPQueryContext context) { + // used for retry + queryStatement.setWhereConditionBackToOriginal(); + Analysis analysis = new Analysis(); analysis.setLastLevelUseWildcard(queryStatement.isLastLevelUseWildcard()); @@ -524,6 +527,8 @@ private void analyzeGlobalTimeFilter(Analysis analysis, QueryStatement queryStat WhereCondition whereCondition = queryStatement.getWhereCondition(); Expression predicate = whereCondition.getPredicate(); + WhereCondition originalWhereCondition = new WhereCondition(predicate); + Pair resultPair = PredicateUtils.extractGlobalTimePredicate(predicate, true, true); globalTimePredicate = resultPair.left; @@ -540,6 +545,8 @@ private void analyzeGlobalTimeFilter(Analysis analysis, QueryStatement queryStat } else { whereCondition.setPredicate(predicate); } + + queryStatement.setOriginalWhereCondition(originalWhereCondition); } analysis.setGlobalTimePredicate(globalTimePredicate); analysis.setHasValueFilter(hasValueFilter); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java index 8c199f6c19c4..151bd6b96603 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java @@ -82,6 +82,10 @@ public class QueryStatement extends AuthorityInformationStatement { private SelectComponent selectComponent; private FromComponent fromComponent; private WhereCondition whereCondition; + + // used for retry + private WhereCondition originalWhereCondition; + private HavingCondition havingCondition; // row limit for result set. The default value is 0, which means no limit @@ -241,6 +245,16 @@ public void setWhereCondition(WhereCondition whereCondition) { this.whereCondition = whereCondition; } + public void setWhereConditionBackToOriginal() { + if (originalWhereCondition != null) { + this.whereCondition = originalWhereCondition; + } + } + + public void setOriginalWhereCondition(WhereCondition originalWhereCondition) { + this.originalWhereCondition = originalWhereCondition; + } + public boolean hasHaving() { return havingCondition != null; }