diff --git a/dbms/src/Columns/ColumnArray.cpp b/dbms/src/Columns/ColumnArray.cpp index 73ea0c2910b..b4382755ba3 100644 --- a/dbms/src/Columns/ColumnArray.cpp +++ b/dbms/src/Columns/ColumnArray.cpp @@ -809,12 +809,12 @@ ColumnPtr ColumnArray::replicateString(const Offsets & replicate_offsets) const for (size_t i = 0; i < col_size; ++i) { - /// How much to replicate the array. + /// How many times to replicate the array. size_t size_to_replicate = replicate_offsets[i] - prev_replicate_offset; - /// The number of rows in the array. + /// The number of strings in the array. size_t value_size = src_offsets[i] - prev_src_offset; - /// Number of characters in rows of the array, including zero/null bytes. - size_t sum_chars_size = value_size == 0 ? 0 : (src_string_offsets[prev_src_offset + value_size - 1] - prev_src_string_offset); + /// Number of characters in strings of the array, including zero bytes. + size_t sum_chars_size = src_string_offsets[prev_src_offset + value_size - 1] - prev_src_string_offset; /// -1th index is Ok, see PaddedPODArray. for (size_t j = 0; j < size_to_replicate; ++j) { @@ -824,7 +824,7 @@ ColumnPtr ColumnArray::replicateString(const Offsets & replicate_offsets) const size_t prev_src_string_offset_local = prev_src_string_offset; for (size_t k = 0; k < value_size; ++k) { - /// Size of one string. + /// Size of single string. size_t chars_size = src_string_offsets[k + prev_src_offset] - prev_src_string_offset_local; current_res_string_offset += chars_size; diff --git a/dbms/src/Columns/ColumnString.cpp b/dbms/src/Columns/ColumnString.cpp index 1443283783a..78d2f3ce045 100644 --- a/dbms/src/Columns/ColumnString.cpp +++ b/dbms/src/Columns/ColumnString.cpp @@ -88,7 +88,7 @@ void ColumnString::insertRangeFrom(const IColumn & src, size_t start, size_t len else { size_t old_size = offsets.size(); - size_t prev_max_offset = old_size ? offsets.back() : 0; + size_t prev_max_offset = offsets.back(); /// -1th index is Ok, see PaddedPODArray offsets.resize(old_size + length); for (size_t i = 0; i < length; ++i) diff --git a/dbms/src/Functions/FunctionArrayMapped.h b/dbms/src/Functions/FunctionArrayMapped.h index bb9b0ad3c74..dc25b228ce9 100644 --- a/dbms/src/Functions/FunctionArrayMapped.h +++ b/dbms/src/Functions/FunctionArrayMapped.h @@ -161,6 +161,10 @@ public: const auto * column_function = typeid_cast(column_with_type_and_name.column.get()); + if (!column_function) + throw Exception("First argument for function " + getName() + " must be a function.", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); + ColumnPtr offsets_column; ColumnPtr column_first_array_ptr; diff --git a/dbms/src/Functions/FunctionsBitmap.h b/dbms/src/Functions/FunctionsBitmap.h index 2fefaed9f2b..88c17feeb5c 100644 --- a/dbms/src/Functions/FunctionsBitmap.h +++ b/dbms/src/Functions/FunctionsBitmap.h @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -14,6 +13,7 @@ #include #include + namespace DB { namespace ErrorCodes