From 4e4f8afa2856793ccd1caa4098601607751a1203 Mon Sep 17 00:00:00 2001 From: camby <104178625@qq.com> Date: Tue, 11 Oct 2022 15:41:34 +0800 Subject: [PATCH] [fix](array-type) fix get_data_at for zero element array #13225 Co-authored-by: cambyzju --- be/src/vec/columns/column_array.cpp | 6 ++++-- be/src/vec/exprs/vliteral.cpp | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/be/src/vec/columns/column_array.cpp b/be/src/vec/columns/column_array.cpp index 531421e0ec..9d57a8f003 100644 --- a/be/src/vec/columns/column_array.cpp +++ b/be/src/vec/columns/column_array.cpp @@ -150,9 +150,11 @@ StringRef ColumnArray::get_data_at(size_t n) const { * For arrays of strings and arrays of arrays, the resulting chunk of memory may not be one-to-one correspondence with the elements, * since it contains only the data laid in succession, but not the offsets. */ - size_t offset_of_first_elem = offset_at(n); - StringRef first = get_data().get_data_at(offset_of_first_elem); + StringRef first; + if (offset_of_first_elem < get_data().size()) { + first = get_data().get_data_at(offset_of_first_elem); + } size_t array_size = size_at(n); if (array_size == 0) { diff --git a/be/src/vec/exprs/vliteral.cpp b/be/src/vec/exprs/vliteral.cpp index d99cdbdd97..680023010f 100644 --- a/be/src/vec/exprs/vliteral.cpp +++ b/be/src/vec/exprs/vliteral.cpp @@ -197,8 +197,8 @@ std::string VLiteral::debug_string() const { out << "VLiteral (name = " << _expr_name; out << ", type = " << _data_type->get_name(); out << ", value = "; - if (_column_ptr.get()->size() > 0) { - StringRef ref = _column_ptr.get()->get_data_at(0); + if (_column_ptr->size() > 0) { + StringRef ref = _column_ptr->get_data_at(0); if (ref.data == nullptr) { out << "null"; } else {