This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 2944c36f025 [opt](exec) enable top opt in string type #31489 (#31771)
2944c36f025 is described below

commit 2944c36f025d1384040dfd390f25c964b44068ae
Author: HappenLee <happen...@hotmail.com>
AuthorDate: Tue Mar 5 17:45:38 2024 +0800

    [opt](exec) enable top opt in string type #31489 (#31771)
---
 be/src/runtime/runtime_predicate.cpp                      |  2 ++
 .../apache/doris/nereids/processor/post/TopNScanOpt.java  |  3 +--
 .../java/org/apache/doris/planner/OriginalPlanner.java    |  3 +--
 .../doris/nereids/postprocess/TopNRuntimeFilterTest.java  | 15 ---------------
 4 files changed, 4 insertions(+), 19 deletions(-)

diff --git a/be/src/runtime/runtime_predicate.cpp 
b/be/src/runtime/runtime_predicate.cpp
index d3deb748cae..075ae1d1157 100644
--- a/be/src/runtime/runtime_predicate.cpp
+++ b/be/src/runtime/runtime_predicate.cpp
@@ -76,6 +76,8 @@ Status RuntimePredicate::init(const PrimitiveType type, const 
bool nulls_first)
         _get_value_fn = get_double_value;
         break;
     }
+    case PrimitiveType::TYPE_CHAR:
+    case PrimitiveType::TYPE_VARCHAR:
     case PrimitiveType::TYPE_STRING: {
         _get_value_fn = get_string_value;
         break;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
index 1fb078fa643..458682273d1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
@@ -127,8 +127,7 @@ public class TopNScanOpt extends PlanPostProcessor {
         if (!firstKey.isColumnFromTable()) {
             return topN;
         }
-        if (firstKey.getDataType().isStringLikeType()
-                || firstKey.getDataType().isFloatType()
+        if (firstKey.getDataType().isFloatType()
                 || firstKey.getDataType().isDoubleType()) {
             return topN;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
index d171cfe67fc..c7e5a9a046f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OriginalPlanner.java
@@ -530,8 +530,7 @@ public class OriginalPlanner extends Planner {
                     && sortNode.getLimit() <= 
ConnectContext.get().getSessionVariable().topnOptLimitThreshold
                     && sortNode.getSortInfo().getOrigOrderingExprs().size() > 
0) {
                 Expr firstSortExpr = 
sortNode.getSortInfo().getOrigOrderingExprs().get(0);
-                if (firstSortExpr instanceof SlotRef && 
!firstSortExpr.getType().isStringType()
-                        && !firstSortExpr.getType().isFloatingPointType()) {
+                if (firstSortExpr instanceof SlotRef && 
!firstSortExpr.getType().isFloatingPointType()) {
                     OlapScanNode scanNode = (OlapScanNode) child;
                     if (scanNode.isDupKeysOrMergeOnWrite()) {
                         sortNode.setUseTopnOpt(true);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/postprocess/TopNRuntimeFilterTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/postprocess/TopNRuntimeFilterTest.java
index 0ac233898ad..95a407d1342 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/postprocess/TopNRuntimeFilterTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/postprocess/TopNRuntimeFilterTest.java
@@ -49,21 +49,6 @@ public class TopNRuntimeFilterTest extends SSBTestBase {
         
Assertions.assertTrue(localTopN.getPhysicalTopN().isEnableRuntimeFilter());
     }
 
-    // topn rf do not apply on string-like and float column
-    @Test
-    public void testNotUseTopNRf() {
-        String sql = "select * from customer order by c_name limit 5";
-        PlanChecker checker = PlanChecker.from(connectContext).analyze(sql)
-                .rewrite()
-                .implement();
-        PhysicalPlan plan = checker.getPhysicalPlan();
-        plan = new 
PlanPostProcessors(checker.getCascadesContext()).process(plan);
-        Assertions.assertInstanceOf(PhysicalDeferMaterializeTopN.class, 
plan.children().get(0).child(0));
-        PhysicalDeferMaterializeTopN<? extends Plan> localTopN
-                = (PhysicalDeferMaterializeTopN<? extends Plan>) 
plan.child(0).child(0);
-        
Assertions.assertFalse(localTopN.getPhysicalTopN().isEnableRuntimeFilter());
-    }
-
     @Test
     public void testNotUseTopNRfForComplexCase() {
         String sql = "select * from (select 1) tl join (select * from customer 
order by c_custkey limit 5) tb";


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to