From c9ff6f68d1a4cb9489880fa7678266af34bdf617 Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Fri, 3 Apr 2020 09:08:27 +0800 Subject: [PATCH] Fix Rewrite count distinct bitmap and hll order by bug (#3251) --- fe/src/main/java/org/apache/doris/analysis/QueryStmt.java | 4 ++-- .../test/java/org/apache/doris/planner/QueryPlanTest.java | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/analysis/QueryStmt.java b/fe/src/main/java/org/apache/doris/analysis/QueryStmt.java index 1c96f45acc..a54dd7bfec 100644 --- a/fe/src/main/java/org/apache/doris/analysis/QueryStmt.java +++ b/fe/src/main/java/org/apache/doris/analysis/QueryStmt.java @@ -269,8 +269,8 @@ public abstract class QueryStmt extends StatementBase { orderByElementsAfterAnalyzed = Lists.newArrayList(); for (int i = 0; i < orderByElements.size(); i++) { // rewrite count distinct - Expr rewritten = rewriteCountDistinctForBitmapOrHLL(orderingExprs.get(i), analyzer); - OrderByElement orderByElement = new OrderByElement(rewritten, isAscOrder.get(i), + orderingExprs.set(i, rewriteCountDistinctForBitmapOrHLL(orderingExprs.get(i), analyzer)); + OrderByElement orderByElement = new OrderByElement(orderingExprs.get(i), isAscOrder.get(i), nullsFirstParams.get(i)); orderByElementsAfterAnalyzed.add(orderByElement); } diff --git a/fe/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 1f383718b5..11d2553fd0 100644 --- a/fe/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -371,15 +371,18 @@ public class QueryPlanTest { explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql); Assert.assertTrue(explainString.contains("hll_union_agg")); + sql = "select count(distinct id2) from test.bitmap_table group by id order by count(distinct id2)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql); + Assert.assertTrue(explainString.contains("bitmap_union_count")); + sql = "select count(distinct id2) from test.bitmap_table having count(distinct id2) > 0"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql); Assert.assertTrue(explainString.contains("bitmap_union_count")); - sql = "select count(distinct id2) from test.bitmap_table order by count(distinct id2) > 0"; + sql = "select count(distinct id2) from test.bitmap_table order by count(distinct id2)"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql); Assert.assertTrue(explainString.contains("bitmap_union_count")); - ConnectContext.get().getSessionVariable().setRewriteCountDistinct(false); sql = "select count(distinct id2) from test.bitmap_table"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "explain " + sql);