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 3feea9095ae branch-4.0: [Refactor](Mysql output)Refactor PRESTO and
HIVE dialect output #58279 (#58481)
3feea9095ae is described below
commit 3feea9095ae9169e3d16b84aa09b5aad294d7fe1
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Nov 28 16:36:59 2025 +0800
branch-4.0: [Refactor](Mysql output)Refactor PRESTO and HIVE dialect output
#58279 (#58481)
Cherry-picked from #58279
Co-authored-by: Mryange <[email protected]>
---
.../vec/data_types/serde/data_type_array_serde.cpp | 40 ++++++++++++++++++
.../vec/data_types/serde/data_type_array_serde.h | 6 +++
.../vec/data_types/serde/data_type_jsonb_serde.cpp | 14 +++++++
.../vec/data_types/serde/data_type_jsonb_serde.h | 3 ++
.../vec/data_types/serde/data_type_map_serde.cpp | 48 ++++++++++++++++++++++
be/src/vec/data_types/serde/data_type_map_serde.h | 5 +++
.../data_types/serde/data_type_nullable_serde.cpp | 38 +++++++++++++++++
.../data_types/serde/data_type_nullable_serde.h | 6 +++
.../data_types/serde/data_type_number_serde.cpp | 30 ++++++++++++++
.../vec/data_types/serde/data_type_number_serde.h | 5 +++
be/src/vec/data_types/serde/data_type_serde.cpp | 12 ++++++
be/src/vec/data_types/serde/data_type_serde.h | 6 +++
.../data_types/serde/data_type_string_serde.cpp | 11 +++++
.../vec/data_types/serde/data_type_string_serde.h | 3 ++
.../data_types/serde/data_type_struct_serde.cpp | 34 +++++++++++++++
.../vec/data_types/serde/data_type_struct_serde.h | 6 +++
be/src/vec/sink/vmysql_result_writer.cpp | 22 +++++++---
17 files changed, 283 insertions(+), 6 deletions(-)
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 431fc153a4d..ca80647344d 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
@@ -596,4 +596,44 @@ void DataTypeArraySerDe::to_string(const IColumn& column,
size_t row_num,
bw.write("]", 1);
}
+bool DataTypeArraySerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& data_column = assert_cast<const ColumnArray&>(column);
+ const auto& offsets = data_column.get_offsets();
+
+ size_t offset = offsets[row_idx - 1];
+ size_t next_offset = offsets[row_idx];
+
+ const IColumn& nested_column = data_column.get_data();
+ bw.write("[", 1);
+ for (size_t i = offset; i < next_offset; ++i) {
+ if (i != offset) {
+ bw.write(", ", 2);
+ }
+ nested_serde->write_column_to_presto_text(nested_column, bw, i);
+ }
+ bw.write("]", 1);
+ return true;
+}
+
+bool DataTypeArraySerDe::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& data_column = assert_cast<const ColumnArray&>(column);
+ const auto& offsets = data_column.get_offsets();
+
+ size_t offset = offsets[row_idx - 1];
+ size_t next_offset = offsets[row_idx];
+
+ const IColumn& nested_column = data_column.get_data();
+ bw.write("[", 1);
+ for (size_t i = offset; i < next_offset; ++i) {
+ if (i != offset) {
+ bw.write(",", 1);
+ }
+ nested_serde->write_column_to_hive_text(nested_column, bw, i);
+ }
+ bw.write("]", 1);
+ return true;
+}
+
} // namespace doris::vectorized
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 d215a72a33e..a1657be8558 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
@@ -97,6 +97,12 @@ public:
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;
+
+ bool write_column_to_hive_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) 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;
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 609bab36e03..930d30dacc7 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
@@ -367,5 +367,19 @@ void DataTypeJsonbSerDe::to_string(const IColumn& column,
size_t row_num,
bw.write("NULL", 4);
}
}
+
+bool DataTypeJsonbSerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& col = assert_cast<const ColumnString&,
TypeCheckOnRelease::DISABLE>(column);
+ const auto& data_ref = col.get_data_at(row_idx);
+ if (data_ref.size > 0) {
+ std::string str = JsonbToJson::jsonb_to_json_string(data_ref.data,
data_ref.size);
+ bw.write(str.c_str(), str.size());
+ } else {
+ bw.write("NULL", 4);
+ }
+ return true;
+}
+
} // namespace vectorized
} // namespace doris
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 cab03032eea..f53df1d07b8 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
@@ -67,6 +67,9 @@ public:
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena&
arena) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
Status write_column_to_pb(const IColumn& column, PValues& result, int64_t
start,
int64_t end) const override;
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 22a6075f0d5..1a1068b34e3 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
@@ -715,5 +715,53 @@ void DataTypeMapSerDe::to_string(const IColumn& column,
size_t row_num, BufferWr
bw.write("}", 1);
}
+bool DataTypeMapSerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& map_column = assert_cast<const ColumnMap&>(column);
+ const ColumnArray::Offsets64& offsets = map_column.get_offsets();
+
+ size_t offset = offsets[row_idx - 1];
+ size_t next_offset = offsets[row_idx];
+
+ const IColumn& nested_keys_column = map_column.get_keys();
+ const IColumn& nested_values_column = map_column.get_values();
+ bw.write("{", 1);
+ for (size_t i = offset; i < next_offset; ++i) {
+ if (i != offset) {
+ bw.write(", ", 2);
+ }
+ key_serde->write_column_to_presto_text(nested_keys_column, bw, i);
+ bw.write("=", 1);
+ value_serde->write_column_to_presto_text(nested_values_column, bw, i);
+ }
+ bw.write("}", 1);
+
+ return true;
+}
+
+bool DataTypeMapSerDe::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& map_column = assert_cast<const ColumnMap&>(column);
+ const ColumnArray::Offsets64& offsets = map_column.get_offsets();
+
+ size_t offset = offsets[row_idx - 1];
+ size_t next_offset = offsets[row_idx];
+
+ const IColumn& nested_keys_column = map_column.get_keys();
+ const IColumn& nested_values_column = map_column.get_values();
+ bw.write("{", 1);
+ for (size_t i = offset; i < next_offset; ++i) {
+ if (i != offset) {
+ bw.write(",", 1);
+ }
+ key_serde->write_column_to_hive_text(nested_keys_column, bw, i);
+ bw.write(":", 1);
+ value_serde->write_column_to_hive_text(nested_values_column, bw, i);
+ }
+ bw.write("}", 1);
+
+ return true;
+}
+
} // namespace vectorized
} // namespace doris
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 f45e5e18177..241564bcaf9 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
@@ -97,6 +97,11 @@ public:
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena&
arena) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+ bool write_column_to_hive_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
void set_return_object_as_string(bool value) override {
DataTypeSerDe::set_return_object_as_string(value);
key_serde->set_return_object_as_string(value);
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 6e9b29c918b..187a5c4e27d 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
@@ -363,6 +363,44 @@ bool
DataTypeNullableSerDe::write_column_to_mysql_text(const IColumn& column, Bu
}
}
+bool DataTypeNullableSerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const
{
+ if (column.is_null_at(row_idx)) {
+ if (_nesting_level > 1) {
+ // if is nested type
+ // array: [abc, def, , NULL]
+ // map: {k1=NULL, k2=v3}
+ bw.write("NULL", 4);
+ return true;
+ } else {
+ // NULL
+ return false;
+ }
+ } else {
+ const auto& col = assert_cast<const ColumnNullable&>(column);
+ return
nested_serde->write_column_to_presto_text(col.get_nested_column(), bw, row_idx);
+ }
+}
+
+bool DataTypeNullableSerDe::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ if (column.is_null_at(row_idx)) {
+ if (_nesting_level > 1) {
+ // if is nested type
+ // array: ["abc","def","",null]
+ // map: {"k1":null,"k2":"v3"}
+ bw.write("null", 4);
+ return true;
+ } else {
+ // NULL
+ return false;
+ }
+ } else {
+ const auto& col = assert_cast<const ColumnNullable&>(column);
+ return
nested_serde->write_column_to_hive_text(col.get_nested_column(), bw, row_idx);
+ }
+}
+
template <bool is_binary_format>
Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column,
MysqlRowBuffer<is_binary_format>& result,
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 e85bea68a25..5033f83cc67 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
@@ -98,6 +98,12 @@ public:
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena&
arena) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
+ bool write_column_to_hive_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
void set_return_object_as_string(bool value) override {
DataTypeSerDe::set_return_object_as_string(value);
nested_serde->set_return_object_as_string(value);
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 753c863e8d4..92c89ff1011 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
@@ -931,6 +931,36 @@ void DataTypeNumberSerDe<T>::to_string(const IColumn&
column, size_t row_num,
}
}
+template <PrimitiveType T>
+bool DataTypeNumberSerDe<T>::write_column_to_presto_text(const IColumn&
column, BufferWritable& bw,
+ int64_t row_idx)
const {
+ auto& data = assert_cast<const ColumnType&,
TypeCheckOnRelease::DISABLE>(column).get_data();
+ value_to_string<T>(data[row_idx], bw, get_scale());
+ return true;
+}
+
+template <PrimitiveType T>
+bool DataTypeNumberSerDe<T>::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ auto& data = assert_cast<const ColumnType&,
TypeCheckOnRelease::DISABLE>(column).get_data();
+ if constexpr (is_date_type(T) || is_time_type(T) || is_ip(T)) {
+ if (_nesting_level > 1) {
+ bw.write('"');
+ }
+ value_to_string<T>(data[row_idx], bw, get_scale());
+ if (_nesting_level > 1) {
+ bw.write('"');
+ }
+ } else if constexpr (T == TYPE_BOOLEAN) {
+ // In Hive, boolean values are represented as 'true' and 'false'
strings.
+ std::string bool_value = data[row_idx] ? "true" : "false";
+ bw.write(bool_value.data(), bool_value.size());
+ } else {
+ value_to_string<T>(data[row_idx], bw, get_scale());
+ }
+ return true;
+}
+
template <PrimitiveType T>
void DataTypeNumberSerDe<T>::to_string_batch(const IColumn& column,
ColumnString& column_to) const {
auto& data = assert_cast<const ColumnType&>(column).get_data();
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 9af5498a8dd..c3da442d05c 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
@@ -130,6 +130,11 @@ public:
void write_one_cell_to_binary(const IColumn& src_column,
ColumnString::Chars& chars,
int64_t row_num) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+ bool write_column_to_hive_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
void to_string(const IColumn& column, size_t row_num, BufferWritable& bw)
const override;
void to_string_batch(const IColumn& column, ColumnString& column_to) const
override;
diff --git a/be/src/vec/data_types/serde/data_type_serde.cpp
b/be/src/vec/data_types/serde/data_type_serde.cpp
index 1eb86a78ea2..6a190140ae6 100644
--- a/be/src/vec/data_types/serde/data_type_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_serde.cpp
@@ -141,6 +141,18 @@ bool DataTypeSerDe::write_column_to_mysql_text(const
IColumn& column, BufferWrit
return true;
}
+bool DataTypeSerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ to_string(column, row_idx, bw);
+ return true;
+}
+
+bool DataTypeSerDe::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ to_string(column, row_idx, bw);
+ return true;
+}
+
const std::string DataTypeSerDe::NULL_IN_COMPLEX_TYPE = "null";
const std::string DataTypeSerDe::NULL_IN_CSV_FOR_ORDINARY_TYPE = "\\N";
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 03a71368cb4..61c56cc9f82 100644
--- a/be/src/vec/data_types/serde/data_type_serde.h
+++ b/be/src/vec/data_types/serde/data_type_serde.h
@@ -436,6 +436,12 @@ public:
virtual bool write_column_to_mysql_text(const IColumn& column,
BufferWritable& bw,
int64_t row_idx) const;
+ virtual bool write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const;
+
+ virtual bool write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const;
+
virtual Status write_column_to_mysql_binary(const IColumn& column,
MysqlRowBinaryBuffer&
row_buffer, int64_t row_idx,
bool col_const,
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 3b80d707151..f69c7a79aa2 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
@@ -448,6 +448,17 @@ void DataTypeStringSerDeBase<ColumnType>::to_string(const
IColumn& column, size_
}
}
+template <typename ColumnType>
+bool DataTypeStringSerDeBase<ColumnType>::write_column_to_presto_text(const
IColumn& column,
+
BufferWritable& bw,
+ int64_t
row_idx) const {
+ const auto& value =
+ assert_cast<const ColumnType&,
TypeCheckOnRelease::DISABLE>(column).get_data_at(
+ row_idx);
+ bw.write(value.data, value.size);
+ return true;
+}
+
template <typename ColumnType>
Status DataTypeStringSerDeBase<ColumnType>::from_string(StringRef& str,
IColumn& column,
const FormatOptions&
options) const {
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 5ef482d950e..880a14f11c3 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
@@ -215,6 +215,9 @@ public:
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena&
arena) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
void write_one_cell_to_binary(const IColumn& src_column,
ColumnString::Chars& chars,
int64_t row_num) const override {
const uint8_t type =
static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_STRING);
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 18b77fe2367..85dd0c12eb1 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
@@ -671,5 +671,39 @@ void DataTypeStructSerDe::to_string(const IColumn& column,
size_t row_num,
bw.write("}", 1);
}
+bool DataTypeStructSerDe::write_column_to_presto_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& struct_column = assert_cast<const ColumnStruct&>(column);
+ bw.write("{", 1);
+ for (size_t idx = 0; idx < elem_serdes_ptrs.size(); idx++) {
+ if (idx != 0) {
+ bw.write(", ", 2);
+ }
+ std::string col_name = elem_names[idx] + "=";
+ bw.write(col_name.c_str(), col_name.length());
+
elem_serdes_ptrs[idx]->write_column_to_presto_text(struct_column.get_column(idx),
bw,
+ row_idx);
+ }
+ bw.write("}", 1);
+ return true;
+}
+
+bool DataTypeStructSerDe::write_column_to_hive_text(const IColumn& column,
BufferWritable& bw,
+ int64_t row_idx) const {
+ const auto& struct_column = assert_cast<const ColumnStruct&>(column);
+ bw.write("{", 1);
+ for (size_t idx = 0; idx < elem_serdes_ptrs.size(); idx++) {
+ if (idx != 0) {
+ bw.write(",", 1);
+ }
+ std::string col_name = "\"" + elem_names[idx] + "\":";
+ bw.write(col_name.c_str(), col_name.length());
+
elem_serdes_ptrs[idx]->write_column_to_hive_text(struct_column.get_column(idx),
bw,
+ row_idx);
+ }
+ bw.write("}", 1);
+ return true;
+}
+
} // namespace vectorized
} // namespace doris
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 3d09f652f88..c31d423b93c 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
@@ -98,6 +98,12 @@ public:
const NullMap* null_map,
orc::ColumnVectorBatch* orc_col_batch,
int64_t start, int64_t end, vectorized::Arena&
arena) const override;
+ bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
+ bool write_column_to_hive_text(const IColumn& column, BufferWritable& bw,
+ int64_t row_idx) const override;
+
Status serialize_column_to_jsonb(const IColumn& from_column, int64_t
row_num,
JsonbWriter& writer) const override;
diff --git a/be/src/vec/sink/vmysql_result_writer.cpp
b/be/src/vec/sink/vmysql_result_writer.cpp
index fad638b0374..9f6a2af472c 100644
--- a/be/src/vec/sink/vmysql_result_writer.cpp
+++ b/be/src/vec/sink/vmysql_result_writer.cpp
@@ -269,20 +269,30 @@ Status
VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
num_rows, argument.column->get_name(),
argument.column->size());
}
}
-
- const auto& serde_dialect = state->query_options().serde_dialect;
-
auto mysql_output_tmp_col = ColumnString::create();
BufferWriter write_buffer(*mysql_output_tmp_col);
size_t write_buffer_index = 0;
- if (serde_dialect == TSerdeDialect::DORIS && !is_binary_format) {
+ if (!is_binary_format) {
+ const auto& serde_dialect = state->query_options().serde_dialect;
+ auto write_to_text = [serde_dialect](DataTypeSerDeSPtr& serde,
const IColumn* column,
+ BufferWriter& write_buffer,
size_t col_index) {
+ if (serde_dialect == TSerdeDialect::DORIS) {
+ return serde->write_column_to_mysql_text(*column,
write_buffer, col_index);
+ } else if (serde_dialect == TSerdeDialect::PRESTO) {
+ return serde->write_column_to_presto_text(*column,
write_buffer, col_index);
+ } else if (serde_dialect == TSerdeDialect::HIVE) {
+ return serde->write_column_to_hive_text(*column,
write_buffer, col_index);
+ } else {
+ return false;
+ }
+ };
+
for (int row_idx = 0; row_idx < num_rows; ++row_idx) {
auto& mysql_rows = result->result_batch.rows[row_idx];
for (size_t col_idx = 0; col_idx < num_cols; ++col_idx) {
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)) {
+ if (write_to_text(arguments[col_idx].serde, column,
write_buffer, col_index)) {
write_buffer.commit();
auto str =
mysql_output_tmp_col->get_data_at(write_buffer_index);
direct_write_to_mysql_result_string(mysql_rows,
str.data, str.size);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]