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

Reply via email to