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