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 be575f73c9..d2db18d72c 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.Expr; 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 class ExpressionColumnFilterConverter @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 75ab9a3df1..828363c258 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; @@ -807,7 +808,8 @@ public class ExpressionUtils { } 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()