You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2025/12/03 14:26:01 UTC
(doris) branch branch-4.0 updated: [refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new d2beff5a4ee [refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)
d2beff5a4ee is described below
commit d2beff5a4eed466af4cdbee0a16fd624471321e1
Author: Mryange <ya...@selectdb.com>
AuthorDate: Wed Dec 3 22:25:53 2025 +0800
[refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)
…will now be used only for the binary format. (#58425)
https://github.com/apache/doris/pull/58425
MysqlRowBuffer is used only for binary output
(write_column_to_mysql_binary).
Remove _dynamic_mode — types that previously relied on it (for example
array, map, struct) will now be converted to strings before being
written to MysqlRowBuffer.
### What problem does this PR solve?
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
### Release note
None
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [ ] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
---
be/src/util/mysql_global.h | 40 ++
be/src/util/mysql_row_buffer.cpp | 412 +++++----------------
be/src/util/mysql_row_buffer.h | 41 +-
.../vec/data_types/serde/data_type_array_serde.cpp | 65 +---
.../vec/data_types/serde/data_type_array_serde.h | 8 -
.../data_types/serde/data_type_bitmap_serde.cpp | 40 +-
.../vec/data_types/serde/data_type_bitmap_serde.h | 10 -
.../serde/data_type_date_or_datetime_serde.cpp | 21 +-
.../serde/data_type_date_or_datetime_serde.h | 9 -
.../serde/data_type_datetimev2_serde.cpp | 23 +-
.../data_types/serde/data_type_datetimev2_serde.h | 8 -
.../data_types/serde/data_type_datev2_serde.cpp | 23 +-
.../vec/data_types/serde/data_type_datev2_serde.h | 9 -
.../data_types/serde/data_type_decimal_serde.cpp | 25 +-
.../vec/data_types/serde/data_type_decimal_serde.h | 8 -
.../vec/data_types/serde/data_type_hll_serde.cpp | 40 +-
be/src/vec/data_types/serde/data_type_hll_serde.h | 10 -
.../vec/data_types/serde/data_type_ipv4_serde.cpp | 23 +-
be/src/vec/data_types/serde/data_type_ipv4_serde.h | 9 -
.../vec/data_types/serde/data_type_ipv6_serde.cpp | 23 +-
be/src/vec/data_types/serde/data_type_ipv6_serde.h | 9 -
.../vec/data_types/serde/data_type_jsonb_serde.cpp | 23 +-
.../vec/data_types/serde/data_type_jsonb_serde.h | 9 -
.../vec/data_types/serde/data_type_map_serde.cpp | 86 +----
be/src/vec/data_types/serde/data_type_map_serde.h | 8 -
.../vec/data_types/serde/data_type_nothing_serde.h | 6 -
.../data_types/serde/data_type_nullable_serde.cpp | 27 +-
.../data_types/serde/data_type_nullable_serde.h | 8 -
.../data_types/serde/data_type_number_serde.cpp | 25 +-
.../vec/data_types/serde/data_type_number_serde.h | 10 -
.../serde/data_type_quantilestate_serde.h | 40 +-
be/src/vec/data_types/serde/data_type_serde.h | 17 -
.../data_types/serde/data_type_string_serde.cpp | 13 -
.../vec/data_types/serde/data_type_string_serde.h | 24 +-
.../data_types/serde/data_type_struct_serde.cpp | 74 +---
.../vec/data_types/serde/data_type_struct_serde.h | 13 -
.../vec/data_types/serde/data_type_time_serde.cpp | 15 +-
be/src/vec/data_types/serde/data_type_time_serde.h | 8 -
.../data_types/serde/data_type_varbinary_serde.cpp | 17 +-
.../data_types/serde/data_type_varbinary_serde.h | 10 -
.../data_types/serde/data_type_variant_serde.cpp | 24 +-
.../vec/data_types/serde/data_type_variant_serde.h | 10 -
be/src/vec/sink/vmysql_result_writer.cpp | 86 ++---
be/src/vec/sink/writer/vfile_result_writer.cpp | 34 +-
be/test/util/mysql_row_buffer_test.cpp | 119 +-----
.../vec/data_types/common_data_type_serder_test.h | 14 -
be/test/vec/data_types/data_type_array_test.cpp | 5 -
be/test/vec/data_types/data_type_ip_test.cpp | 17 -
be/test/vec/data_types/datetime_round_test.cpp | 41 --
.../serde/data_type_jsonb_serde_test.cpp | 15 +-
.../serde/data_type_serde_agg_state_test.cpp | 54 ---
.../serde/data_type_serde_bitmap_test.cpp | 25 --
.../serde/data_type_serde_datetime_v1_test.cpp | 9 -
.../serde/data_type_serde_datetime_v2_test.cpp | 9 -
.../serde/data_type_serde_decimal_test.cpp | 9 -
.../data_type_serde_fixed_length_object_test.cpp | 28 --
.../data_types/serde/data_type_serde_hll_test.cpp | 27 --
.../serde/data_type_serde_number_test.cpp | 9 -
.../serde/data_type_serde_quantile_state_test.cpp | 29 --
.../serde/data_type_serde_string_test.cpp | 9 -
.../serde/data_type_serde_timev2_test.cpp | 55 ---
.../serde/data_type_serde_varbinary_test.cpp | 22 +-
62 files changed, 277 insertions(+), 1662 deletions(-)
diff --git a/be/src/util/mysql_global.h b/be/src/util/mysql_global.h
index 84d4223564f..309bffb8d5a 100644
--- a/be/src/util/mysql_global.h
+++ b/be/src/util/mysql_global.h
@@ -20,6 +20,9 @@
#include <float.h>
#include <stdint.h>
+#include <cstring>
+#include <string>
+
namespace doris {
typedef unsigned char uchar;
@@ -61,4 +64,41 @@ typedef unsigned char uchar;
/* -[digits].[frac] */
#define MAX_DECIMAL_STR_LENGTH 29
+inline void direct_write_to_mysql_result_string(std::string& mysql_rows, const char* str,
+ size_t size) {
+ // MySQL protocol length encoding:
+ // <= 250: 1 byte for length
+ // < 65536: 1 byte (252) + 2 bytes for length
+ // < 16777216: 1 byte (253) + 3 bytes for length
+ // >= 16777216: 1 byte (254) + 8 bytes for length
+
+ char buf[16];
+ if (size < 251ULL) {
+ int1store(buf, size);
+ mysql_rows.append(buf, 1);
+ } else if (size < 65536ULL) {
+ buf[0] = static_cast<char>(252);
+ uint16_t temp16 = static_cast<uint16_t>(size);
+ memcpy(buf + 1, &temp16, sizeof(temp16));
+ mysql_rows.append(buf, 3);
+ } else if (size < 16777216ULL) {
+ buf[0] = static_cast<char>(253);
+ int3store(buf + 1, size);
+ mysql_rows.append(buf, 4);
+ } else {
+ buf[0] = static_cast<char>(254);
+ uint64_t temp64 = static_cast<uint64_t>(size);
+ memcpy(buf + 1, &temp64, sizeof(temp64));
+ mysql_rows.append(buf, 9);
+ }
+
+ // Append string content
+ mysql_rows.append(str, size);
+}
+
+inline void direct_write_to_mysql_result_null(std::string& mysql_rows) {
+ // MySQL protocol for NULL value is a single byte with value 251
+ mysql_rows.push_back(static_cast<char>(251));
+}
+
} // namespace doris
diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 657f99d5514..f0fd4012740 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -77,17 +77,10 @@ static char* pack_vlen(char* packet, uint64_t length) {
return packet + 8;
}
-template <bool is_binary_format>
-MysqlRowBuffer<is_binary_format>::MysqlRowBuffer()
- : _pos(_default_buf),
- _buf(_default_buf),
- _buf_size(sizeof(_default_buf)),
- _dynamic_mode(0),
- _len_pos(0) {}
-
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::start_binary_row(uint64_t num_cols) {
- assert(is_binary_format);
+MysqlRowBuffer::MysqlRowBuffer()
+ : _pos(_default_buf), _buf(_default_buf), _buf_size(sizeof(_default_buf)) {}
+
+void MysqlRowBuffer::start_binary_row(uint64_t num_cols) {
auto bit_fields = (num_cols + 9) / 8;
reserve(bit_fields + 1);
memset(_pos, 0, 1 + bit_fields);
@@ -95,43 +88,14 @@ void MysqlRowBuffer<is_binary_format>::start_binary_row(uint64_t num_cols) {
_field_pos = 0;
}
-template <bool is_binary_format>
-MysqlRowBuffer<is_binary_format>::~MysqlRowBuffer() {
+MysqlRowBuffer::~MysqlRowBuffer() {
if (_buf != _default_buf) {
delete[] _buf;
_buf = _default_buf;
}
}
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::open_dynamic_mode() {
- if (!_dynamic_mode) {
- // if _pos now exactly at the end of _buf memory,
- // we should reserve 1 byte for _dynamic_mode flag byte to avoid *pos = 254
- // cause _dynamic_mode flag byte be overwritten
- reserve(1 + 8);
- *_pos++ = NEXT_EIGHT_BYTE; // *_pos = 254 ; _pos++
- // write length when dynamic mode close
- _len_pos = (_pos - _buf);
- _pos = _pos + 8;
- _field_pos++;
- }
- _dynamic_mode++;
-}
-
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::close_dynamic_mode() {
- _dynamic_mode--;
-
- // _buf + _len_pos is the position to write length
- if (!_dynamic_mode) {
- int8store((_buf + _len_pos), _pos - (_buf + _len_pos) - 8);
- _len_pos = 0;
- }
-}
-
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) {
+int MysqlRowBuffer::reserve(int64_t size) {
DCHECK(size > 0);
int64_t need_size = size + (_pos - _buf);
@@ -157,71 +121,20 @@ int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) {
return 0;
}
-template <typename T>
-char* add_int(T data, char* pos, bool dynamic_mode) {
- char* init_pos = pos;
- pos += !dynamic_mode;
- auto end = fmt::format_to(pos, FMT_COMPILE("{}"), data);
- if (!dynamic_mode) {
- int1store(init_pos, end - pos);
- }
- return end;
-}
-
-static char* add_largeint(int128_t data, char* pos, bool dynamic_mode) {
- auto length = LargeIntValue::to_buffer(data, pos + !dynamic_mode);
- if (!dynamic_mode) {
- int1store(pos++, length);
- }
- return pos + length;
-}
-
-template <typename T>
-char* add_float(T data, char* pos, bool dynamic_mode) {
- static_assert(std::is_same_v<T, float> || std::is_same_v<T, double>);
- int length = vectorized::CastToString::from_number(data, pos + !dynamic_mode);
- if (!dynamic_mode) {
- int1store(pos++, length);
- }
- return pos + length;
-}
-
-static char* add_timev2(double data, char* pos, bool dynamic_mode, int scale) {
- uint8_t length = timev2_to_buffer_from_double(data, pos + !dynamic_mode, scale);
- if (!dynamic_mode) {
- int1store(pos++, length);
- }
- return pos + length;
-}
-
-template <typename DateType>
-static char* add_datetime(const DateType& data, char* pos, bool dynamic_mode) {
- int length = data.to_buffer(pos + !dynamic_mode);
- if (!dynamic_mode) {
- int1store(pos++, length);
- }
- return pos + length;
-}
-
-static char* add_decimal(const DecimalV2Value& data, int round_scale, char* pos,
- bool dynamic_mode) {
- int length = data.to_buffer(pos + !dynamic_mode, round_scale);
- if (!dynamic_mode) {
- int1store(pos++, length);
- }
+static char* add_decimal(const DecimalV2Value& data, int round_scale, char* pos) {
+ int length = data.to_buffer(pos + 1, round_scale);
+ int1store(pos++, length);
return pos + length;
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::append(const char* data, int64_t len) {
+int MysqlRowBuffer::append(const char* data, int64_t len) {
reserve(len);
memcpy(_pos, data, len);
_pos += len;
return 0;
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::append_var_string(const char* data, int64_t len) {
+int MysqlRowBuffer::append_var_string(const char* data, int64_t len) {
/*
The +9 comes from that strings of length longer than 16M require
9 bytes to be stored (see net_store_length).
@@ -233,120 +146,60 @@ int MysqlRowBuffer<is_binary_format>::append_var_string(const char* data, int64_
return 0;
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_tinyint(int8_t data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[1];
- _field_pos++;
- int1store(buff, data);
- return append(buff, 1);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_TINYINT_WIDTH);
- _pos = add_int(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_tinyint(int8_t data) {
+ char buff[1];
+ _field_pos++;
+ int1store(buff, data);
+ return append(buff, 1);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_smallint(int16_t data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[2];
- _field_pos++;
- int2store(buff, data);
- return append(buff, 2);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_SMALLINT_WIDTH);
- _pos = add_int(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_smallint(int16_t data) {
+ char buff[2];
+ _field_pos++;
+ int2store(buff, data);
+ return append(buff, 2);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_int(int32_t data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[4];
- _field_pos++;
- int4store(buff, data);
- return append(buff, 4);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_INT_WIDTH);
- _pos = add_int(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_int(int32_t data) {
+ char buff[4];
+ _field_pos++;
+ int4store(buff, data);
+ return append(buff, 4);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_bigint(int64_t data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[8];
- _field_pos++;
- int8store(buff, data);
- return append(buff, 8);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_BIGINT_WIDTH);
-
- _pos = add_int(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_bigint(int64_t data) {
+ char buff[8];
+ _field_pos++;
+ int8store(buff, data);
+ return append(buff, 8);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_unsigned_bigint(uint64_t data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[8];
- _field_pos++;
- int8store(buff, data);
- return append(buff, 8);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(4 + MAX_BIGINT_WIDTH);
-
- _pos = add_int(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_unsigned_bigint(uint64_t data) {
+ char buff[8];
+ _field_pos++;
+ int8store(buff, data);
+ return append(buff, 8);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_largeint(int128_t data) {
- if (is_binary_format && !_dynamic_mode) {
- // large int as type string
- std::string value = LargeIntValue::to_string(data);
- _field_pos++;
- return append_var_string(value.data(), value.size());
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_LARGEINT_WIDTH);
-
- _pos = add_largeint(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_largeint(int128_t data) {
+ // large int as type string
+ std::string value = LargeIntValue::to_string(data);
+ _field_pos++;
+ return append_var_string(value.data(), value.size());
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_float(float data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[4];
- _field_pos++;
- float4store(buff, data);
- return append(buff, 4);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_FLOAT_STR_LENGTH);
-
- _pos = add_float(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_float(float data) {
+ char buff[4];
+ _field_pos++;
+ float4store(buff, data);
+ return append(buff, 4);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_double(double data) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[8];
- _field_pos++;
- float8store(buff, data);
- return append(buff, 8);
- }
- // 1 for string trail, 1 for length, 1 for sign, other for digits
- reserve(3 + MAX_DOUBLE_STR_LENGTH);
- _pos = add_float(data, _pos, _dynamic_mode);
- return 0;
+int MysqlRowBuffer::push_double(double data) {
+ char buff[8];
+ _field_pos++;
+ float8store(buff, data);
+ return append(buff, 8);
}
// Refer to https://dev.mysql.com/doc/refman/5.7/en/time.html
@@ -412,153 +265,92 @@ static int encode_binary_timev2(char* buff, double time, int scale) {
return pos; // Return total bytes written to buffer
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_timev2(double data, int scale) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[13];
- _field_pos++;
- int length = encode_binary_timev2(buff, data, scale);
- return append(buff, length);
- }
+int MysqlRowBuffer::push_timev2(double data, int scale) {
+ char buff[13];
+ _field_pos++;
+ int length = encode_binary_timev2(buff, data, scale);
+ return append(buff, length);
+}
- reserve(2 + MAX_TIME_WIDTH);
- _pos = add_timev2(data, _pos, _dynamic_mode, scale);
- return 0;
+template <typename DateType>
+int MysqlRowBuffer::push_vec_datetime(DateType& data, int scale) {
+ return push_datetime(data, scale);
}
-template <bool is_binary_format>
template <typename DateType>
-int MysqlRowBuffer<is_binary_format>::push_vec_datetime(DateType& data, int scale) {
- if (is_binary_format && !_dynamic_mode) {
- return push_datetime(data, scale);
+int MysqlRowBuffer::push_datetime(const DateType& data, int scale) {
+ char buff[12], *pos;
+ size_t length;
+ _field_pos++;
+ pos = buff + 1;
+
+ int2store(pos, data.year());
+ pos[2] = (uchar)data.month();
+ pos[3] = (uchar)data.day();
+ pos[4] = (uchar)data.hour();
+ pos[5] = (uchar)data.minute();
+ pos[6] = (uchar)data.second();
+ if (data.hour() || data.minute() || data.second()) {
+ length = 7;
+ } else if (data.year() || data.month() || data.day()) {
+ length = 4;
+ } else {
+ length = 0;
}
-
- char buf[64];
- char* pos = nullptr;
if constexpr (std::is_same_v<DateType, DateV2Value<DateV2ValueType>> ||
std::is_same_v<DateType, DateV2Value<DateTimeV2ValueType>>) {
- pos = data.to_string(buf, scale);
- } else {
- pos = data.to_string(buf);
- }
- return push_string(buf, pos - buf - 1);
-}
-
-template <bool is_binary_format>
-template <typename DateType>
-int MysqlRowBuffer<is_binary_format>::push_datetime(const DateType& data, int scale) {
- if (is_binary_format && !_dynamic_mode) {
- char buff[12], *pos;
- size_t length;
- _field_pos++;
- pos = buff + 1;
-
- int2store(pos, data.year());
- pos[2] = (uchar)data.month();
- pos[3] = (uchar)data.day();
- pos[4] = (uchar)data.hour();
- pos[5] = (uchar)data.minute();
- pos[6] = (uchar)data.second();
- if (data.hour() || data.minute() || data.second()) {
- length = 7;
- } else if (data.year() || data.month() || data.day()) {
- length = 4;
- } else {
- length = 0;
+ if (scale > 0 || data.microsecond()) {
+ int4store(pos + 7, data.microsecond());
+ length = 11;
}
- if constexpr (std::is_same_v<DateType, DateV2Value<DateV2ValueType>> ||
- std::is_same_v<DateType, DateV2Value<DateTimeV2ValueType>>) {
- if (scale > 0 || data.microsecond()) {
- int4store(pos + 7, data.microsecond());
- length = 11;
- }
- }
-
- buff[0] = (char)length; // Length is stored first
- return append(buff, length + 1);
}
- // 1 for string trail, 1 for length, other for datetime str
- reserve(2 + MAX_DATETIME_WIDTH);
- _pos = add_datetime(data, _pos, _dynamic_mode);
- return 0;
+ buff[0] = (char)length; // Length is stored first
+ return append(buff, length + 1);
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_decimal(const DecimalV2Value& data, int round_scale) {
- if (is_binary_format && !_dynamic_mode) {
- ++_field_pos;
- }
- // 1 for string trail, 1 for length, other for decimal str
+int MysqlRowBuffer::push_decimal(const DecimalV2Value& data, int round_scale) {
+ ++_field_pos;
reserve(2 + MAX_DECIMAL_WIDTH);
- _pos = add_decimal(data, round_scale, _pos, _dynamic_mode);
+ _pos = add_decimal(data, round_scale, _pos);
return 0;
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_ipv4(const IPv4Value& ipv4_val) {
+int MysqlRowBuffer::push_ipv4(const IPv4Value& ipv4_val) {
auto ipv4_str = ipv4_val.to_string();
return push_string(ipv4_str.c_str(), ipv4_str.length());
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_ipv6(const IPv6Value& ipv6_val) {
+int MysqlRowBuffer::push_ipv6(const IPv6Value& ipv6_val) {
auto ipv6_str = ipv6_val.to_string();
return push_string(ipv6_str.c_str(), ipv6_str.length());
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_string(const char* str, int64_t length) {
- if (is_binary_format && !_dynamic_mode) {
- ++_field_pos;
- }
+int MysqlRowBuffer::push_string(const char* str, int64_t length) {
+ ++_field_pos;
DCHECK(str != nullptr) << "input string is nullptr.";
reserve(9 + length);
- if (!_dynamic_mode) {
- _pos = pack_vlen(_pos, length);
- }
+ _pos = pack_vlen(_pos, length);
memcpy(_pos, str, length);
_pos += length;
return 0;
}
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_null() {
- if (_dynamic_mode) {
- // for nested type
- return 0;
- }
-
- if constexpr (is_binary_format) {
- uint offset = (_field_pos + 2) / 8 + 1;
- uint bit = (1 << ((_field_pos + 2) & 7));
- /* Room for this as it's allocated start_binary_row*/
- char* to = _buf + offset;
- *to = (char)((uchar)*to | (uchar)bit);
- _field_pos++;
- return 0;
- }
-
- reserve(1);
- int1store(_pos, 251);
- _pos += 1;
+int MysqlRowBuffer::push_null() {
+ uint offset = (_field_pos + 2) / 8 + 1;
+ uint bit = (1 << ((_field_pos + 2) & 7));
+ /* Room for this as it's allocated start_binary_row*/
+ char* to = _buf + offset;
+ *to = (char)((uchar)*to | (uchar)bit);
+ _field_pos++;
return 0;
}
-template class MysqlRowBuffer<true>;
-template class MysqlRowBuffer<false>;
-
-template int MysqlRowBuffer<true>::push_vec_datetime<DateV2Value<DateV2ValueType>>(
- DateV2Value<DateV2ValueType>& value, int scale);
-template int MysqlRowBuffer<true>::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
- DateV2Value<DateTimeV2ValueType>& value, int scale);
-template int MysqlRowBuffer<true>::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
- int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<DateV2Value<DateV2ValueType>>(
+template int MysqlRowBuffer::push_vec_datetime<DateV2Value<DateV2ValueType>>(
DateV2Value<DateV2ValueType>& value, int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
+template int MysqlRowBuffer::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
DateV2Value<DateTimeV2ValueType>& value, int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
- int scale);
+template int MysqlRowBuffer::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
+ int scale);
} // namespace doris
diff --git a/be/src/util/mysql_row_buffer.h b/be/src/util/mysql_row_buffer.h
index e792691c1ef..4751e4b36fc 100644
--- a/be/src/util/mysql_row_buffer.h
+++ b/be/src/util/mysql_row_buffer.h
@@ -52,7 +52,6 @@ class DecimalV2Value;
class IPv4Value;
class IPv6Value;
-template <bool is_binary_format = false>
class MysqlRowBuffer {
public:
MysqlRowBuffer();
@@ -89,40 +88,6 @@ public:
const char* pos() const { return _pos; }
int64_t length() const { return _pos - _buf; }
- /**
- * Why?
- * Because the Nested-Type's data need pushed multiple times, but mysql protocol don't
- * support nested type and each push will decide a column data.
- *
- * How?
- * Dynamic mode allow we push data in a column multiple times, and allow recursive push.
- * We will think that the length of the next column is uncertain when open dynamic
- * mode, so we will set the flag to 254(longest flag) and skip 8 bytes which used for
- * record length, then compute the actual data length when close dynamic mode.
- * In a recursive call(special for nested type), the mode will open multiple times, but
- * the data is actually written in one column, so we only need to deal it at the beginning
- * and at the end.
- *
- * the code:
- * mrb.push_tinyint(5);
- * mrb.push_smallint(120);
- * mrb.push_int(-30000);
- *
- * In normal mode, the buffer contains three column:
- * 1-'5'-3-'120'-6-'-30000'
- *
- * Same code in dynamic mode, the buffer contains a column:
- * 254-48-'5'-'120'-'-30000'
- *
- * NOTE: The open_dynamic_mode() and close_dynamic_mode() need appear in pairs
- */
- void open_dynamic_mode();
-
- /**
- * NOTE: The open_dynamic_mode() and close_dynamic_mode() need appear in pairs
- */
- void close_dynamic_mode();
-
private:
int reserve(int64_t size);
@@ -136,15 +101,11 @@ private:
char* _buf = nullptr;
int64_t _buf_size;
- int _dynamic_mode;
- uint64_t _len_pos;
uint32_t _field_pos = 0;
- uint32_t _field_count = 0;
char _default_buf[4096];
};
-using MysqlRowTextBuffer = MysqlRowBuffer<false>;
-using MysqlRowBinaryBuffer = MysqlRowBuffer<true>;
+using MysqlRowBinaryBuffer = MysqlRowBuffer;
} // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_array_serde.cpp b/be/src/vec/data_types/serde/data_type_array_serde.cpp
index ca80647344d..b0d1d9e6df0 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_array_serde.cpp
@@ -347,70 +347,11 @@ Status DataTypeArraySerDe::read_column_from_arrow(IColumn& column, const arrow::
arrow_nested_end_offset, ctz);
}
-template <bool is_binary_format>
-Status DataTypeArraySerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx_of_mysql, bool col_const,
- const FormatOptions& options) const {
- const auto& column_array = assert_cast<const ColumnArray&>(column);
- const auto& offsets = column_array.get_offsets();
- const auto& data = column_array.get_data();
- bool is_nested_string = data.is_column_string();
- const auto row_idx_of_col_arr = index_check_const(row_idx_of_mysql, col_const);
- result.open_dynamic_mode();
-
- if (0 != result.push_string("[", 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
-
- const auto begin_arr_element = offsets[row_idx_of_col_arr - 1];
- const auto end_arr_element = offsets[row_idx_of_col_arr];
- for (auto j = begin_arr_element; j < end_arr_element; ++j) {
- if (j != begin_arr_element) {
- if (0 != result.push_string(options.mysql_collection_delim.c_str(),
- options.mysql_collection_delim.size())) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
- if (data.is_null_at(j)) {
- if (0 != result.push_string(options.null_format, options.null_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (is_nested_string && options.wrapper_len > 0) {
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- RETURN_IF_ERROR(
- nested_serde->write_column_to_mysql(data, result, j, false, options));
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- RETURN_IF_ERROR(
- nested_serde->write_column_to_mysql(data, result, j, false, options));
- }
- }
- }
- if (0 != result.push_string("]", 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- result.close_dynamic_mode();
- return Status::OK();
-}
-
Status DataTypeArraySerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx_of_mysql, bool col_const,
const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeArraySerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+ return Status::NotSupported("Array type does not support write to mysql binary format");
}
Status DataTypeArraySerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_array_serde.h b/be/src/vec/data_types/serde/data_type_array_serde.h
index a1657be8558..5ce66a97fa0 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.h
+++ b/be/src/vec/data_types/serde/data_type_array_serde.h
@@ -93,10 +93,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
-
bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
int64_t row_idx) const override;
@@ -131,10 +127,6 @@ public:
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
template <bool is_strict_mode>
Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
diff --git a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
index 93e2f48e59d..179c1336e44 100644
--- a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
@@ -150,27 +150,11 @@ void DataTypeBitMapSerDe::read_one_cell_from_jsonb(IColumn& column, const JsonbV
col.insert_value(bitmap_value);
}
-template <bool is_binary_format>
-Status DataTypeBitMapSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- auto& data_column = assert_cast<const ColumnBitmap&>(column);
- if (_return_object_as_string) {
- const auto col_index = index_check_const(row_idx, col_const);
- BitmapValue bitmapValue = data_column.get_element(col_index);
- size_t size = bitmapValue.getSizeInBytes();
- std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
- bitmapValue.write_to(buf.get());
- if (0 != result.push_string(buf.get(), size)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (0 != result.push_null()) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
- return Status::OK();
+Status DataTypeBitMapSerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
+ return Status::NotSupported("Bitmap type does not support write to mysql binary format");
}
bool DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -188,20 +172,6 @@ bool DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column, Buff
}
}
-Status DataTypeBitMapSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeBitMapSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_bitmap_serde.h b/be/src/vec/data_types/serde/data_type_bitmap_serde.h
index 482665aaaa1..3a07ad18e2b 100644
--- a/be/src/vec/data_types/serde/data_type_bitmap_serde.h
+++ b/be/src/vec/data_types/serde/data_type_bitmap_serde.h
@@ -74,9 +74,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
int64_t row_idx) const override;
@@ -86,13 +83,6 @@ public:
int64_t start, int64_t end, vectorized::Arena& arena) const override;
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- // Bitmap is binary data which is not shown by mysql.
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
} // namespace vectorized
} // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
index 9c648144565..a3e3ca23b1d 100644
--- a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
@@ -251,10 +251,9 @@ Status DataTypeDateSerDe<T>::read_column_from_arrow(IColumn& column,
}
template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeDateSerDe<T>::_write_column_to_mysql(
- const IColumn& column, MysqlRowBuffer<is_binary_format>& result, int64_t row_idx,
- bool col_const, const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
+Status DataTypeDateSerDe<T>::write_column_to_mysql_binary(
+ const IColumn& column, MysqlRowBinaryBuffer& result, int64_t row_idx, bool col_const,
+ const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
const auto& data = assert_cast<const ColumnVector<T>&>(column).get_data();
const auto col_index = index_check_const(row_idx, col_const);
auto time_num = data[col_index];
@@ -277,20 +276,6 @@ Status DataTypeDateSerDe<T>::_write_column_to_mysql(
return Status::OK();
}
-template <PrimitiveType T>
-Status DataTypeDateSerDe<T>::write_column_to_mysql_binary(
- const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx, bool col_const,
- const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeDateSerDe<T>::write_column_to_mysql_text(
- const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
- const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
template <PrimitiveType T>
Status DataTypeDateSerDe<T>::write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
index 15d867203d8..16de6a8e46c 100644
--- a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
+++ b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
@@ -108,9 +108,6 @@ public:
const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx,
bool col_const,
const typename DataTypeNumberSerDe<T>::FormatOptions& options) const override;
- Status write_column_to_mysql_text(
- const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
- const typename DataTypeNumberSerDe<T>::FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -120,12 +117,6 @@ protected:
template <bool is_date>
Status _read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start,
int64_t end, const cctz::time_zone& ctz) const;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(
- const IColumn& column, MysqlRowBuffer<is_binary_format>& result, int64_t row_idx,
- bool col_const, const typename DataTypeNumberSerDe<T>::FormatOptions& options) const;
};
class DataTypeDateTimeSerDe : public DataTypeDateSerDe<PrimitiveType::TYPE_DATETIME> {
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
index f44c5d38c40..71b7d750a25 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
@@ -424,11 +424,10 @@ Status DataTypeDateTimeV2SerDe::read_column_from_arrow(IColumn& column,
return Status::OK();
}
-template <bool is_binary_format>
-Status DataTypeDateTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeDateTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
const auto& data = assert_cast<const ColumnDateTimeV2&>(column).get_data();
const auto col_index = index_check_const(row_idx, col_const);
DateV2Value<DateTimeV2ValueType> date_val =
@@ -451,20 +450,6 @@ Status DataTypeDateTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeDateTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeDateTimeV2SerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeDateTimeV2SerDe::write_column_to_orc(const std::string& timezone,
const IColumn& column, const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
index 6f9f11d3cd8..7a1f4c2f52c 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
@@ -92,9 +92,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -110,11 +107,6 @@ public:
int get_scale() const override { return _scale; }
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
int _scale;
};
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
index 620ac636073..eaa0ba12e4c 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
@@ -128,11 +128,10 @@ Status DataTypeDateV2SerDe::read_column_from_arrow(IColumn& column, const arrow:
return Status::OK();
}
-template <bool is_binary_format>
-Status DataTypeDateV2SerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeDateV2SerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
const auto& data = assert_cast<const ColumnDateV2&>(column).get_data();
auto col_index = index_check_const(row_idx, col_const);
DateV2Value<DateV2ValueType> date_val =
@@ -155,20 +154,6 @@ Status DataTypeDateV2SerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeDateV2SerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeDateV2SerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeDateV2SerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.h b/be/src/vec/data_types/serde/data_type_datev2_serde.h
index b1e7b8457bb..5a429e1dd40 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.h
@@ -89,9 +89,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -105,11 +102,5 @@ public:
void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
int64_t row_num) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
index 464bf73abf8..26239e11ab7 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
@@ -356,11 +356,10 @@ Status DataTypeDecimalSerDe<T>::read_column_from_arrow(IColumn& column,
}
template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeDecimalSerDe<T>::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeDecimalSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
auto& data = assert_cast<const ColumnDecimal<T>&>(column).get_data();
const auto col_index = index_check_const(row_idx, col_const);
if constexpr (T == TYPE_DECIMALV2) {
@@ -379,22 +378,6 @@ Status DataTypeDecimalSerDe<T>::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-template <PrimitiveType T>
-Status DataTypeDecimalSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeDecimalSerDe<T>::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
template <PrimitiveType T>
Status DataTypeDecimalSerDe<T>::write_column_to_orc(const std::string& timezone,
const IColumn& column, const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.h b/be/src/vec/data_types/serde/data_type_decimal_serde.h
index 3188cdd1001..16b46e842de 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.h
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.h
@@ -111,9 +111,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -138,11 +135,6 @@ public:
FieldInfo& info);
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
int precision;
int scale;
const typename FieldType::NativeType scale_multiplier;
diff --git a/be/src/vec/data_types/serde/data_type_hll_serde.cpp b/be/src/vec/data_types/serde/data_type_hll_serde.cpp
index 0ccfe06257b..de6b4df77b5 100644
--- a/be/src/vec/data_types/serde/data_type_hll_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_hll_serde.cpp
@@ -147,27 +147,11 @@ Status DataTypeHLLSerDe::write_column_to_arrow(const IColumn& column, const Null
return Status::OK();
}
-template <bool is_binary_format>
-Status DataTypeHLLSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- auto& data_column = assert_cast<const ColumnHLL&>(column);
- if (_return_object_as_string) {
- const auto col_index = index_check_const(row_idx, col_const);
- HyperLogLog hyperLogLog = data_column.get_element(col_index);
- size_t size = hyperLogLog.max_serialized_size();
- std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
- hyperLogLog.serialize((uint8_t*)buf.get());
- if (UNLIKELY(0 != result.push_string(buf.get(), size))) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (UNLIKELY(0 != result.push_null())) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
- return Status::OK();
+Status DataTypeHLLSerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result, int64_t row_idx,
+ bool col_const,
+ const FormatOptions& options) const {
+ return Status::NotSupported("Bitmap type does not support write to mysql binary format");
}
bool DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -185,20 +169,6 @@ bool DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column, BufferW
}
}
-Status DataTypeHLLSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer, int64_t row_idx,
- bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeHLLSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch, int64_t start,
diff --git a/be/src/vec/data_types/serde/data_type_hll_serde.h b/be/src/vec/data_types/serde/data_type_hll_serde.h
index 574967b4938..363ade07157 100644
--- a/be/src/vec/data_types/serde/data_type_hll_serde.h
+++ b/be/src/vec/data_types/serde/data_type_hll_serde.h
@@ -68,9 +68,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
int64_t row_idx) const override;
@@ -80,13 +77,6 @@ public:
int64_t start, int64_t end, vectorized::Arena& arena) const override;
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- // Hll is binary data which is not shown by mysql.
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
} // namespace vectorized
} // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
index dec1651943c..6df33a9ec8b 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
@@ -27,11 +27,10 @@
namespace doris::vectorized {
#include "common/compile_check_begin.h"
-template <bool is_binary_format>
-Status DataTypeIPv4SerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeIPv4SerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
auto& data = assert_cast<const ColumnIPv4&>(column).get_data();
auto col_index = index_check_const(row_idx, col_const);
IPv4Value ipv4_val(data[col_index]);
@@ -53,20 +52,6 @@ Status DataTypeIPv4SerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeIPv4SerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeIPv4SerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeIPv4SerDe::serialize_one_cell_to_json(const IColumn& column, int64_t row_num,
BufferWritable& bw,
FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.h b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
index e9c9c2af1b2..7208477a3c8 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
@@ -43,9 +43,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status serialize_one_cell_to_json(const IColumn& column, int64_t row_num, BufferWritable& bw,
FormatOptions& options) const override;
Status deserialize_one_cell_from_json(IColumn& column, Slice& slice,
@@ -74,11 +71,5 @@ public:
void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
int64_t row_num) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
index 6703d0c018c..89c6a4114f2 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
@@ -31,11 +31,10 @@
namespace doris::vectorized {
#include "common/compile_check_begin.h"
-template <bool is_binary_format>
-Status DataTypeIPv6SerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeIPv6SerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
auto& data = assert_cast<const ColumnIPv6&>(column).get_data();
auto col_index = index_check_const(row_idx, col_const);
IPv6Value ipv6_val(data[col_index]);
@@ -57,20 +56,6 @@ Status DataTypeIPv6SerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeIPv6SerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeIPv6SerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
void DataTypeIPv6SerDe::read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg) const {
const auto* str_value = arg->unpack<JsonbBinaryVal>();
column.deserialize_and_insert_from_arena(str_value->getBlob());
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.h b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
index 4f18f43e71c..cb79451d54c 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
@@ -46,9 +46,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status serialize_one_cell_to_json(const IColumn& column, int64_t row_num, BufferWritable& bw,
FormatOptions& options) const override;
Status deserialize_one_cell_from_json(IColumn& column, Slice& slice,
@@ -83,12 +80,6 @@ public:
void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
int64_t row_num) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
} // namespace vectorized
} // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
index 930d30dacc7..47eac3bc600 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
@@ -35,11 +35,10 @@ namespace doris {
namespace vectorized {
#include "common/compile_check_begin.h"
-template <bool is_binary_format>
-Status DataTypeJsonbSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeJsonbSerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
auto& data = assert_cast<const ColumnString&>(column);
const auto col_index = index_check_const(row_idx, col_const);
const auto jsonb_val = data.get_data_at(col_index);
@@ -57,20 +56,6 @@ Status DataTypeJsonbSerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeJsonbSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeJsonbSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeJsonbSerDe::serialize_column_to_json(const IColumn& column, int64_t start_idx,
int64_t end_idx, BufferWritable& bw,
FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.h b/be/src/vec/data_types/serde/data_type_jsonb_serde.h
index f53df1d07b8..8df44f5a454 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.h
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.h
@@ -44,9 +44,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_arrow(const IColumn& column, const NullMap* null_map,
arrow::ArrayBuilder* array_builder, int64_t start, int64_t end,
const cctz::time_zone& ctz) const override;
@@ -89,12 +86,6 @@ public:
FieldInfo& info);
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
void convert_jsonb_to_rapidjson(const JsonbValue& val, rapidjson::Value& target,
diff --git a/be/src/vec/data_types/serde/data_type_map_serde.cpp b/be/src/vec/data_types/serde/data_type_map_serde.cpp
index 1a1068b34e3..91a63239d5e 100644
--- a/be/src/vec/data_types/serde/data_type_map_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_map_serde.cpp
@@ -419,91 +419,11 @@ Status DataTypeMapSerDe::read_column_from_arrow(IColumn& column, const arrow::Ar
return Status::OK();
}
-template <bool is_binary_format>
-Status DataTypeMapSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- const auto& map_column = assert_cast<const ColumnMap&>(column);
- const IColumn& nested_keys_column = map_column.get_keys();
- const IColumn& nested_values_column = map_column.get_values();
- bool is_key_string = remove_nullable(nested_keys_column.get_ptr())->is_column_string();
- bool is_val_string = remove_nullable(nested_values_column.get_ptr())->is_column_string();
-
- const auto col_index = index_check_const(row_idx, col_const);
- result.open_dynamic_mode();
- if (0 != result.push_string("{", 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- const auto& offsets = map_column.get_offsets();
- for (auto j = offsets[col_index - 1]; j < offsets[col_index]; ++j) {
- if (j != offsets[col_index - 1]) {
- if (0 != result.push_string(options.mysql_collection_delim.c_str(),
- options.mysql_collection_delim.size())) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
- if (nested_keys_column.is_null_at(j)) {
- if (0 != result.push_string(options.null_format, options.null_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (is_key_string && options.wrapper_len > 0) {
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- RETURN_IF_ERROR(key_serde->write_column_to_mysql(nested_keys_column, result, j,
- false, options));
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- RETURN_IF_ERROR(key_serde->write_column_to_mysql(nested_keys_column, result, j,
- false, options));
- }
- }
- if (0 != result.push_string(&options.map_key_delim, 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- if (nested_values_column.is_null_at(j)) {
- if (0 != result.push_string(options.null_format, options.null_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (is_val_string && options.wrapper_len > 0) {
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j,
- false, options));
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j,
- false, options));
- }
- }
- }
- if (0 != result.push_string("}", 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- result.close_dynamic_mode();
- return Status::OK();
-}
-
Status DataTypeMapSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
+ MysqlRowBinaryBuffer& result, int64_t row_idx,
+ bool col_const,
const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeMapSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer, int64_t row_idx,
- bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+ return Status::NotSupported("Map type does not support write to mysql binary format");
}
Status DataTypeMapSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_map_serde.h b/be/src/vec/data_types/serde/data_type_map_serde.h
index 241564bcaf9..4d0fd4cb6f8 100644
--- a/be/src/vec/data_types/serde/data_type_map_serde.h
+++ b/be/src/vec/data_types/serde/data_type_map_serde.h
@@ -89,9 +89,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -118,11 +115,6 @@ public:
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
template <bool is_strict_mode>
Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
diff --git a/be/src/vec/data_types/serde/data_type_nothing_serde.h b/be/src/vec/data_types/serde/data_type_nothing_serde.h
index a67469deec1..6d3a6e50a27 100644
--- a/be/src/vec/data_types/serde/data_type_nothing_serde.h
+++ b/be/src/vec/data_types/serde/data_type_nothing_serde.h
@@ -97,12 +97,6 @@ public:
return Status::NotSupported("write_column_to_mysql with type " + column.get_name());
}
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override {
- return Status::NotSupported("write_column_to_mysql with type " + column.get_name());
- }
-
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end,
diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
index 187a5c4e27d..1668cbfcf88 100644
--- a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
@@ -401,11 +401,10 @@ bool DataTypeNullableSerDe::write_column_to_hive_text(const IColumn& column, Buf
}
}
-template <bool is_binary_format>
-Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeNullableSerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
const auto& col = assert_cast<const ColumnNullable&>(column);
const auto col_index = index_check_const(row_idx, col_const);
if (col.has_null() && col.is_null_at(col_index)) {
@@ -414,26 +413,12 @@ Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column,
}
} else {
const auto& nested_col = col.get_nested_column();
- RETURN_IF_ERROR(nested_serde->write_column_to_mysql(nested_col, result, col_index,
- col_const, options));
+ RETURN_IF_ERROR(nested_serde->write_column_to_mysql_binary(nested_col, result, col_index,
+ col_const, options));
}
return Status::OK();
}
-Status DataTypeNullableSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeNullableSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeNullableSerDe::write_column_to_orc(const std::string& timezone,
const IColumn& column, const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.h b/be/src/vec/data_types/serde/data_type_nullable_serde.h
index 5033f83cc67..e8ef275f2e5 100644
--- a/be/src/vec/data_types/serde/data_type_nullable_serde.h
+++ b/be/src/vec/data_types/serde/data_type_nullable_serde.h
@@ -88,9 +88,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
int64_t row_idx) const override;
@@ -125,11 +122,6 @@ public:
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
DataTypeSerDeSPtr nested_serde;
};
#include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_number_serde.cpp b/be/src/vec/data_types/serde/data_type_number_serde.cpp
index 92c89ff1011..15cb6a0bb5b 100644
--- a/be/src/vec/data_types/serde/data_type_number_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_number_serde.cpp
@@ -461,11 +461,10 @@ void DataTypeNumberSerDe<T>::insert_column_last_value_multiple_times(IColumn& co
}
template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeNumberSerDe<T>::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeNumberSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& result,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
int buf_ret = 0;
auto& data = assert_cast<const ColumnType&>(column).get_data();
const auto col_index = index_check_const(row_idx, col_const);
@@ -506,22 +505,6 @@ Status DataTypeNumberSerDe<T>::_write_column_to_mysql(const IColumn& column,
}
}
-template <PrimitiveType T>
-Status DataTypeNumberSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeNumberSerDe<T>::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
#define WRITE_INTEGRAL_COLUMN_TO_ORC(ORC_TYPE) \
ORC_TYPE* cur_batch = dynamic_cast<ORC_TYPE*>(orc_col_batch); \
for (size_t row_id = start; row_id < end; row_id++) { \
diff --git a/be/src/vec/data_types/serde/data_type_number_serde.h b/be/src/vec/data_types/serde/data_type_number_serde.h
index c3da442d05c..cbd4c014cf6 100644
--- a/be/src/vec/data_types/serde/data_type_number_serde.h
+++ b/be/src/vec/data_types/serde/data_type_number_serde.h
@@ -119,10 +119,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
-
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena& arena) const override;
@@ -145,12 +141,6 @@ public:
static const uint8_t* deserialize_binary_to_field(const uint8_t* data, Field& field,
FieldInfo& info);
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
template <PrimitiveType T>
diff --git a/be/src/vec/data_types/serde/data_type_quantilestate_serde.h b/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
index 1b7c8d455eb..af9ae56ced1 100644
--- a/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
+++ b/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
@@ -125,15 +125,10 @@ public:
"read_column_from_arrow with type " + column.get_name());
}
- Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
+ Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& result,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
- }
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+ return Status::NotSupported("write_column_to_mysql_binary with type " + column.get_name());
}
bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -190,38 +185,7 @@ public:
data.serialize((uint8_t*)result.data());
bw.write(result.data(), result.size());
}
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
-
-// QuantileState is binary data which is not shown by mysql
-template <bool is_binary_format>
-Status DataTypeQuantileStateSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- auto& data_column = reinterpret_cast<const ColumnQuantileState&>(column);
-
- if (_return_object_as_string) {
- const auto col_index = index_check_const(row_idx, col_const);
- auto& quantile_value = const_cast<QuantileState&>(data_column.get_element(col_index));
- size_t size = quantile_value.get_serialized_size();
- std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
- quantile_value.serialize((uint8_t*)buf.get());
- if (0 != result.push_string(buf.get(), size)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (0 != result.push_null()) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
- return Status::OK();
-}
#include "common/compile_check_end.h"
} // namespace vectorized
} // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_serde.h b/be/src/vec/data_types/serde/data_type_serde.h
index 61c56cc9f82..e98460dc795 100644
--- a/be/src/vec/data_types/serde/data_type_serde.h
+++ b/be/src/vec/data_types/serde/data_type_serde.h
@@ -414,23 +414,6 @@ public:
virtual void read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg) const = 0;
- // MySQL serializer and deserializer
-
- template <bool is_binary_format>
- Status write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& row_buffer, int64_t row_idx,
- bool col_const, const FormatOptions& options) const {
- if constexpr (is_binary_format) {
- return write_column_to_mysql_binary(column, row_buffer, row_idx, col_const, options);
- } else {
- return write_column_to_mysql_text(column, row_buffer, row_idx, col_const, options);
- }
- }
-
- virtual Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const = 0;
-
// return true if output as string
// return false if output null
virtual bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
diff --git a/be/src/vec/data_types/serde/data_type_string_serde.cpp b/be/src/vec/data_types/serde/data_type_string_serde.cpp
index f69c7a79aa2..a6b5f765e34 100644
--- a/be/src/vec/data_types/serde/data_type_string_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_string_serde.cpp
@@ -315,19 +315,6 @@ Status DataTypeStringSerDeBase<ColumnType>::read_column_from_arrow(
return Status::OK();
}
-template <typename ColumnType>
-Status DataTypeStringSerDeBase<ColumnType>::write_column_to_mysql_binary(
- const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-template <typename ColumnType>
-Status DataTypeStringSerDeBase<ColumnType>::write_column_to_mysql_text(
- const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
template <typename ColumnType>
Status DataTypeStringSerDeBase<ColumnType>::write_column_to_orc(
const std::string& timezone, const IColumn& column, const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_string_serde.h b/be/src/vec/data_types/serde/data_type_string_serde.h
index 880a14f11c3..7f849df74cd 100644
--- a/be/src/vec/data_types/serde/data_type_string_serde.h
+++ b/be/src/vec/data_types/serde/data_type_string_serde.h
@@ -203,13 +203,14 @@ public:
Status read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start,
int64_t end, const cctz::time_zone& ctz) const override;
- Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
+ Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& result,
int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
-
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
+ const FormatOptions& options) const override {
+ const auto col_index = index_check_const(row_idx, col_const);
+ const auto string_val = assert_cast<const ColumnType&>(column).get_data_at(col_index);
+ result.push_string(string_val.data, string_val.size);
+ return Status::OK();
+ }
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -256,17 +257,6 @@ public:
}
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- const auto col_index = index_check_const(row_idx, col_const);
- const auto string_val = assert_cast<const ColumnType&>(column).get_data_at(col_index);
- result.push_string(string_val.data, string_val.size);
- return Status::OK();
- }
};
using DataTypeStringSerDe = DataTypeStringSerDeBase<ColumnString>;
diff --git a/be/src/vec/data_types/serde/data_type_struct_serde.cpp b/be/src/vec/data_types/serde/data_type_struct_serde.cpp
index 85dd0c12eb1..f5c22d08fcd 100644
--- a/be/src/vec/data_types/serde/data_type_struct_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_struct_serde.cpp
@@ -429,81 +429,11 @@ Status DataTypeStructSerDe::read_column_from_arrow(IColumn& column, const arrow:
return Status::OK();
}
-template <bool is_binary_format>
-Status DataTypeStructSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- const auto& col = assert_cast<const ColumnStruct&, TypeCheckOnRelease::DISABLE>(column);
- const auto col_index = index_check_const(row_idx, col_const);
- result.open_dynamic_mode();
- if (0 != result.push_string("{", 1)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- bool begin = true;
- for (size_t j = 0; j < elem_serdes_ptrs.size(); ++j) {
- if (!begin) {
- if (0 != result.push_string(options.mysql_collection_delim.c_str(),
- options.mysql_collection_delim.size())) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- }
-
- // eg: `"col_name": `
- // eg: `col_name=`
- std::string col_name;
- if (options.wrapper_len > 0) {
- col_name =
- options.nested_string_wrapper + elem_names[j] + options.nested_string_wrapper;
- } else {
- col_name = elem_names[j];
- }
- col_name += options.map_key_delim;
- if (0 != result.push_string(col_name.c_str(), col_name.length())) {
- return Status::InternalError("pack mysql buffer failed.");
- }
-
- if (col.get_column_ptr(j)->is_null_at(col_index)) {
- if (0 != result.push_string(options.null_format, options.null_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- if (remove_nullable(col.get_column_ptr(j))->is_column_string() &&
- options.wrapper_len > 0) {
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- RETURN_IF_ERROR(elem_serdes_ptrs[j]->write_column_to_mysql(
- col.get_column(j), result, col_index, false, options));
- if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- } else {
- RETURN_IF_ERROR(elem_serdes_ptrs[j]->write_column_to_mysql(
- col.get_column(j), result, col_index, false, options));
- }
- }
- begin = false;
- }
- if (UNLIKELY(0 != result.push_string("}", 1))) {
- return Status::InternalError("pack mysql buffer failed.");
- }
- result.close_dynamic_mode();
- return Status::OK();
-}
-
Status DataTypeStructSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
+ MysqlRowBinaryBuffer& result,
int64_t row_idx, bool col_const,
const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeStructSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+ return Status::NotSupported("Struct type does not support write to mysql binary format");
}
Status DataTypeStructSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_struct_serde.h b/be/src/vec/data_types/serde/data_type_struct_serde.h
index c31d423b93c..6c7ce49b6ff 100644
--- a/be/src/vec/data_types/serde/data_type_struct_serde.h
+++ b/be/src/vec/data_types/serde/data_type_struct_serde.h
@@ -90,9 +90,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -122,16 +119,6 @@ public:
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, bool return_object_data_as_binary,
- std::vector<MysqlRowBuffer<is_binary_format>>& result,
- int64_t row_idx, int start, int end, bool col_const,
- const FormatOptions& options) const;
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
template <bool is_strict_mode>
Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
diff --git a/be/src/vec/data_types/serde/data_type_time_serde.cpp b/be/src/vec/data_types/serde/data_type_time_serde.cpp
index b726ad90e20..2e2da4ac076 100644
--- a/be/src/vec/data_types/serde/data_type_time_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_time_serde.cpp
@@ -28,22 +28,9 @@ namespace doris::vectorized {
#include "common/compile_check_begin.h"
Status DataTypeTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
+ MysqlRowBinaryBuffer& result,
int64_t row_idx, bool col_const,
const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-Status DataTypeTimeV2SerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-template <bool is_binary_format>
-Status DataTypeTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
const auto& data = assert_cast<const ColumnTimeV2&>(column).get_data();
const auto col_index = index_check_const(row_idx, col_const);
// _nesting_level >= 2 means this time is in complex type
diff --git a/be/src/vec/data_types/serde/data_type_time_serde.h b/be/src/vec/data_types/serde/data_type_time_serde.h
index 284a49927ef..8184e0eed09 100644
--- a/be/src/vec/data_types/serde/data_type_time_serde.h
+++ b/be/src/vec/data_types/serde/data_type_time_serde.h
@@ -35,9 +35,6 @@ public:
Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
Status from_string(StringRef& str, IColumn& column,
const FormatOptions& options) const override;
@@ -74,11 +71,6 @@ public:
int get_scale() const override { return _scale; }
private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
-
int _scale;
};
#include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp b/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
index 23cf254affb..f22b0b67157 100644
--- a/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
@@ -37,24 +37,9 @@ void DataTypeVarbinarySerDe::read_one_cell_from_jsonb(IColumn& column,
}
Status DataTypeVarbinarySerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
+ MysqlRowBinaryBuffer& result,
int64_t row_idx, bool col_const,
const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeVarbinarySerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <bool is_binary_format>
-Status DataTypeVarbinarySerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
auto col_index = index_check_const(row_idx, col_const);
auto data = assert_cast<const ColumnVarbinary&>(column).get_data()[col_index];
diff --git a/be/src/vec/data_types/serde/data_type_varbinary_serde.h b/be/src/vec/data_types/serde/data_type_varbinary_serde.h
index 53ad366d9ab..418ab883207 100644
--- a/be/src/vec/data_types/serde/data_type_varbinary_serde.h
+++ b/be/src/vec/data_types/serde/data_type_varbinary_serde.h
@@ -86,21 +86,11 @@ public:
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
-
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena& arena) const override;
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
#include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_variant_serde.cpp b/be/src/vec/data_types/serde/data_type_variant_serde.cpp
index 7acd58889d8..8ec3e5d2a90 100644
--- a/be/src/vec/data_types/serde/data_type_variant_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_variant_serde.cpp
@@ -40,12 +40,10 @@ namespace doris {
namespace vectorized {
#include "common/compile_check_begin.h"
-template <bool is_binary_format>
-
-Status DataTypeVariantSerDe::_write_column_to_mysql(const IColumn& column,
- MysqlRowBuffer<is_binary_format>& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
+Status DataTypeVariantSerDe::write_column_to_mysql_binary(const IColumn& column,
+ MysqlRowBinaryBuffer& row_buffer,
+ int64_t row_idx, bool col_const,
+ const FormatOptions& options) const {
const auto& variant = assert_cast<const ColumnVariant&>(column);
// Serialize hierarchy types to json format
std::string buffer;
@@ -54,20 +52,6 @@ Status DataTypeVariantSerDe::_write_column_to_mysql(const IColumn& column,
return Status::OK();
}
-Status DataTypeVariantSerDe::write_column_to_mysql_binary(const IColumn& column,
- MysqlRowBinaryBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeVariantSerDe::write_column_to_mysql_text(const IColumn& column,
- MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const {
- return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
Status DataTypeVariantSerDe::serialize_column_to_json(const IColumn& column, int64_t start_idx,
int64_t end_idx, BufferWritable& bw,
FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_variant_serde.h b/be/src/vec/data_types/serde/data_type_variant_serde.h
index bb03aa97229..7840be02e79 100644
--- a/be/src/vec/data_types/serde/data_type_variant_serde.h
+++ b/be/src/vec/data_types/serde/data_type_variant_serde.h
@@ -76,20 +76,10 @@ public:
int64_t row_idx, bool col_const,
const FormatOptions& options) const override;
- Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const override;
-
Status write_column_to_orc(const std::string& timezone, const IColumn& column,
const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena& arena) const override;
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
- template <bool is_binary_format>
- Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
- int64_t row_idx, bool col_const,
- const FormatOptions& options) const;
};
#include "common/compile_check_end.h"
} // namespace vectorized
diff --git a/be/src/vec/sink/vmysql_result_writer.cpp b/be/src/vec/sink/vmysql_result_writer.cpp
index 9f6a2af472c..8d255b9c54a 100644
--- a/be/src/vec/sink/vmysql_result_writer.cpp
+++ b/be/src/vec/sink/vmysql_result_writer.cpp
@@ -33,9 +33,11 @@
#include "common/cast_set.h"
#include "common/compiler_util.h" // IWYU pragma: keep
#include "common/config.h"
+#include "runtime/define_primitive_type.h"
#include "runtime/result_block_buffer.h"
#include "runtime/runtime_state.h"
#include "runtime/types.h"
+#include "udf/udf.h"
#include "util/mysql_global.h"
#include "vec/aggregate_functions/aggregate_function.h"
#include "vec/columns/column.h"
@@ -174,43 +176,6 @@ Status VMysqlResultWriter<is_binary_format>::_set_options(
}
return Status::OK();
}
-
-void direct_write_to_mysql_result_string(std::string& mysql_rows, const char* str, size_t size) {
- // MySQL protocol length encoding:
- // <= 250: 1 byte for length
- // < 65536: 1 byte (252) + 2 bytes for length
- // < 16777216: 1 byte (253) + 3 bytes for length
- // >= 16777216: 1 byte (254) + 8 bytes for length
-
- char buf[16];
- if (size < 251ULL) {
- int1store(buf, size);
- mysql_rows.append(buf, 1);
- } else if (size < 65536ULL) {
- buf[0] = static_cast<char>(252);
- uint16_t temp16 = static_cast<uint16_t>(size);
- memcpy(buf + 1, &temp16, sizeof(temp16));
- mysql_rows.append(buf, 3);
- } else if (size < 16777216ULL) {
- buf[0] = static_cast<char>(253);
- int3store(buf + 1, size);
- mysql_rows.append(buf, 4);
- } else {
- buf[0] = static_cast<char>(254);
- uint64_t temp64 = static_cast<uint64_t>(size);
- memcpy(buf + 1, &temp64, sizeof(temp64));
- mysql_rows.append(buf, 9);
- }
-
- // Append string content
- mysql_rows.append(str, size);
-}
-
-void direct_write_to_mysql_result_null(std::string& mysql_rows) {
- // MySQL protocol for NULL value is a single byte with value 251
- mysql_rows.push_back(static_cast<char>(251));
-}
-
template <bool is_binary_format>
Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* state, Block& block) {
Status status = Status::OK();
@@ -221,15 +186,12 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
uint64_t bytes_sent = 0;
{
SCOPED_TIMER(_convert_tuple_timer);
- MysqlRowBuffer<is_binary_format> row_buffer;
- if constexpr (is_binary_format) {
- row_buffer.start_binary_row(_output_vexpr_ctxs.size());
- }
struct Arguments {
const IColumn* column;
bool is_const;
DataTypeSerDeSPtr serde;
+ PrimitiveType type;
};
const size_t num_cols = _output_vexpr_ctxs.size();
@@ -256,7 +218,8 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
serde = block.get_by_position(col_idx).type->get_serde();
}
serde->set_return_object_as_string(output_object_data());
- arguments.emplace_back(column_ptr.get(), col_const, serde);
+ arguments.emplace_back(column_ptr.get(), col_const, serde,
+ block.get_by_position(col_idx).type->get_primitive_type());
}
for (size_t col_idx = 0; col_idx < num_cols; ++col_idx) {
@@ -272,6 +235,8 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
auto mysql_output_tmp_col = ColumnString::create();
BufferWriter write_buffer(*mysql_output_tmp_col);
size_t write_buffer_index = 0;
+ // For non-binary format, we need to call different serialization interfaces
+ // write_column_to_mysql/presto/hive text
if (!is_binary_format) {
const auto& serde_dialect = state->query_options().serde_dialect;
auto write_to_text = [serde_dialect](DataTypeSerDeSPtr& serde, const IColumn* column,
@@ -304,20 +269,43 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
bytes_sent += mysql_rows.size();
}
} else {
+ MysqlRowBinaryBuffer row_buffer;
+
+ row_buffer.start_binary_row(_output_vexpr_ctxs.size());
+
for (int row_idx = 0; row_idx < num_rows; ++row_idx) {
for (size_t col_idx = 0; col_idx < num_cols; ++col_idx) {
- RETURN_IF_ERROR(arguments[col_idx].serde->write_column_to_mysql(
- *(arguments[col_idx].column), row_buffer, row_idx,
- arguments[col_idx].is_const, _options));
+ auto type = arguments[col_idx].type;
+ if (type == PrimitiveType::TYPE_ARRAY || type == PrimitiveType::TYPE_MAP ||
+ type == PrimitiveType::TYPE_STRUCT ||
+ type == PrimitiveType::TYPE_QUANTILE_STATE ||
+ type == PrimitiveType::TYPE_HLL || type == PrimitiveType::TYPE_BITMAP) {
+ // Complex types are not supported in binary format yet
+ // So use text format serialization interface here
+ const auto col_index =
+ index_check_const(row_idx, arguments[col_idx].is_const);
+ const auto* column = arguments[col_idx].column;
+ if (arguments[col_idx].serde->write_column_to_mysql_text(
+ *column, write_buffer, col_index)) {
+ write_buffer.commit();
+ auto str = mysql_output_tmp_col->get_data_at(write_buffer_index);
+ row_buffer.push_string(str.data, str.size);
+ write_buffer_index++;
+ } else {
+ row_buffer.push_null();
+ }
+
+ } else {
+ RETURN_IF_ERROR(arguments[col_idx].serde->write_column_to_mysql_binary(
+ *(arguments[col_idx].column), row_buffer, row_idx,
+ arguments[col_idx].is_const, _options));
+ }
}
- // copy MysqlRowBuffer to Thrift
result->result_batch.rows[row_idx].append(row_buffer.buf(), row_buffer.length());
bytes_sent += row_buffer.length();
row_buffer.reset();
- if constexpr (is_binary_format) {
- row_buffer.start_binary_row(_output_vexpr_ctxs.size());
- }
+ row_buffer.start_binary_row(_output_vexpr_ctxs.size());
}
}
}
diff --git a/be/src/vec/sink/writer/vfile_result_writer.cpp b/be/src/vec/sink/writer/vfile_result_writer.cpp
index 43b23f08842..6200eade979 100644
--- a/be/src/vec/sink/writer/vfile_result_writer.cpp
+++ b/be/src/vec/sink/writer/vfile_result_writer.cpp
@@ -56,6 +56,7 @@
#include "vec/core/block.h"
#include "vec/exprs/vexpr.h"
#include "vec/exprs/vexpr_context.h"
+#include "vec/functions/cast/cast_to_string.h"
#include "vec/runtime/vcsv_transformer.h"
#include "vec/runtime/vorc_transformer.h"
#include "vec/runtime/vparquet_transformer.h"
@@ -288,6 +289,12 @@ Status VFileResultWriter::_close_file_writer(bool done) {
return Status::OK();
}
+template <typename SRC>
+void direct_write_to_mysql_result_int(std::string& mysql_rows, const SRC& value) {
+ auto str = CastToString::from_number(value);
+ direct_write_to_mysql_result_string(mysql_rows, str.c_str(), str.size());
+}
+
Status VFileResultWriter::_send_result() {
if (_is_result_sent) {
return Status::OK();
@@ -302,29 +309,30 @@ Status VFileResultWriter::_send_result() {
// | WriteTimeSec | Varchar |
// | WriteSpeedKB | Varchar |
// The type of these field should be consistent with types defined in OutFileClause.java of FE.
- MysqlRowBuffer<> row_buffer;
- row_buffer.push_int(_file_idx); // FileNumber
- row_buffer.push_bigint(_written_rows_counter->value()); // TotalRows
- row_buffer.push_bigint(_written_data_bytes->value()); // FileSize
+
+ auto result = std::make_shared<TFetchDataResult>();
+ result->result_batch.rows.resize(1);
+ auto& mysql_output = result->result_batch.rows[0];
+
+ direct_write_to_mysql_result_int(mysql_output, _file_idx); // FileNumber
+ direct_write_to_mysql_result_int(mysql_output, _written_rows_counter->value()); // TotalRows
+ direct_write_to_mysql_result_int(mysql_output, _written_data_bytes->value()); // FileSize
std::string file_url;
_get_file_url(&file_url);
std::stringstream ss;
ss << file_url << "*";
file_url = ss.str();
- row_buffer.push_string(file_url.c_str(), file_url.length()); // URL
+ direct_write_to_mysql_result_string(mysql_output, file_url.c_str(),
+ file_url.length()); // URL
double write_time = _file_write_timer->value() / nons_to_second;
std::string formatted_write_time = fmt::format("{:.3f}", write_time);
- row_buffer.push_string(formatted_write_time.c_str(),
- formatted_write_time.length()); // WriteTimeSec
+ direct_write_to_mysql_result_string(mysql_output, formatted_write_time.c_str(),
+ formatted_write_time.length()); // WriteTimeSec
double write_speed = _get_write_speed(_written_data_bytes->value(), _file_write_timer->value());
std::string formatted_write_speed = fmt::format("{:.2f}", write_speed);
- row_buffer.push_string(formatted_write_speed.c_str(),
- formatted_write_speed.length()); // WriteSpeedKB
-
- auto result = std::make_shared<TFetchDataResult>();
- result->result_batch.rows.resize(1);
- result->result_batch.rows[0].assign(row_buffer.buf(), row_buffer.length());
+ direct_write_to_mysql_result_string(mysql_output, formatted_write_speed.c_str(),
+ formatted_write_speed.length()); // WriteSpeedKB
std::map<std::string, std::string> attach_infos;
attach_infos.insert(std::make_pair("FileNumber", std::to_string(_file_idx)));
diff --git a/be/test/util/mysql_row_buffer_test.cpp b/be/test/util/mysql_row_buffer_test.cpp
index 7f81d0031a0..328e64a5956 100644
--- a/be/test/util/mysql_row_buffer_test.cpp
+++ b/be/test/util/mysql_row_buffer_test.cpp
@@ -27,125 +27,8 @@
namespace doris {
-TEST(MysqlRowBufferTest, basic) {
- MysqlRowBuffer mrb;
-
- std::string s("test");
- mrb.push_tinyint(5);
- mrb.push_smallint(120);
- mrb.push_int(-30000);
- mrb.push_bigint(900000);
- mrb.push_unsigned_bigint(90000000);
- mrb.push_float(56.45);
- mrb.push_double(10.12);
- mrb.push_string(s.c_str(), 4);
- mrb.push_null();
-
- const char* buf = mrb.buf();
-
- // mem: size-data-size-data
- // 1-'5'-3-'120'-6-'-30000'-6-'900000'-8-'90000000'-5-'56.45'-5-'10.12'-4-'test'-251
- // 1b-1b-1b-3b--1b-----6b--1b----6b---1b-----8b----1b---5b---1b---5b---1b---4b---1b
- // 0 1 2 3 6 7 13 14 20 21 29 30 35 36 41 42 46
- EXPECT_EQ(47, mrb.length());
-
- EXPECT_EQ(1, *((int8_t*)(buf)));
- EXPECT_EQ(0, strncmp(buf + 1, "5", 1));
-
- EXPECT_EQ(3, *((int8_t*)(buf + 2)));
- EXPECT_EQ(0, strncmp(buf + 3, "120", 3));
-
- EXPECT_EQ(6, *((int8_t*)(buf + 6)));
- EXPECT_EQ(0, strncmp(buf + 7, "-30000", 6));
-
- EXPECT_EQ(6, *((int8_t*)(buf + 13)));
- EXPECT_EQ(0, strncmp(buf + 14, "900000", 6));
-
- EXPECT_EQ(8, *((int8_t*)(buf + 20)));
- EXPECT_EQ(0, strncmp(buf + 21, "90000000", 8));
-
- EXPECT_EQ(5, *((int8_t*)(buf + 29)));
- EXPECT_EQ(0, strncmp(buf + 30, "56.45", 5));
-
- EXPECT_EQ(5, *((int8_t*)(buf + 35)));
- EXPECT_EQ(0, strncmp(buf + 36, "10.12", 5));
-
- EXPECT_EQ(4, *((int8_t*)(buf + 41)));
- EXPECT_EQ(0, strncmp(buf + 42, "test", 4));
-
- EXPECT_EQ(251, *((uint8_t*)(buf + 46)));
-}
-
-TEST(MysqlRowBufferTest, dynamic_mode) {
- MysqlRowBuffer mrb;
-
- mrb.open_dynamic_mode();
-
- std::string s("test");
- mrb.push_tinyint(5);
- mrb.push_smallint(120);
- mrb.push_int(-30000);
- mrb.push_bigint(900000);
- mrb.push_unsigned_bigint(90000000);
- mrb.push_float(56.45);
- mrb.push_double(10.12);
- mrb.push_string(s.c_str(), 4);
- mrb.push_null();
-
- mrb.close_dynamic_mode();
-
- const char* buf = mrb.buf();
-
- // mem: size-data-data
- // 254-48-'5'-'120'-'-30000'-'900000'-'90000000'-'56.45'-'10.12'-'test'-''
- // 1b--8b-1b----3b-----6b-------6b--------8b-------5b------5b------4b---0b
- // 0 1 9 10 13 19 25 33 38 43 47
- EXPECT_EQ(47, mrb.length());
-
- EXPECT_EQ(254, *((uint8_t*)(buf)));
- EXPECT_EQ(38, *((int64_t*)(buf + 1)));
-
- EXPECT_EQ(0, strncmp(buf + 9, "5", 1));
- EXPECT_EQ(0, strncmp(buf + 10, "120", 3));
- EXPECT_EQ(0, strncmp(buf + 13, "-30000", 6));
- EXPECT_EQ(0, strncmp(buf + 19, "900000", 6));
- EXPECT_EQ(0, strncmp(buf + 25, "90000000", 8));
- EXPECT_EQ(0, strncmp(buf + 33, "56.45", 5));
- EXPECT_EQ(0, strncmp(buf + 38, "10.12", 5));
- EXPECT_EQ(0, strncmp(buf + 43, "test", 4));
-}
-
-TEST(MysqlRowBufferTest, dynamic_mode_mix) {
- MysqlRowBuffer mrb;
- int count = 585;
- // Each small int -32767 will occupy 7 bytes, 585 * 7 = 4095
- for (int i = 0; i < count; ++i) {
- mrb.push_smallint(-32767);
- }
-
- mrb.open_dynamic_mode();
- mrb.push_string("{", 1);
- mrb.close_dynamic_mode();
-
- // 4095 + 9 + 1
- EXPECT_EQ(4105, mrb.length());
-
- const char* buf = mrb.buf();
- for (int i = 0; i < count; ++i) {
- EXPECT_EQ(6, *((uint8_t*)(buf)));
- ++buf;
- EXPECT_EQ(0, strncmp(buf, "-32767", 6));
- buf += 6;
- }
- EXPECT_EQ(254, *((uint8_t*)(buf)));
- ++buf;
- EXPECT_EQ(1, *((int64_t*)(buf)));
- buf += 8;
- EXPECT_EQ(0, strncmp(buf, "{", 1));
-}
-
TEST(MysqlRowBufferTest, TestBinaryTimeCompressedEncoding) {
- MysqlRowBuffer<true> buffer;
+ MysqlRowBinaryBuffer buffer;
const char* buf = nullptr;
size_t offset = 0;
diff --git a/be/test/vec/data_types/common_data_type_serder_test.h b/be/test/vec/data_types/common_data_type_serder_test.h
index 0f5c20f9614..ae0756c278c 100644
--- a/be/test/vec/data_types/common_data_type_serder_test.h
+++ b/be/test/vec/data_types/common_data_type_serder_test.h
@@ -311,20 +311,6 @@ public:
}
}
- // assert mysql text format, now we just simple assert not to fatal or exception here
- static void assert_mysql_format(MutableColumns& load_cols, DataTypeSerDeSPtrs serders) {
- MysqlRowBuffer<false> row_buffer;
- for (size_t i = 0; i < load_cols.size(); ++i) {
- auto& col = load_cols[i];
- for (size_t j = 0; j < col->size(); ++j) {
- Status st;
- EXPECT_NO_FATAL_FAILURE(
- st = serders[i]->write_column_to_mysql(*col, row_buffer, j, false, {}));
- EXPECT_TRUE(st.ok()) << st.to_string();
- }
- }
- }
-
// assert arrow serialize
static void assert_arrow_format(MutableColumns& load_cols, DataTypes types) {
// make a block to write to arrow
diff --git a/be/test/vec/data_types/data_type_array_test.cpp b/be/test/vec/data_types/data_type_array_test.cpp
index 7ccdc64a90b..bea6604dfbd 100644
--- a/be/test/vec/data_types/data_type_array_test.cpp
+++ b/be/test/vec/data_types/data_type_array_test.cpp
@@ -485,11 +485,6 @@ TEST_F(DataTypeArrayTest, SerdeJsonbTest) {
CommonDataTypeSerdeTest::assert_jsonb_format(array_columns, serdes);
}
-TEST_F(DataTypeArrayTest, SerdeMysqlTest) {
- // insert from data csv and assert insert result
- CommonDataTypeSerdeTest::assert_mysql_format(array_columns, serdes);
-}
-
TEST_F(DataTypeArrayTest, SerializeDeserializeTest) {
// insert from data csv and assert insert result
CommonDataTypeTest::serialize_deserialize_assert(array_columns, array_types);
diff --git a/be/test/vec/data_types/data_type_ip_test.cpp b/be/test/vec/data_types/data_type_ip_test.cpp
index 5ca0ff18798..ef4cbe17914 100644
--- a/be/test/vec/data_types/data_type_ip_test.cpp
+++ b/be/test/vec/data_types/data_type_ip_test.cpp
@@ -233,23 +233,6 @@ TEST_F(DataTypeIPTest, SerdeJsonbTest) {
CommonDataTypeSerdeTest::assert_jsonb_format);
}
-TEST_F(DataTypeIPTest, SerdeMysqlAndArrowTest) {
- auto serde_ipv4 = dt_ipv4->get_serde(1);
- auto serde_ipv6 = dt_ipv6->get_serde(1);
- auto column_ipv4 = dt_ipv4->create_column();
- auto column_ipv6 = dt_ipv6->create_column();
-
- // insert from data csv and assert insert result
- MutableColumns ip_cols;
- ip_cols.push_back(column_ipv4->get_ptr());
- ip_cols.push_back(column_ipv6->get_ptr());
- DataTypeSerDeSPtrs serde = {dt_ipv4->get_serde(), dt_ipv6->get_serde()};
- CommonDataTypeSerdeTest::check_data(ip_cols, serde, ';', {1, 2}, data_files[0],
- CommonDataTypeSerdeTest::assert_mysql_format);
-
- CommonDataTypeSerdeTest::assert_arrow_format(ip_cols, {dt_ipv4, dt_ipv6});
-}
-
TEST_F(DataTypeIPTest, SerdeTOJsonInComplex) {
// make array<ip>
auto array_ipv4 = std::make_shared<DataTypeArray>(dt_ipv4);
diff --git a/be/test/vec/data_types/datetime_round_test.cpp b/be/test/vec/data_types/datetime_round_test.cpp
index edec6a7e4bf..bf680781a6f 100644
--- a/be/test/vec/data_types/datetime_round_test.cpp
+++ b/be/test/vec/data_types/datetime_round_test.cpp
@@ -90,37 +90,6 @@ static void from_thrift_checker(UInt32 scale, const String& input, const String&
EXPECT_EQ(datetime_ptr->to_string(*column, 1), expected);
}
-static void serialization_checker(UInt32 scale, const std::string& input,
- const std::string& expected) {
- std::shared_ptr<const DataTypeDateTimeV2> datetime_ptr =
- std::dynamic_pointer_cast<const DataTypeDateTimeV2>(
- DataTypeFactory::instance().create_data_type(
- doris::FieldType::OLAP_FIELD_TYPE_DATETIMEV2, 0, scale));
-
- StringRef rb(const_cast<char*>(input.c_str()), input.size());
- ColumnDateTimeV2::MutablePtr column = ColumnDateTimeV2::create(0);
- auto rt = datetime_ptr->from_string(rb, &(*column));
- EXPECT_TRUE(rt.ok());
- auto serde = std::dynamic_pointer_cast<DataTypeDateTimeV2SerDe>(datetime_ptr->get_serde());
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- rt = serde->write_column_to_mysql(*column, mysql_rb, 0, false, options);
- EXPECT_TRUE(rt.ok());
- auto elem_size = static_cast<uint8_t>(*mysql_rb.buf());
- if (elem_size != expected.size()) {
- std::cerr << "Left size " << elem_size << " right size " << expected.size() << " left str "
- << std::string_view(mysql_rb.buf() + 1, elem_size) << " right str " << expected
- << std::endl;
- ASSERT_TRUE(false); // terminate ut
- }
- EXPECT_EQ(std::string_view(mysql_rb.buf() + 1, expected.size()), expected);
-}
-
static std::multimap<size_t /*scale*/,
std::multimap<std::string /*input*/, std::string /*expected*/>>
scale_with_input_and_expected = {
@@ -412,14 +381,4 @@ TEST(DatetimeRountTest, test_datetime_round_behaviour_get_field) {
}
}
}
-
-TEST(DatetimeRountTest, test_datetime_round_behaviour_serialize) {
- {
- for (auto itr : scale_with_input_and_expected) {
- for (const auto& [input, expected] : itr.second) {
- serialization_checker(itr.first, input, expected);
- }
- }
- }
-}
} // namespace doris::vectorized
diff --git a/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp b/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
index 34198774ba7..895efd0efc3 100644
--- a/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
@@ -184,21 +184,12 @@ TEST_F(DataTypeJsonbSerDeTest, serdes) {
EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j));
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
{
// test write_column_to_mysql with binary format
- MysqlRowBuffer<true> mysql_rb;
+ MysqlRowBinaryBuffer mysql_rb;
for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
+ auto st = serde.write_column_to_mysql_binary(*source_column, mysql_rb, row_idx,
+ false, option);
EXPECT_TRUE(st.ok())
<< "Failed to write column to mysql with binary format: " << st;
}
diff --git a/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp b/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
index 05c5a72827f..70cf6158640 100644
--- a/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
@@ -42,60 +42,6 @@ public:
datatype_agg_state_hll_union->get_serde();
};
-TEST_F(AggStateSerdeTest, writeColumnToMysql) {
- auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
- column_fixed_length->insert_default();
- ASSERT_EQ(column_fixed_length->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- datatype_agg_state_serde_count->set_return_object_as_string(true);
- auto st = datatype_agg_state_serde_count->write_column_to_mysql(*column_fixed_length, mysql_rb,
- 0, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 9);
-
- column_fixed_length->resize(2);
- *((int64_t*)&(column_fixed_length->get_data()[column_fixed_length->item_size()])) = 22;
- datatype_agg_state_serde_count->set_return_object_as_string(true);
- st = datatype_agg_state_serde_count->write_column_to_mysql(*column_fixed_length, mysql_rb, 1,
- false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 18);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
-TEST_F(AggStateSerdeTest, writeColumnToMysql2) {
- auto column_string = ColumnString::create();
- column_string->insert_default();
- ASSERT_EQ(column_string->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- datatype_agg_state_serde_hll_union->set_return_object_as_string(true);
- auto st = datatype_agg_state_serde_hll_union->write_column_to_mysql(*column_string, mysql_rb, 0,
- false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 1);
-
- std::string str = "123";
- column_string->insert_data(str.c_str(), str.size());
- datatype_agg_state_serde_hll_union->set_return_object_as_string(true);
- st = datatype_agg_state_serde_hll_union->write_column_to_mysql(*column_string, mysql_rb, 1,
- false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 5);
- std::cout << "test write_column_to_mysql2 success" << std::endl;
-}
-
TEST_F(AggStateSerdeTest, writeOneCellToJsonb) {
auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
column_fixed_length->resize(1);
diff --git a/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp b/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
index d330dcd8dba..2987d6c9a35 100644
--- a/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
@@ -26,31 +26,6 @@
namespace doris::vectorized {
-TEST(BitmapSerdeTest, writeColumnToMysql) {
- auto bitmap_serde = std::make_shared<vectorized::DataTypeBitMapSerDe>(1);
- auto column_bitmap = ColumnBitmap::create();
- column_bitmap->insert_value(BitmapValue::empty_bitmap());
- ASSERT_EQ(column_bitmap->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- bitmap_serde->set_return_object_as_string(true);
- auto st = bitmap_serde->write_column_to_mysql(*column_bitmap, mysql_rb, 0, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 2);
-
- column_bitmap->insert_value(BitmapValue(123));
- bitmap_serde->set_return_object_as_string(true);
- st = bitmap_serde->write_column_to_mysql(*column_bitmap, mysql_rb, 1, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 8);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
TEST(BitmapSerdeTest, writeOneCellToJsonb) {
auto bitmap_serde = std::make_shared<vectorized::DataTypeBitMapSerDe>(1);
auto column_bitmap = ColumnBitmap::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp b/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
index b7b0b1ab94b..fa5a0729164 100644
--- a/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
@@ -177,15 +177,6 @@ TEST_F(DataTypeDateTimeV1SerDeTest, serdes) {
EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
};
test_func(*serde_date_v1, column_date_v1);
test_func(*serde_datetime_v1, column_datetime_v1_0);
diff --git a/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
index 6226d5cfd4f..31661c2441e 100644
--- a/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
@@ -204,15 +204,6 @@ TEST_F(DataTypeDateTimeV2SerDeTest, serdes) {
EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
};
test_func(*serde_datetime_v2_0, column_datetime_v2_0);
test_func(*serde_datetime_v2_5, column_datetime_v2_5);
diff --git a/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
index 697272ef847..1be5a6befba 100644
--- a/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
@@ -263,15 +263,6 @@ TEST_F(DataTypeDecimalSerDeTest, serdes) {
EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
};
test_func(*serde_decimal32_1, column_decimal32_1);
test_func(*serde_decimal32_2, column_decimal32_2);
diff --git a/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp b/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
index edad97d0254..d7e2a84208c 100644
--- a/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
@@ -25,34 +25,6 @@
namespace doris::vectorized {
-TEST(FixedLengthObjectSerdeTest, writeColumnToMysql) {
- auto fixed_length_serde = std::make_shared<vectorized::DataTypeFixedLengthObjectSerDe>(1);
- auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
- column_fixed_length->insert_default();
- ASSERT_EQ(column_fixed_length->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- fixed_length_serde->set_return_object_as_string(true);
- auto st = fixed_length_serde->write_column_to_mysql(*column_fixed_length, mysql_rb, 0, false,
- options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 9);
-
- column_fixed_length->resize(2);
- *((int64_t*)&(column_fixed_length->get_data()[column_fixed_length->item_size()])) = 22;
- fixed_length_serde->set_return_object_as_string(true);
- st = fixed_length_serde->write_column_to_mysql(*column_fixed_length, mysql_rb, 1, false,
- options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 18);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
TEST(FixedLengthObjectSerdeTest, writeOneCellToJsonb) {
auto fixed_length_serde = std::make_shared<vectorized::DataTypeFixedLengthObjectSerDe>(1);
auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
diff --git a/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp b/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
index dd851f1ddf3..bc522eba0b3 100644
--- a/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
@@ -27,33 +27,6 @@
namespace doris::vectorized {
-TEST(HLLSerdeTest, writeColumnToMysql) {
- auto hll_serde = std::make_shared<vectorized::DataTypeHLLSerDe>(1);
- auto column_hll = ColumnHLL::create();
- column_hll->insert_value(HyperLogLog::empty());
- ASSERT_EQ(column_hll->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- hll_serde->set_return_object_as_string(true);
- auto st = hll_serde->write_column_to_mysql(*column_hll, mysql_rb, 0, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 2);
-
- HyperLogLog hll;
- hll.update(123);
- column_hll->insert_value(hll);
- hll_serde->set_return_object_as_string(true);
- st = hll_serde->write_column_to_mysql(*column_hll, mysql_rb, 1, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 13);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
TEST(HLLSerdeTest, writeOneCellToJsonb) {
auto hll_serde = std::make_shared<vectorized::DataTypeHLLSerDe>(1);
auto column_hll = ColumnHLL::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_number_test.cpp b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
index 360671eaa97..43186d1fa26 100644
--- a/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
@@ -274,15 +274,6 @@ TEST_F(DataTypeNumberSerDeTest, serdes) {
}
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
};
test_func(*serde_float32, column_float32);
test_func(*serde_float64, column_float64);
diff --git a/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp b/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
index 481067212a2..bb74794836d 100644
--- a/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
@@ -25,35 +25,6 @@
namespace doris::vectorized {
-TEST(QuantileStateSerdeTest, writeColumnToMysql) {
- auto quantile_state_serde = std::make_shared<vectorized::DataTypeQuantileStateSerDe>(1);
- auto column_quantile_state = ColumnQuantileState::create();
- column_quantile_state->insert_value(QuantileState());
- ASSERT_EQ(column_quantile_state->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- quantile_state_serde->set_return_object_as_string(true);
- auto st = quantile_state_serde->write_column_to_mysql(*column_quantile_state, mysql_rb, 0,
- false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 6);
-
- QuantileState quantile_state;
- quantile_state.add_value(123);
- column_quantile_state->insert_value(quantile_state);
- quantile_state_serde->set_return_object_as_string(true);
- st = quantile_state_serde->write_column_to_mysql(*column_quantile_state, mysql_rb, 1, false,
- options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 20);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
TEST(QuantileStateSerdeTest, writeOneCellToJsonb) {
auto quantile_state_serde = std::make_shared<vectorized::DataTypeQuantileStateSerDe>(1);
auto column_quantile_state = ColumnQuantileState::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_string_test.cpp b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
index 06e8f219c7a..81c25d79cfd 100644
--- a/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
@@ -186,15 +186,6 @@ TEST_F(DataTypeStringSerDeTest, serdes) {
EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j));
}
}
- {
- // test write_column_to_mysql
- MysqlRowBuffer<false> mysql_rb;
- for (int row_idx = 0; row_idx < row_count; ++row_idx) {
- auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
- option);
- EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
- }
- }
};
test_func(*serde_str, column_str32);
}
diff --git a/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp b/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp
deleted file mode 100644
index 2c88a663a81..00000000000
--- a/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include <arrow/array/builder_base.h>
-#include <gtest/gtest.h>
-
-#include <string>
-
-#include "runtime/primitive_type.h"
-#include "util/slice.h"
-#include "vec/columns/column_complex.h"
-#include "vec/data_types/common_data_type_serder_test.h"
-#include "vec/data_types/serde/data_type_time_serde.h"
-
-namespace doris::vectorized {
-
-TEST(TimeV2SerdeTest, writeColumnToMysql) {
- auto timev2_serde = std::make_shared<vectorized::DataTypeTimeV2SerDe>(1);
- auto column_timev2 = ColumnTimeV2::create();
- column_timev2->insert_default();
- ASSERT_EQ(column_timev2->size(), 1);
- MysqlRowBuffer<false> mysql_rb;
- DataTypeSerDe::FormatOptions options;
- options.nested_string_wrapper = "\"";
- options.wrapper_len = 1;
- options.map_key_delim = ':';
- options.null_format = "null";
- options.null_len = 4;
- auto st = timev2_serde->write_column_to_mysql(*column_timev2, mysql_rb, 0, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 11);
-
- std::string time_str = "11:00:00";
- column_timev2->insert_data(time_str.c_str(), time_str.size());
- st = timev2_serde->write_column_to_mysql(*column_timev2, mysql_rb, 1, false, options);
- EXPECT_TRUE(st.ok());
- ASSERT_EQ(mysql_rb.length(), 22);
- std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
-} // namespace doris::vectorized
diff --git a/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp b/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
index 94f8d04e724..4c5f6dfc80c 100644
--- a/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
@@ -155,30 +155,12 @@ TEST_F(DataTypeVarbinarySerDeTest, MysqlTextAndBinaryAndConst) {
DataTypeSerDe::FormatOptions opt;
- // text protocol
- {
- MysqlRowBuffer<false> rb;
- for (int i = 0; i < static_cast<int>(vals.size()); ++i) {
- auto st = serde.write_column_to_mysql(*col, rb, i, false, opt);
- EXPECT_TRUE(st.ok()) << st.to_string();
- }
- EXPECT_GT(rb.length(), 0);
- const unsigned char* buf = reinterpret_cast<const unsigned char*>(rb.buf());
- EXPECT_EQ(buf[0], 1);
- EXPECT_EQ(buf[2], 3);
- MysqlRowBuffer<false> rb_const;
- for (int i = 0; i < 3; ++i) {
- auto st = serde.write_column_to_mysql(*col, rb_const, i, true, opt);
- EXPECT_TRUE(st.ok()) << st.to_string();
- }
- EXPECT_EQ(reinterpret_cast<const unsigned char*>(rb_const.buf())[0], 1);
- }
// binary protocol (smoke)
{
- MysqlRowBuffer<true> rb;
+ MysqlRowBinaryBuffer rb;
rb.start_binary_row(vals.size());
for (int i = 0; i < static_cast<int>(vals.size()); ++i) {
- auto st = serde.write_column_to_mysql(*col, rb, i, false, opt);
+ auto st = serde.write_column_to_mysql_binary(*col, rb, i, false, opt);
EXPECT_TRUE(st.ok()) << st.to_string();
}
EXPECT_GT(rb.length(), 0);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org