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

panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new fa7b476b6ba [Opt](exec) enable top opt in string type (#31489)
fa7b476b6ba is described below

commit fa7b476b6babd5466fae7a2a40617bcf87c3e123
Author: HappenLee <happen...@hotmail.com>
AuthorDate: Wed Feb 28 17:34:10 2024 +0800

    [Opt](exec) enable top opt in string type (#31489)
    
    enable top opt in string type
---
 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 5141b65978d..9e300dab4a0 100644
--- a/be/src/runtime/runtime_predicate.cpp
+++ b/be/src/runtime/runtime_predicate.cpp
@@ -75,6 +75,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 89d396611c5..fab4e34a12f 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 36087176f40..cf93be1611c 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
@@ -543,8 +543,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