From 92e0daa7acab10d7c27f5a1d311b4ad1899d306d Mon Sep 17 00:00:00 2001 From: jacktengg Date: Fri, 7 Mar 2025 15:08:34 +0800 Subject: [PATCH] fix --- be/src/vec/columns/column_string.cpp | 31 +++++++++++++++------- be/test/vec/columns/column_string_test.cpp | 17 +++++++++--- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/be/src/vec/columns/column_string.cpp b/be/src/vec/columns/column_string.cpp index bc8779a2bc918e..b00659c71a80ef 100644 --- a/be/src/vec/columns/column_string.cpp +++ b/be/src/vec/columns/column_string.cpp @@ -40,8 +40,14 @@ template void ColumnStr::sanity_check() const { #ifndef NDEBUG sanity_check_simple(); - auto count = cast_set(offsets.size()); - for (int i = 0; i < count; ++i) { + auto count = offsets.size(); + if (count == 1) { + if (offsets[0] < offsets[-1]) { + throw Exception(Status::InternalError("row count: {}, offsets[{}]: {}, offsets[{}]: {}", + count, 0, offsets[9], -1, offsets[-1])); + } + } + for (size_t i = 0; i < count; ++i) { if (offsets[i] < offsets[i - 1]) { throw Exception(Status::InternalError("row count: {}, offsets[{}]: {}, offsets[{}]: {}", count, i, offsets[i], i - 1, offsets[i - 1])); @@ -53,10 +59,19 @@ void ColumnStr::sanity_check() const { template void ColumnStr::sanity_check_simple() const { #ifndef NDEBUG - auto count = cast_set(offsets.size()); - if (chars.size() != offsets[count - 1]) { - throw Exception(Status::InternalError("row count: {}, chars.size(): {}, offset[{}]: {}", - count, chars.size(), count - 1, offsets[count - 1])); + auto count = offsets.size(); + if (count == 0) { + if (chars.size() != offsets[-1]) { + throw Exception(Status::InternalError("row count: {}, chars.size(): {}, offset[{}]: {}", + count, chars.size(), -1, offsets[-1])); + } + } else { + auto size_may_overflow = cast_set(chars.size()); + if (size_may_overflow != offsets[count - 1]) { + throw Exception(Status::InternalError("row count: {}, chars.size(): {}, offset[{}]: {}", + count, chars.size(), count - 1, + offsets[count - 1])); + } } if (offsets[-1] != 0) { throw Exception(Status::InternalError("wrong offsets[-1]: {}", offsets[-1])); @@ -668,11 +683,7 @@ void ColumnStr::compare_internal(size_t rhs_row_id, const IColumn& rhs, int n template ColumnPtr ColumnStr::convert_column_if_overflow() { -#ifdef BE_TEST - if (std::is_same_v && chars.size() > 10) { -#else if (std::is_same_v && chars.size() > config::string_overflow_size) { -#endif auto new_col = ColumnStr::create(); const auto length = offsets.size(); diff --git a/be/test/vec/columns/column_string_test.cpp b/be/test/vec/columns/column_string_test.cpp index 7561488609939e..d33f67b828657c 100644 --- a/be/test/vec/columns/column_string_test.cpp +++ b/be/test/vec/columns/column_string_test.cpp @@ -878,13 +878,22 @@ TEST_F(ColumnStringTest, convert_column_if_overflow) { } { auto tmp_col = column_str32->clone(); + auto* tmp_col_str32 = assert_cast(tmp_col.get()); auto src_size = column_str32->size(); - auto* tmp_col_str = assert_cast(tmp_col.get()); - EXPECT_GT(tmp_col_str->get_chars().size(), 10); + auto chars_size = column_str32->get_chars().size(); + auto max_chars_size = config::string_overflow_size; + while (chars_size < max_chars_size) { + tmp_col->insert_range_from_ignore_overflow(*column_str32, 0, column_str32->size()); + chars_size = tmp_col_str32->get_chars().size(); + } + tmp_col->insert_range_from_ignore_overflow(*column_str32, 0, column_str32->size()); + auto tmp_col_row_count = tmp_col->size(); + chars_size = tmp_col_str32->get_chars().size(); + EXPECT_GT(chars_size, max_chars_size); auto tmp_col_converted = tmp_col->convert_column_if_overflow(); EXPECT_TRUE(tmp_col_converted->is_column_string64()); - for (size_t i = 0; i < src_size; ++i) { - EXPECT_EQ(tmp_col_converted->get_data_at(i), column_str32->get_data_at(i)); + for (size_t i = 0; i < tmp_col_row_count; ++i) { + EXPECT_EQ(tmp_col_converted->get_data_at(i), column_str32->get_data_at(i % src_size)); } } }