This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 0509da6ab1f7f23feaf8504d934d47f2c99d1171
Author: Pxl <[email protected]>
AuthorDate: Fri Feb 10 08:52:41 2023 +0800

    [Enchancement](function) display elements number on check_chars_length 
#16570
---
 be/src/vec/columns/column_string.cpp | 10 +++++-----
 be/src/vec/columns/column_string.h   | 27 ++++++++++++++-------------
 2 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/be/src/vec/columns/column_string.cpp 
b/be/src/vec/columns/column_string.cpp
index 3bada76599..0c0447c341 100644
--- a/be/src/vec/columns/column_string.cpp
+++ b/be/src/vec/columns/column_string.cpp
@@ -83,7 +83,7 @@ void ColumnString::insert_range_from(const IColumn& src, 
size_t start, size_t le
     size_t nested_length = src_concrete.offsets[start + length - 1] - 
nested_offset;
 
     size_t old_chars_size = chars.size();
-    check_chars_length(old_chars_size + nested_length);
+    check_chars_length(old_chars_size + nested_length, offsets.size() + 
length);
     chars.resize(old_chars_size + nested_length);
     memcpy(&chars[old_chars_size], &src_concrete.chars[nested_offset], 
nested_length);
 
@@ -219,7 +219,7 @@ const char* 
ColumnString::deserialize_and_insert_from_arena(const char* pos) {
 
     const size_t old_size = chars.size();
     const size_t new_size = old_size + string_size;
-    check_chars_length(new_size);
+    check_chars_length(new_size, offsets.size() + 1);
     chars.resize(new_size);
     memcpy(chars.data() + old_size, pos, string_size);
 
@@ -302,7 +302,7 @@ ColumnPtr ColumnString::index_impl(const 
PaddedPODArray<Type>& indexes, size_t l
     for (size_t i = 0; i < limit; ++i) {
         new_chars_size += size_at(indexes[i]);
     }
-    check_chars_length(new_chars_size);
+    check_chars_length(new_chars_size, limit);
     res_chars.resize(new_chars_size);
 
     res_offsets.resize(limit);
@@ -402,7 +402,7 @@ ColumnPtr ColumnString::replicate(const Offsets& 
replicate_offsets) const {
         prev_string_offset = offsets[i];
     }
 
-    check_chars_length(res_chars.size());
+    check_chars_length(res_chars.size(), res_offsets.size());
     return res;
 }
 
@@ -441,7 +441,7 @@ void ColumnString::replicate(const uint32_t* counts, size_t 
target_size, IColumn
         prev_string_offset = offsets[i];
     }
 
-    check_chars_length(res_chars.size());
+    check_chars_length(res_chars.size(), res_offsets.size());
 }
 
 void ColumnString::reserve(size_t n) {
diff --git a/be/src/vec/columns/column_string.h 
b/be/src/vec/columns/column_string.h
index 0fa80190d8..373e676bf1 100644
--- a/be/src/vec/columns/column_string.h
+++ b/be/src/vec/columns/column_string.h
@@ -61,9 +61,10 @@ private:
     /// Size of i-th element, including terminating zero.
     size_t ALWAYS_INLINE size_at(ssize_t i) const { return offsets[i] - 
offsets[i - 1]; }
 
-    void ALWAYS_INLINE check_chars_length(size_t length) const {
-        if (UNLIKELY(length > MAX_STRING_SIZE)) {
-            LOG(FATAL) << "string column length is too large: " << length;
+    void ALWAYS_INLINE check_chars_length(size_t total_length, size_t 
element_number) const {
+        if (UNLIKELY(total_length > MAX_STRING_SIZE)) {
+            LOG(FATAL) << "string column length is too large: total_length=" 
<< total_length
+                       << " ,element_number=" << element_number;
         }
     }
 
@@ -123,7 +124,7 @@ public:
         const size_t size_to_append = s.size();
         const size_t new_size = old_size + size_to_append;
 
-        check_chars_length(new_size);
+        check_chars_length(new_size, old_size + 1);
 
         chars.resize(new_size);
         memcpy(chars.data() + old_size, s.c_str(), size_to_append);
@@ -147,7 +148,7 @@ public:
             const size_t offset = src.offsets[n - 1];
             const size_t new_size = old_size + size_to_append;
 
-            check_chars_length(new_size);
+            check_chars_length(new_size, offsets.size() + 1);
 
             chars.resize(new_size);
             memcpy_small_allow_read_write_overflow15(chars.data() + old_size, 
&src.chars[offset],
@@ -161,7 +162,7 @@ public:
         const size_t new_size = old_size + length;
 
         if (length) {
-            check_chars_length(new_size);
+            check_chars_length(new_size, offsets.size() + 1);
             chars.resize(new_size);
             memcpy(chars.data() + old_size, pos, length);
         }
@@ -173,7 +174,7 @@ public:
         const size_t new_size = old_size + length;
 
         if (length) {
-            check_chars_length(new_size);
+            check_chars_length(new_size, offsets.size() + 1);
             chars.resize(new_size);
             memcpy(chars.data() + old_size, pos, length);
         }
@@ -204,7 +205,7 @@ public:
                 length = 0;
             }
         }
-        check_chars_length(offset);
+        check_chars_length(offset, offsets.size());
         chars.resize(offset);
     }
 
@@ -218,7 +219,7 @@ public:
         const auto begin_offset = offsets_[0];
         const size_t total_mem_size = offsets_[num] - begin_offset;
         if (LIKELY(total_mem_size > 0)) {
-            check_chars_length(total_mem_size + old_size);
+            check_chars_length(total_mem_size + old_size, offsets.size() + 
num);
             chars.resize(total_mem_size + old_size);
             memcpy(chars.data() + old_size, data + begin_offset, 
total_mem_size);
         }
@@ -242,7 +243,7 @@ public:
         }
 
         const size_t old_size = chars.size();
-        check_chars_length(old_size + new_size);
+        check_chars_length(old_size + new_size, offsets.size() + num);
         chars.resize(old_size + new_size);
 
         Char* data = chars.data();
@@ -264,7 +265,7 @@ public:
         }
 
         const size_t old_size = chars.size();
-        check_chars_length(old_size + new_size);
+        check_chars_length(old_size + new_size, offsets.size() + num);
         chars.resize(old_size + new_size);
 
         Char* data = chars.data();
@@ -292,7 +293,7 @@ public:
             offsets[offset_size + i] = new_size;
         }
 
-        check_chars_length(new_size);
+        check_chars_length(new_size, offsets.size());
         chars.resize(new_size);
 
         for (size_t i = start_index; i < start_index + num; i++) {
@@ -449,8 +450,8 @@ public:
             chars.clear();
             offsets[self_row] = data.size;
         } else {
-            check_chars_length(chars.size() + data.size);
             offsets[self_row] = offsets[self_row - 1] + data.size;
+            check_chars_length(offsets[self_row], self_row);
         }
 
         chars.insert(data.data, data.data + data.size);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to