diff --git a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp index 7ac8ca6143bb5984c2d6dcbae8f40b04c39888a6..bd2ca6288951bacfffa101943c5fbd0382dbd30b 100644 --- a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp +++ b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp @@ -1523,7 +1523,10 @@ MarkRanges MergeTreeDataSelectExecutor::markRangesFromPKRange( continue; } - stack.emplace_back(check_order[1].begin, check_order[1].end); + if (may_be_true_in_range(check_order[1])) + stack.emplace_back(check_order[1].begin, check_order[1].end); + else + break; // No mark range would suffice } } diff --git a/tests/queries/0_stateless/01460_mark_inclusion_search_crash.reference b/tests/queries/0_stateless/01460_mark_inclusion_search_crash.reference new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/queries/0_stateless/01460_mark_inclusion_search_crash.sql b/tests/queries/0_stateless/01460_mark_inclusion_search_crash.sql new file mode 100644 index 0000000000000000000000000000000000000000..148ecdab490eea9bc93fd50c6615f9cd69fbb964 --- /dev/null +++ b/tests/queries/0_stateless/01460_mark_inclusion_search_crash.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS pk; + +CREATE TABLE pk (d Date DEFAULT '2000-01-01', x DateTime, y UInt64, z UInt64) ENGINE = MergeTree() PARTITION BY d ORDER BY (toStartOfMinute(x), y, z) SETTINGS index_granularity_bytes=19, min_index_granularity_bytes=1, write_final_mark = 0; -- one row granule + +INSERT INTO pk (x, y, z) VALUES (1, 11, 1235), (2, 11, 4395), (3, 22, 3545), (4, 22, 6984), (5, 33, 4596), (61, 11, 4563), (62, 11, 4578), (63, 11, 3572), (64, 22, 5786), (65, 22, 5786), (66, 22, 2791), (67, 22, 2791), (121, 33, 2791), (122, 33, 2791), (123, 33, 1235), (124, 44, 4935), (125, 44, 4578), (126, 55, 5786), (127, 55, 2791), (128, 55, 1235); + +SET max_block_size = 1; +SET max_rows_to_read = 5; + +SELECT toUInt32(x), y, z FROM pk WHERE (x >= toDateTime(100000)) AND (x <= toDateTime(3)); + +DROP TABLE IF EXISTS pk;