This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch beyyes/debug-table in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6ee14bfa3294c0a0a64355ab2503d1d0dfd6d2a3 Author: Beyyes <[email protected]> AuthorDate: Sun May 19 22:11:23 2024 +0800 fix or using or expression predicate terms list bug in IndexScan --- .../planner/optimizations/IndexScan.java | 41 +++++++++++----------- .../iotdb/commons/schema/filter/impl/OrFilter.java | 2 +- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java index 70945da8185..67b11eb95fd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java @@ -157,31 +157,32 @@ public class IndexScan implements RelationalPlanOptimizer { private static List<Expression> getConjunctionExpressions( Expression predicate, TableScanNode node) { - if (predicate != null) { + if (predicate == null) { + return Collections.emptyList(); + } + + Set<String> idOrAttributeColumnNames = + node.getIdAndAttributeIndexMap().keySet().stream() + .map(Symbol::getName) + .collect(Collectors.toSet()); + if (predicate instanceof LogicalExpression + && ((LogicalExpression) predicate).getOperator() == LogicalExpression.Operator.AND) { List<Expression> resultExpressions = new ArrayList<>(); - Set<String> idOrAttributeColumnNames = - node.getIdAndAttributeIndexMap().keySet().stream() - .map(Symbol::getName) - .collect(Collectors.toSet()); - if (predicate instanceof LogicalExpression) { - for (Expression subExpression : ((LogicalExpression) predicate).getTerms()) { - if (Boolean.TRUE.equals( - new PredicatePushIntoIndexScanChecker(idOrAttributeColumnNames) - .process(subExpression))) { - resultExpressions.add(subExpression); - } - } - } else { - if (Boolean.FALSE.equals( - new PredicatePushIntoIndexScanChecker(idOrAttributeColumnNames).process(predicate))) { - resultExpressions = Collections.emptyList(); - } else { - resultExpressions = Collections.singletonList(predicate); + for (Expression subExpression : ((LogicalExpression) predicate).getTerms()) { + if (Boolean.TRUE.equals( + new PredicatePushIntoIndexScanChecker(idOrAttributeColumnNames) + .process(subExpression))) { + resultExpressions.add(subExpression); } } return resultExpressions; - } else { + } + + if (Boolean.FALSE.equals( + new PredicatePushIntoIndexScanChecker(idOrAttributeColumnNames).process(predicate))) { return Collections.emptyList(); + } else { + return Collections.singletonList(predicate); } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/OrFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/OrFilter.java index 1f57622719d..e740c23b2c9 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/OrFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/OrFilter.java @@ -57,7 +57,7 @@ public class OrFilter extends SchemaFilter { @Override public SchemaFilterType getSchemaFilterType() { - return SchemaFilterType.AND; + return SchemaFilterType.OR; } @Override
