Skip to content

Commit 79ba8ea

Browse files
Backport ClickHouse#86906 to 25.8: Fix seeking at the end of the decompressed block
1 parent a631115 commit 79ba8ea

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/IO/ReadBuffer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,15 @@ bool ReadBuffer::next()
107107
}
108108
else
109109
{
110+
/// It might happen that we need to skip all data in the buffer,
111+
/// in this case we should call next() one more time to load new data.
112+
if (nextimpl_working_buffer_offset == working_buffer.size())
113+
{
114+
pos = working_buffer.end();
115+
nextimpl_working_buffer_offset = 0;
116+
return next();
117+
}
118+
110119
pos = working_buffer.begin() + std::min(nextimpl_working_buffer_offset, working_buffer.size());
111120
chassert(position() < working_buffer.end());
112121
}

tests/queries/0_stateless/03620_json_advanced_shared_data_seek_bug.reference

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
set use_variant_as_common_type = 1;
2+
3+
drop table if exists test;
4+
create table test (id UInt64, json JSON(max_dynamic_paths=2, a.b.c UInt32)) engine=MergeTree order by id settings min_rows_for_wide_part=1000000000, min_bytes_for_wide_part=10000000000, index_granularity = 39547, object_serialization_version = 'v3', object_shared_data_serialization_version = 'advanced', object_shared_data_serialization_version_for_zero_level_parts = 'advanced', object_shared_data_buckets_for_compact_part = 3, object_shared_data_buckets_for_wide_part = 1, dynamic_serialization_version = 'v3';
5+
6+
insert into test select number, number < 500000 ? toJSONString(map('a.b.c', number, 'a.b.d', number::UInt32, 'a.b.e', 'str_' || toString(number))) : toJSONString(map('a.b.c', number, 'a.b.d', number::UInt32, 'a.b.e', 'str_' || toString(number), 'b.b._' || toString(number % 5), number::UInt32)) from numbers(400000, 200000);
7+
8+
select json.b.b.`_1`.:String from test format Null settings max_threads=1;
9+
drop table test;

0 commit comments

Comments
 (0)