Cherry-picked from #51472 Co-authored-by: Pxl <xl@selectdb.com>
This commit is contained in:
committed by
GitHub
parent
1ee58b216b
commit
c9623c32f0
@ -2753,9 +2753,9 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla
|
||||
if (sortExpr instanceof SlotRef) {
|
||||
SlotRef slotRef = (SlotRef) sortExpr;
|
||||
if (sortColumn.equals(slotRef.getColumn())) {
|
||||
// ORDER BY DESC NULLS FIRST can not be optimized to only read file tail,
|
||||
// since NULLS is at file head but data is at tail
|
||||
if (sortColumn.isAllowNull() && nullsFirsts.get(i) && !isAscOrders.get(i)) {
|
||||
// [ORDER BY DESC NULLS FIRST] or [ORDER BY ASC NULLS LAST] can not be optimized
|
||||
// to only read file tail, since NULLS is at file head but data is at tail
|
||||
if (sortColumn.isAllowNull() && nullsFirsts.get(i) != isAscOrders.get(i)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -1235,9 +1235,9 @@ public class OlapScanNode extends ScanNode {
|
||||
if (sortExpr instanceof SlotRef) {
|
||||
SlotRef slotRef = (SlotRef) sortExpr;
|
||||
if (tableKey.equals(slotRef.getColumn())) {
|
||||
// ORDER BY DESC NULLS FIRST can not be optimized to only read file tail,
|
||||
// since NULLS is at file head but data is at tail
|
||||
if (tableKey.isAllowNull() && nullsFirsts.get(i) && !isAscOrders.get(i)) {
|
||||
// [ORDER BY DESC NULLS FIRST] or [ORDER BY ASC NULLS LAST] can not be optimized
|
||||
// to only read file tail, since NULLS is at file head but data is at tail
|
||||
if (tableKey.isAllowNull() && (nullsFirsts.get(i) != isAscOrders.get(i))) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -0,0 +1,129 @@
|
||||
-- This file is automatically generated. You should know what you did if you want to edit this
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
-3 -3 \N c
|
||||
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
-3 -3 \N c
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
-3 -3 \N c
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
3 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
-3 -3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
3 3 \N c
|
||||
2 2 2 b
|
||||
1 1 1 a
|
||||
-3 -3 \N c
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
3 3 \N c
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
3 3 \N c
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
3 3 \N c
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
-3 -3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
3 3 \N c
|
||||
|
||||
-- !select --
|
||||
\N 3 \N c
|
||||
-3 -3 \N c
|
||||
1 1 1 a
|
||||
2 2 2 b
|
||||
3 3 \N c
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
suite("test_orderby_limit") {
|
||||
sql "drop table if exists d_table;"
|
||||
sql """
|
||||
create table d_table (
|
||||
k1 int null,
|
||||
k2 int not null,
|
||||
k3 bigint null,
|
||||
k4 varchar(100) null
|
||||
)
|
||||
duplicate key (k1,k2,k3)
|
||||
distributed BY hash(k1) buckets 3
|
||||
properties("replication_num" = "1");
|
||||
"""
|
||||
sql "insert into d_table select 1,1,1,'a';"
|
||||
sql "insert into d_table select 2,2,2,'b';"
|
||||
sql "insert into d_table select -3,-3,null,'c';"
|
||||
sql "insert into d_table select 3,3,null,'c';"
|
||||
sql "insert into d_table select null,3,null,'c';"
|
||||
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 1;"
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 2;"
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 3;"
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 4;"
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 5;"
|
||||
qt_select "select * from d_table order by k1 desc nulls last limit 6;"
|
||||
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 1;"
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 2;"
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 3;"
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 4;"
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 5;"
|
||||
qt_select "select * from d_table order by k1 desc nulls first limit 6;"
|
||||
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 1;"
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 2;"
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 3;"
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 4;"
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 5;"
|
||||
qt_select "select * from d_table order by k1 asc nulls last limit 6;"
|
||||
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 1;"
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 2;"
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 3;"
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 4;"
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 5;"
|
||||
qt_select "select * from d_table order by k1 asc nulls first limit 6;"
|
||||
}
|
||||
Reference in New Issue
Block a user