This is an automated email from the ASF dual-hosted git repository. zhangchen pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit f4456fc0e91ba8dcb757db5f23238d87f7ee909b Author: Xin Liao <liaoxin...@126.com> AuthorDate: Mon Apr 3 09:14:05 2023 +0800 [fix](load) handle null map right in OlapDataConvertor (#18236) The offset of _nullmap and _value are inconsistent in OlapDataConvertor, so the obtained null flag is incorrect when calling get_ data_ at function. When the key column or sequence column has null values, the encoding of the short key index or primary key index may be wrong. This was introduced by #10883 #10925. --- be/src/vec/olap/olap_data_convertor.cpp | 17 +++++++++-------- be/src/vec/olap/olap_data_convertor.h | 16 ++++++++-------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/be/src/vec/olap/olap_data_convertor.cpp b/be/src/vec/olap/olap_data_convertor.cpp index e9b4c8fd24..476f20c9a1 100644 --- a/be/src/vec/olap/olap_data_convertor.cpp +++ b/be/src/vec/olap/olap_data_convertor.cpp @@ -172,8 +172,9 @@ void OlapBlockDataConvertor::OlapColumnDataConvertorBase::clear_source_column() _nullmap = nullptr; } -// This should be called only in SegmentWriter. If you want to access nullmap in Convertor, -// use `_nullmap` directly. +// Obtain the converted nullmap with an offset of _row_pos. +// This should be called only in SegmentWriter and `get_data_at` in Convertor. +// If you want to access origin nullmap without offset, use `_nullmap` directly. const UInt8* OlapBlockDataConvertor::OlapColumnDataConvertorBase::get_nullmap() const { assert(_typed_column.column); return _nullmap ? _nullmap + _row_pos : nullptr; @@ -195,8 +196,8 @@ const void* OlapBlockDataConvertor::OlapColumnDataConvertorObject::get_data() co const void* OlapBlockDataConvertor::OlapColumnDataConvertorObject::get_data_at( size_t offset) const { UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : _slice.data() + offset; } @@ -372,8 +373,8 @@ const void* OlapBlockDataConvertor::OlapColumnDataConvertorChar::get_data() cons const void* OlapBlockDataConvertor::OlapColumnDataConvertorChar::get_data_at(size_t offset) const { UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : _slice.data() + offset; } @@ -428,8 +429,8 @@ const void* OlapBlockDataConvertor::OlapColumnDataConvertorVarChar::get_data_at( size_t offset) const { assert(offset < _slice.size()); UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : _slice.data() + offset; } diff --git a/be/src/vec/olap/olap_data_convertor.h b/be/src/vec/olap/olap_data_convertor.h index 6898b44a9d..037a1f4a70 100644 --- a/be/src/vec/olap/olap_data_convertor.h +++ b/be/src/vec/olap/olap_data_convertor.h @@ -179,8 +179,8 @@ private: const void* get_data() const override { return _values.data(); } const void* get_data_at(size_t offset) const override { UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : _values.data() + offset; } @@ -221,8 +221,8 @@ private: const void* get_data_at(size_t offset) const override { assert(offset < _num_rows); UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : _values + offset; } @@ -263,8 +263,8 @@ private: const void* get_data_at(size_t offset) const override { assert(offset < _num_rows); UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : values_ + offset; } @@ -305,8 +305,8 @@ private: const void* get_data_at(size_t offset) const override { assert(offset < _num_rows); UInt8 null_flag = 0; - if (_nullmap) { - null_flag = _nullmap[offset]; + if (get_nullmap()) { + null_flag = get_nullmap()[offset]; } return null_flag ? nullptr : values_ + offset; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org