This is an automated email from the ASF dual-hosted git repository. lihaopeng pushed a commit to branch vectorized in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 30de672b2e45a83a95706a1f1f100054b436f33c Author: HappenLee <happen...@hotmail.com> AuthorDate: Thu Jan 13 13:34:29 2022 +0800 [Vectorized][Bug] Bitmap/HLL type no support cast to varchar/char (#7737) Co-authored-by: lihaopeng <lihaop...@baidu.com> --- be/src/vec/data_types/data_type_bitmap.cpp | 9 +++++++++ be/src/vec/data_types/data_type_bitmap.h | 1 + be/src/vec/data_types/data_type_string.cpp | 8 ++++++++ be/src/vec/data_types/data_type_string.h | 1 + 4 files changed, 19 insertions(+) diff --git a/be/src/vec/data_types/data_type_bitmap.cpp b/be/src/vec/data_types/data_type_bitmap.cpp index 4daa72e..c6bc9f0 100644 --- a/be/src/vec/data_types/data_type_bitmap.cpp +++ b/be/src/vec/data_types/data_type_bitmap.cpp @@ -90,4 +90,13 @@ void DataTypeBitMap::deserialize_as_stream(BitmapValue& value, BufferReadable& b read_string_binary(ref, buf); value.deserialize(ref.data); } + +void DataTypeBitMap::to_string(const class doris::vectorized::IColumn& column, size_t row_num, + doris::vectorized::BufferWritable& ostr) const { + auto& data = const_cast<BitmapValue&>(assert_cast<const ColumnBitmap&>(column).get_element(row_num)); + std::string result(data.getSizeInBytes(), '0'); + data.write((char*)result.data()); + + ostr.write(result.data(), result.size()); +} } // namespace doris::vectorized diff --git a/be/src/vec/data_types/data_type_bitmap.h b/be/src/vec/data_types/data_type_bitmap.h index 69f5540..c2166fb 100644 --- a/be/src/vec/data_types/data_type_bitmap.h +++ b/be/src/vec/data_types/data_type_bitmap.h @@ -65,6 +65,7 @@ public: bool can_be_inside_low_cardinality() const override { return false; } std::string to_string(const IColumn& column, size_t row_num) const { return "BitMap()"; } + void to_string(const IColumn &column, size_t row_num, BufferWritable &ostr) const override; [[noreturn]] virtual Field get_default() const { LOG(FATAL) << "Method get_default() is not implemented for data type " << get_name(); diff --git a/be/src/vec/data_types/data_type_string.cpp b/be/src/vec/data_types/data_type_string.cpp index f481721..86b0aac 100644 --- a/be/src/vec/data_types/data_type_string.cpp +++ b/be/src/vec/data_types/data_type_string.cpp @@ -58,6 +58,14 @@ std::string DataTypeString::to_string(const IColumn& column, size_t row_num) con return s.to_string(); } +void DataTypeString::to_string(const class doris::vectorized::IColumn & column, size_t row_num, + class doris::vectorized::BufferWritable & ostr) const { + const StringRef& s = + assert_cast<const ColumnString&>(*column.convert_to_full_column_if_const().get()) + .get_data_at(row_num); + ostr.write(s.data, s.size); +} + Field DataTypeString::get_default() const { return String(); } diff --git a/be/src/vec/data_types/data_type_string.h b/be/src/vec/data_types/data_type_string.h index 9d5b21b..8506473 100644 --- a/be/src/vec/data_types/data_type_string.h +++ b/be/src/vec/data_types/data_type_string.h @@ -55,6 +55,7 @@ public: bool can_be_inside_nullable() const override { return true; } bool can_be_inside_low_cardinality() const override { return true; } std::string to_string(const IColumn& column, size_t row_num) const; + void to_string(const IColumn &column, size_t row_num, BufferWritable &ostr) const override; }; } // namespace doris::vectorized --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org