This is an automated email from the ASF dual-hosted git repository. morrysnow 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 8748f65a1b [fix](nereids)support nulls first/last in order by clause (#15530) 8748f65a1b is described below commit 8748f65a1ba0f9bb70520a66d0709fe1629d95c8 Author: starocean999 <40539150+starocean...@users.noreply.github.com> AuthorDate: Tue Jan 3 14:56:00 2023 +0800 [fix](nereids)support nulls first/last in order by clause (#15530) --- .../antlr4/org/apache/doris/nereids/DorisParser.g4 | 2 +- .../doris/nereids/parser/LogicalPlanBuilder.java | 3 +- .../data/query_p0/keyword/order_group.out | 55 ++++++++++++++++++++++ .../suites/query_p0/keyword/order_group.groovy | 9 ++++ 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index e4b28a0069..6b199654d8 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -166,7 +166,7 @@ sortClause ; sortItem - : expression ordering = (ASC | DESC)? + : expression ordering = (ASC | DESC)? (NULLS (FIRST | LAST))? ; limitClause diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 551a594ca6..f69d1a86ce 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -1076,8 +1076,7 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> { public OrderKey visitSortItem(SortItemContext ctx) { return ParserUtils.withOrigin(ctx, () -> { boolean isAsc = ctx.DESC() == null; - // TODO(wj): isNullFirst - boolean isNullFirst = true; + boolean isNullFirst = ctx.LAST() == null; Expression expression = typedVisit(ctx.expression()); return new OrderKey(expression, isAsc, isNullFirst); }); diff --git a/regression-test/data/query_p0/keyword/order_group.out b/regression-test/data/query_p0/keyword/order_group.out index 9445f24208..5a46327a8b 100644 --- a/regression-test/data/query_p0/keyword/order_group.out +++ b/regression-test/data/query_p0/keyword/order_group.out @@ -1392,3 +1392,58 @@ true 0.1 -- !group1 -- 123.123000000 + +-- !orderBy_withNull_3 -- +\N \N +\N 15 +\N 14 +\N 13 +\N 12 +\N 11 +\N 10 +\N 9 +\N 8 +\N 7 +\N 6 +\N 5 +\N 4 +\N 3 +\N 2 +\N 1 + +-- !orderBy_withNull_3 -- +\N 15 +\N 14 +\N 13 +\N 12 +\N 11 +\N 10 +\N 9 +\N 8 +\N 7 +\N 6 +\N 5 +\N 4 +\N 3 +\N 2 +\N 1 +\N \N + +-- !orderBy_withNull_3 -- +\N \N +\N 15 +\N 14 +\N 13 +\N 12 +\N 11 +\N 10 +\N 9 +\N 8 +\N 7 +\N 6 +\N 5 +\N 4 +\N 3 +\N 2 +\N 1 + diff --git a/regression-test/suites/query_p0/keyword/order_group.groovy b/regression-test/suites/query_p0/keyword/order_group.groovy index 6e6d3bc9b7..6028e5a529 100644 --- a/regression-test/suites/query_p0/keyword/order_group.groovy +++ b/regression-test/suites/query_p0/keyword/order_group.groovy @@ -211,4 +211,13 @@ suite("order_group", "query,p0") { qt_group31 "select count(*) from ${tableName1} where (k11='2015-03-13 12:36:38' or k11 = '2000-01-01 00:00:00')\ and k5 is not null group by k1%2, k2%2, k3%3, k4%3, k11%2 order by count(*)" qt_group1 "select min(k5) from ${tableName1}" + qt_orderBy_withNull_3 " select a.k1 ak1, b.k1 bk1 from ${tableName1} a \ + right join ${tableName2} b on a.k1=b.k1 and b.k1>10 \ + order by bk1 desc nulls first, ak1" + qt_orderBy_withNull_3 " select a.k1 ak1, b.k1 bk1 from ${tableName1} a \ + right join ${tableName2} b on a.k1=b.k1 and b.k1>10 \ + order by bk1 desc nulls last, ak1" + qt_orderBy_withNull_3 " select a.k1 ak1, b.k1 bk1 from ${tableName1} a \ + right join ${tableName2} b on a.k1=b.k1 and b.k1>10 \ + order by bk1 desc, ak1" } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org