Skip to content

Commit 384dc52

Browse files
Backport #95072 to 25.12: Fix crash in getTopKMarks when limit is zero
1 parent f2dd3fc commit 384dc52

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

src/Storages/MergeTree/MergeTreeIndexMinMax.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ void MergeTreeIndexBulkGranulesMinMax::deserializeBinary(size_t granule_num, Rea
267267

268268
void MergeTreeIndexBulkGranulesMinMax::getTopKMarks(size_t n, std::vector<MinMaxGranule> & result)
269269
{
270+
if (n == 0)
271+
return;
272+
270273
if (n >= granules.size())
271274
{
272275
result.insert(result.end(), granules.begin(), granules.end());
@@ -301,6 +304,9 @@ void MergeTreeIndexBulkGranulesMinMax::getTopKMarks(int direction,
301304
const std::vector<std::vector<MinMaxGranule>> & parts,
302305
std::vector<MarkRanges> & result)
303306
{
307+
if (n == 0)
308+
return;
309+
304310
std::priority_queue<MinMaxGranuleItem> queue;
305311

306312
for (size_t part_index = 0; part_index < parts.size(); ++part_index)

tests/queries/0_stateless/03807_top_k_limit_zero.reference

Whitespace-only changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-- Test for crash when LIMIT 0 is used with use_skip_indexes_for_top_k
2+
-- Regression test for https://github.com/ClickHouse/ClickHouse/issues/95065
3+
4+
DROP TABLE IF EXISTS tab;
5+
6+
CREATE TABLE tab
7+
(
8+
id UInt32,
9+
v1 UInt32,
10+
INDEX v1idx v1 TYPE minmax GRANULARITY 1
11+
) Engine = MergeTree ORDER BY id SETTINGS index_granularity = 64;
12+
13+
INSERT INTO tab SELECT number, number FROM numbers(1000);
14+
15+
SELECT id, v1 FROM tab ORDER BY v1 DESC NULLS LAST LIMIT 0 SETTINGS use_skip_indexes_for_top_k = 1;
16+
SELECT id, v1 FROM tab ORDER BY v1 ASC LIMIT 0 SETTINGS use_skip_indexes_for_top_k = 1;
17+
18+
DROP TABLE tab;

0 commit comments

Comments
 (0)