From 228f78b80d8d4b6717b509473200724aefe2a34c Mon Sep 17 00:00:00 2001 From: Sun Chenyang Date: Tue, 13 Aug 2024 10:57:53 +0800 Subject: [PATCH] [fix] (nereids) fix Match Expreesion in filter estimation (#39050) (#39215) ## Proposed changes pick from master #39050 --- .../doris/nereids/stats/FilterEstimation.java | 10 ++- .../inverted_index_p0/test_or_not_match.out | 5 ++ .../test_or_not_match.groovy | 69 +++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 regression-test/data/inverted_index_p0/test_or_not_match.out create mode 100644 regression-test/suites/inverted_index_p0/test_or_not_match.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java index b8e08086d6..bda5330c8e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java @@ -34,6 +34,7 @@ import org.apache.doris.nereids.trees.expressions.IsNull; import org.apache.doris.nereids.trees.expressions.LessThan; import org.apache.doris.nereids.trees.expressions.LessThanEqual; import org.apache.doris.nereids.trees.expressions.Like; +import org.apache.doris.nereids.trees.expressions.Match; import org.apache.doris.nereids.trees.expressions.Not; import org.apache.doris.nereids.trees.expressions.NullSafeEqual; import org.apache.doris.nereids.trees.expressions.Or; @@ -54,6 +55,8 @@ import org.apache.doris.statistics.StatisticsBuilder; import com.google.common.base.Preconditions; import com.google.common.collect.Sets; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; @@ -74,6 +77,7 @@ public class FilterEstimation extends ExpressionVisitor aggSlots; private boolean isOnBaseTable = false; @@ -486,7 +490,8 @@ public class FilterEstimation extends ExpressionVisitor + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertTrue(json.NumberLoadedRows > 0 && json.LoadBytes > 0) + } + } + for (int i = 0; i < 10; i++) { + sql "select request from ${tableName} where request like '1.0' or not request MATCH 'GETA';" + } + + sql "set enable_nereids_planner = true" + sql "set enable_fallback_to_original_planner = false" + + qt_sql "select request from ${tableName} where request like '1.0' or not request MATCH 'GETA' order by request limit 2;" +}