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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]