This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 81ca2bf8682 [fix](be) Skip CHAR payload checks for NULL rows (#67043)
81ca2bf8682 is described below
commit 81ca2bf8682520460fd87aea9c977f0bb6669a0b
Author: Mryange <[email protected]>
AuthorDate: Mon Aug 24 12:29:16 2026 +0800
[fix](be) Skip CHAR payload checks for NULL rows (#67043)
Nullable CHAR columns can carry a non-empty nested string payload for
rows whose logical value is NULL. The CHAR storage converter previously
validated that payload against the CHAR length even though the row was
NULL, causing an unnecessary DCHECK during INSERT. This change passes
the null map into CHAR padding and skips validation and copying for NULL
rows while preserving the existing checks for non-NULL rows.
---
be/src/storage/iterator/olap_data_convertor.cpp | 2 +-
be/src/storage/iterator/olap_data_convertor.h | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/be/src/storage/iterator/olap_data_convertor.cpp
b/be/src/storage/iterator/olap_data_convertor.cpp
index 129253fbbbb..45c329f1f6e 100644
--- a/be/src/storage/iterator/olap_data_convertor.cpp
+++ b/be/src/storage/iterator/olap_data_convertor.cpp
@@ -549,7 +549,7 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorChar::convert_to_olap() {
// If column_string is not padded to full, we should do padding here.
if (should_padding(column_string, _length)) {
- _column = clone_and_padding(column_string, _length);
+ _column = clone_and_padding(column_string, _length, _nullmap);
column_string = assert_cast<const ColumnString*>(_column.get());
}
diff --git a/be/src/storage/iterator/olap_data_convertor.h
b/be/src/storage/iterator/olap_data_convertor.h
index 99b24c48e84..af17d0eeae9 100644
--- a/be/src/storage/iterator/olap_data_convertor.h
+++ b/be/src/storage/iterator/olap_data_convertor.h
@@ -180,7 +180,8 @@ private:
return column->size() * padding_length != column->chars.size();
}
- static ColumnPtr clone_and_padding(const ColumnString* input, size_t
padding_length) {
+ static ColumnPtr clone_and_padding(const ColumnString* input, size_t
padding_length,
+ const UInt8* null_map = nullptr) {
auto column = ColumnString::create();
column->offsets.resize(input->size());
@@ -192,6 +193,10 @@ private:
auto str = input->get_data_at(i);
+ if (null_map && null_map[i]) {
+ continue;
+ }
+
DCHECK(str.size <= padding_length)
<< "char type data length over limit, padding_length="
<< padding_length
<< ", real=" << str.size;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]