diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionColumnFilterConverter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionColumnFilterConverter.java index be575f73c9213b..d2db18d72c4863 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionColumnFilterConverter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionColumnFilterConverter.java @@ -21,6 +21,7 @@ import org.apache.doris.analysis.LiteralExpr; import org.apache.doris.analysis.NullLiteral; import org.apache.doris.analysis.SlotRef; +import org.apache.doris.common.Config; import org.apache.doris.nereids.trees.expressions.ComparisonPredicate; import org.apache.doris.nereids.trees.expressions.EqualTo; import org.apache.doris.nereids.trees.expressions.Expression; @@ -99,6 +100,10 @@ public Expression visitComparisonPredicate(ComparisonPredicate predicate, Void u @Override public Expression visitInPredicate(InPredicate predicate, Void unused) { + if (predicate.getOptions().size() > Config.max_distribution_pruner_recursion_depth) { + return null; + } + List literals = predicate.getOptions().stream() .map(expr -> ((Expr) ((Literal) expr).toLegacyLiteral())) .collect(Collectors.toList()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java index f5b9634581015d..88b840787c6149 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java @@ -18,6 +18,7 @@ package org.apache.doris.nereids.util; import org.apache.doris.catalog.TableIf.TableType; +import org.apache.doris.common.Config; import org.apache.doris.common.MaterializedViewException; import org.apache.doris.common.NereidsException; import org.apache.doris.common.Pair; @@ -808,7 +809,8 @@ public static Optional checkAndMaybeCommute(Expression expression) { } if (expression instanceof InPredicate) { InPredicate predicate = ((InPredicate) expression); - if (!predicate.getCompareExpr().isSlot()) { + if (!predicate.getCompareExpr().isSlot() + || predicate.getOptions().size() > Config.max_distribution_pruner_recursion_depth) { return Optional.empty(); } return Optional.ofNullable(predicate.getOptions().stream()