github-actions[bot] commented on code in PR #24554:
URL: https://github.com/apache/doris/pull/24554#discussion_r1379855159
##########
be/src/vec/data_types/data_type_time.h:
##########
@@ -59,6 +59,9 @@ class DataTypeTime final : public DataTypeNumberBase<Float64>
{
TPrimitiveType::type get_type_as_tprimitive_type() const override {
return TPrimitiveType::TIME;
}
+ doris::FieldType get_storage_field_type() const override {
Review Comment:
warning: method 'get_storage_field_type' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static doris::FieldType get_storage_field_type() override {
```
##########
be/src/vec/data_types/data_type_date_time.h:
##########
@@ -80,6 +80,10 @@ class DataTypeDateTime final : public
DataTypeNumberBase<Int64> {
return TPrimitiveType::DATETIME;
}
+ doris::FieldType get_storage_field_type() const override {
Review Comment:
warning: method 'get_storage_field_type' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static doris::FieldType get_storage_field_type() override {
```
##########
be/src/vec/data_types/data_type_date.h:
##########
@@ -53,6 +53,10 @@ class DataTypeDate final : public DataTypeNumberBase<Int64> {
TPrimitiveType::type get_type_as_tprimitive_type() const override {
return TPrimitiveType::DATE;
}
+
+ doris::FieldType get_storage_field_type() const override {
Review Comment:
warning: method 'get_storage_field_type' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static doris::FieldType get_storage_field_type() override {
```
##########
be/src/vec/data_types/serde/data_type_array_serde.cpp:
##########
@@ -222,6 +222,35 @@ void DataTypeArraySerDe::write_one_cell_to_jsonb(const
IColumn& column, JsonbWri
result.writeEndBinary();
}
+void DataTypeArraySerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ // vectorized::Field array = column[row_num];
Review Comment:
warning: method 'write_one_cell_to_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeArraySerDe::write_one_cell_to_json(const IColumn&
column, rapidjson::Value& result,
```
be/src/vec/data_types/serde/data_type_array_serde.cpp:229:
```diff
- int row_num) const {
+ int row_num) {
```
##########
be/src/vec/data_types/serde/data_type_jsonb_serde.cpp:
##########
@@ -119,5 +126,107 @@ Status DataTypeJsonbSerDe::write_column_to_orc(const
std::string& timezone, cons
return Status::NotSupported("write_column_to_orc with type [{}]",
column.get_name());
}
+static void convert_jsonb_to_rapidjson(const JsonbValue& val,
rapidjson::Value& target,
+ rapidjson::Document::AllocatorType&
allocator) {
+ // convert type of jsonb to rapidjson::Value
+ switch (val.type()) {
+ case JsonbType::T_True:
+ target.SetBool(true);
+ break;
+ case JsonbType::T_False:
+ target.SetBool(false);
+ break;
+ case JsonbType::T_Null:
+ target.SetNull();
+ break;
+ case JsonbType::T_Float:
+ target.SetFloat(static_cast<const JsonbFloatVal&>(val).val());
+ break;
+ case JsonbType::T_Double:
+ target.SetDouble(static_cast<const JsonbDoubleVal&>(val).val());
+ break;
+ case JsonbType::T_Int64:
+ target.SetInt64(static_cast<const JsonbInt64Val&>(val).val());
+ break;
+ case JsonbType::T_Int32:
+ target.SetInt(static_cast<const JsonbInt32Val&>(val).val());
+ break;
+ case JsonbType::T_Int16:
+ target.SetInt(static_cast<const JsonbInt16Val&>(val).val());
+ break;
+ case JsonbType::T_Int8:
+ target.SetInt(static_cast<const JsonbInt8Val&>(val).val());
+ break;
+ case JsonbType::T_String:
+ target.SetString(static_cast<const JsonbStringVal&>(val).getBlob(),
+ static_cast<const JsonbStringVal&>(val).getBlobLen());
+ break;
+ case JsonbType::T_Array: {
+ target.SetArray();
+ const ArrayVal& array = static_cast<const ArrayVal&>(val);
+ if (array.numElem() == 0) {
+ target.SetNull();
+ break;
Review Comment:
warning: use auto when initializing with a cast to avoid duplicating the
type name [modernize-use-auto]
```suggestion
const auto& array = static_cast<const ArrayVal&>(val);
```
##########
be/src/vec/data_types/serde/data_type_jsonb_serde.cpp:
##########
@@ -119,5 +126,107 @@
return Status::NotSupported("write_column_to_orc with type [{}]",
column.get_name());
}
+static void convert_jsonb_to_rapidjson(const JsonbValue& val,
rapidjson::Value& target,
+ rapidjson::Document::AllocatorType&
allocator) {
+ // convert type of jsonb to rapidjson::Value
+ switch (val.type()) {
+ case JsonbType::T_True:
+ target.SetBool(true);
+ break;
+ case JsonbType::T_False:
+ target.SetBool(false);
+ break;
+ case JsonbType::T_Null:
+ target.SetNull();
+ break;
+ case JsonbType::T_Float:
+ target.SetFloat(static_cast<const JsonbFloatVal&>(val).val());
+ break;
+ case JsonbType::T_Double:
+ target.SetDouble(static_cast<const JsonbDoubleVal&>(val).val());
+ break;
+ case JsonbType::T_Int64:
+ target.SetInt64(static_cast<const JsonbInt64Val&>(val).val());
+ break;
+ case JsonbType::T_Int32:
+ target.SetInt(static_cast<const JsonbInt32Val&>(val).val());
+ break;
+ case JsonbType::T_Int16:
+ target.SetInt(static_cast<const JsonbInt16Val&>(val).val());
+ break;
+ case JsonbType::T_Int8:
+ target.SetInt(static_cast<const JsonbInt8Val&>(val).val());
+ break;
+ case JsonbType::T_String:
+ target.SetString(static_cast<const JsonbStringVal&>(val).getBlob(),
+ static_cast<const JsonbStringVal&>(val).getBlobLen());
+ break;
+ case JsonbType::T_Array: {
+ target.SetArray();
+ const ArrayVal& array = static_cast<const ArrayVal&>(val);
+ if (array.numElem() == 0) {
+ target.SetNull();
+ break;
+ }
+ target.Reserve(array.numElem(), allocator);
+ for (auto it = array.begin(); it != array.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*static_cast<const JsonbValue*>(it),
val, allocator);
+ target.PushBack(val, allocator);
+ }
+ break;
+ }
+ case JsonbType::T_Object: {
+ target.SetObject();
+ const ObjectVal& obj = static_cast<const ObjectVal&>(val);
+ for (auto it = obj.begin(); it != obj.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*it->value(), val, allocator);
Review Comment:
warning: use auto when initializing with a cast to avoid duplicating the
type name [modernize-use-auto]
```suggestion
const auto& obj = static_cast<const ObjectVal&>(val);
```
##########
be/src/vec/data_types/serde/data_type_serde.cpp:
##########
@@ -40,5 +41,56 @@ DataTypeSerDeSPtrs create_data_type_serdes(const
std::vector<SlotDescriptor*>& s
}
return serdes;
}
+
+void DataTypeSerDe::convert_array_to_rapidjson(const vectorized::Array& array,
+ rapidjson::Value& target,
+
rapidjson::Document::AllocatorType& allocator) {
+ for (const vectorized::Field& item : array) {
+ target.SetArray();
+ rapidjson::Value val;
+ convert_field_to_rapidjson(item, val, allocator);
+ target.PushBack(val, allocator);
+ }
+}
+
+void DataTypeSerDe::convert_field_to_rapidjson(const vectorized::Field& field,
+ rapidjson::Value& target,
Review Comment:
warning: method 'convert_field_to_rapidjson' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeSerDe::convert_field_to_rapidjson(const
vectorized::Field& field,
```
##########
be/src/vec/data_types/serde/data_type_string_serde.cpp:
##########
@@ -253,5 +256,26 @@ Status DataTypeStringSerDe::write_column_to_orc(const
std::string& timezone, con
return Status::OK();
}
+void DataTypeStringSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ const auto& col = static_cast<const ColumnString&>(column);
+ const auto& data_ref = col.get_data_at(row_num);
Review Comment:
warning: method 'write_one_cell_to_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeStringSerDe::write_one_cell_to_json(const IColumn&
column, rapidjson::Value& result,
```
be/src/vec/data_types/serde/data_type_string_serde.cpp:264:
```diff
- int row_num) const {
+ int row_num) {
```
##########
be/src/vec/data_types/serde/data_type_array_serde.cpp:
##########
@@ -222,6 +222,35 @@
result.writeEndBinary();
}
+void DataTypeArraySerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ // vectorized::Field array = column[row_num];
+ // Use allocator instead of stack memory, since rapidjson hold the
reference of String value
+ // otherwise causes stack use after free
+ auto& column_array = static_cast<const ColumnArray&>(column);
+ void* mem = allocator.Malloc(sizeof(vectorized::Field));
+ vectorized::Field* array = new (mem)
vectorized::Field(column_array[row_num]);
+
+ convert_field_to_rapidjson(*array, result, allocator);
+}
Review Comment:
warning: use auto when initializing with new to avoid duplicating the type
name [modernize-use-auto]
```suggestion
auto* array = new (mem) vectorized::Field(column_array[row_num]);
```
##########
be/src/vec/data_types/serde/data_type_array_serde.cpp:
##########
@@ -222,6 +222,35 @@
result.writeEndBinary();
}
+void DataTypeArraySerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ // vectorized::Field array = column[row_num];
+ // Use allocator instead of stack memory, since rapidjson hold the
reference of String value
+ // otherwise causes stack use after free
+ auto& column_array = static_cast<const ColumnArray&>(column);
+ void* mem = allocator.Malloc(sizeof(vectorized::Field));
+ vectorized::Field* array = new (mem)
vectorized::Field(column_array[row_num]);
+
+ convert_field_to_rapidjson(*array, result, allocator);
+}
+
+void DataTypeArraySerDe::read_one_cell_from_json(IColumn& column,
+ const rapidjson::Value&
result) const {
+ auto& column_array = static_cast<ColumnArray&>(column);
+ auto& offsets_data = column_array.get_offsets();
+ auto& nested_data = column_array.get_data();
Review Comment:
warning: method 'read_one_cell_from_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeArraySerDe::read_one_cell_from_json(IColumn& column,
const rapidjson::Value&
result) {
```
##########
be/src/vec/data_types/data_type_time_v2.h:
##########
@@ -120,6 +123,9 @@
TPrimitiveType::type get_type_as_tprimitive_type() const override {
return TPrimitiveType::DATETIMEV2;
}
+ doris::FieldType get_storage_field_type() const override {
+ return doris::FieldType::OLAP_FIELD_TYPE_DATETIMEV2;
Review Comment:
warning: method 'get_family_name' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static const char* get_family_name() override { return "DateTimeV2"; }
```
##########
be/src/vec/data_types/data_type_time_v2.h:
##########
@@ -64,6 +64,9 @@ class DataTypeDateV2 final : public
DataTypeNumberBase<UInt32> {
TPrimitiveType::type get_type_as_tprimitive_type() const override {
return TPrimitiveType::DATEV2;
}
+ doris::FieldType get_storage_field_type() const override {
Review Comment:
warning: method 'get_storage_field_type' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static doris::FieldType get_storage_field_type() override {
```
##########
be/src/vec/data_types/serde/data_type_jsonb_serde.cpp:
##########
@@ -119,5 +126,107 @@
return Status::NotSupported("write_column_to_orc with type [{}]",
column.get_name());
}
+static void convert_jsonb_to_rapidjson(const JsonbValue& val,
rapidjson::Value& target,
+ rapidjson::Document::AllocatorType&
allocator) {
+ // convert type of jsonb to rapidjson::Value
+ switch (val.type()) {
+ case JsonbType::T_True:
+ target.SetBool(true);
+ break;
+ case JsonbType::T_False:
+ target.SetBool(false);
+ break;
+ case JsonbType::T_Null:
+ target.SetNull();
+ break;
+ case JsonbType::T_Float:
+ target.SetFloat(static_cast<const JsonbFloatVal&>(val).val());
+ break;
+ case JsonbType::T_Double:
+ target.SetDouble(static_cast<const JsonbDoubleVal&>(val).val());
+ break;
+ case JsonbType::T_Int64:
+ target.SetInt64(static_cast<const JsonbInt64Val&>(val).val());
+ break;
+ case JsonbType::T_Int32:
+ target.SetInt(static_cast<const JsonbInt32Val&>(val).val());
+ break;
+ case JsonbType::T_Int16:
+ target.SetInt(static_cast<const JsonbInt16Val&>(val).val());
+ break;
+ case JsonbType::T_Int8:
+ target.SetInt(static_cast<const JsonbInt8Val&>(val).val());
+ break;
+ case JsonbType::T_String:
+ target.SetString(static_cast<const JsonbStringVal&>(val).getBlob(),
+ static_cast<const JsonbStringVal&>(val).getBlobLen());
+ break;
+ case JsonbType::T_Array: {
+ target.SetArray();
+ const ArrayVal& array = static_cast<const ArrayVal&>(val);
+ if (array.numElem() == 0) {
+ target.SetNull();
+ break;
+ }
+ target.Reserve(array.numElem(), allocator);
+ for (auto it = array.begin(); it != array.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*static_cast<const JsonbValue*>(it),
val, allocator);
+ target.PushBack(val, allocator);
+ }
+ break;
+ }
+ case JsonbType::T_Object: {
+ target.SetObject();
+ const ObjectVal& obj = static_cast<const ObjectVal&>(val);
+ for (auto it = obj.begin(); it != obj.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*it->value(), val, allocator);
+ target.AddMember(rapidjson::GenericStringRef(it->getKeyStr(),
it->klen()), val,
+ allocator);
+ }
+ break;
+ }
+ default:
+ CHECK(false) << "unkown type " << static_cast<int>(val.type());
+ break;
+ }
+}
+
+void DataTypeJsonbSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ auto& data = assert_cast<const ColumnString&>(column);
+ const auto jsonb_val = data.get_data_at(row_num);
+ if (jsonb_val.empty()) {
+ result.SetNull();
+ }
+ JsonbValue* val = JsonbDocument::createValue(jsonb_val.data,
jsonb_val.size);
+ if (val == nullptr) {
+ throw doris::Exception(ErrorCode::INTERNAL_ERROR, "Failed to get json
document from jsonb");
+ }
+ rapidjson::Value value;
+ convert_jsonb_to_rapidjson(*val, value, allocator);
+ if (val->isObject() && result.IsObject()) {
+ JsonFunctions::merge_objects(result, value, allocator);
+ } else {
+ result = std::move(value);
+ }
+}
+
+void DataTypeJsonbSerDe::read_one_cell_from_json(IColumn& column,
+ const rapidjson::Value&
result) const {
+ // TODO improve performance
+ auto& col = assert_cast<ColumnString&>(column);
+ rapidjson::StringBuffer buffer;
Review Comment:
warning: method 'read_one_cell_from_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeJsonbSerDe::read_one_cell_from_json(IColumn& column,
const rapidjson::Value&
result) {
```
##########
be/src/vec/columns/column_object.cpp:
##########
@@ -926,10 +1320,85 @@ void ColumnObject::revise_to(int target_num_rows) {
num_rows = target_num_rows;
}
+void ColumnObject::create_root() {
+ auto type = is_nullable ? make_nullable(std::make_shared<MostCommonType>())
+ : std::make_shared<MostCommonType>();
+ add_sub_column({}, type->create_column(), type);
+}
+
+void ColumnObject::create_root(const DataTypePtr& type, MutableColumnPtr&&
column) {
+ if (num_rows == 0) {
+ num_rows = column->size();
+ }
+ add_sub_column({}, std::move(column), type);
+}
+
+bool ColumnObject::is_null_root() const {
+ auto* root = subcolumns.get_root();
+ if (root == nullptr) {
+ return true;
+ }
+ if (root->data.num_of_defaults_in_prefix == 0 &&
+ (root->data.data.empty() ||
is_nothing(root->data.get_least_common_type()))) {
+ return true;
+ }
+ return false;
+}
+
+bool ColumnObject::is_scalar_variant() const {
+ // Only root itself
+ return !is_null_root() && subcolumns.get_leaves().size() == 1;
+}
+
+DataTypePtr ColumnObject::get_root_type() const {
+ return subcolumns.get_root()->data.get_least_common_type();
+}
+
+#define SANITIZE_ROOT()
\
+ if (is_null_root()) {
\
+ return Status::InternalError("No root column, path {}",
path.get_path()); \
+ }
\
+ if
(!WhichDataType(remove_nullable(subcolumns.get_root()->data.get_least_common_type()))
\
+ .is_json()) {
\
+ return Status::InternalError(
\
+ "Root column is not jsonb type but {}, path {}",
\
+
subcolumns.get_root()->data.get_least_common_type()->get_name(),
path.get_path()); \
+ }
+
+Status ColumnObject::extract_root(const PathInData& path) {
Review Comment:
warning: method 'extract_root' can be made const
[readability-make-member-function-const]
be/src/vec/columns/column_object.h:459:
```diff
- Status extract_root(const PathInData& path);
+ Status extract_root(const PathInData& path) const;
```
```suggestion
Status ColumnObject::extract_root(const PathInData& path) const {
```
##########
be/src/vec/data_types/serde/data_type_jsonb_serde.cpp:
##########
@@ -119,5 +126,107 @@
return Status::NotSupported("write_column_to_orc with type [{}]",
column.get_name());
}
+static void convert_jsonb_to_rapidjson(const JsonbValue& val,
rapidjson::Value& target,
+ rapidjson::Document::AllocatorType&
allocator) {
+ // convert type of jsonb to rapidjson::Value
+ switch (val.type()) {
+ case JsonbType::T_True:
+ target.SetBool(true);
+ break;
+ case JsonbType::T_False:
+ target.SetBool(false);
+ break;
+ case JsonbType::T_Null:
+ target.SetNull();
+ break;
+ case JsonbType::T_Float:
+ target.SetFloat(static_cast<const JsonbFloatVal&>(val).val());
+ break;
+ case JsonbType::T_Double:
+ target.SetDouble(static_cast<const JsonbDoubleVal&>(val).val());
+ break;
+ case JsonbType::T_Int64:
+ target.SetInt64(static_cast<const JsonbInt64Val&>(val).val());
+ break;
+ case JsonbType::T_Int32:
+ target.SetInt(static_cast<const JsonbInt32Val&>(val).val());
+ break;
+ case JsonbType::T_Int16:
+ target.SetInt(static_cast<const JsonbInt16Val&>(val).val());
+ break;
+ case JsonbType::T_Int8:
+ target.SetInt(static_cast<const JsonbInt8Val&>(val).val());
+ break;
+ case JsonbType::T_String:
+ target.SetString(static_cast<const JsonbStringVal&>(val).getBlob(),
+ static_cast<const JsonbStringVal&>(val).getBlobLen());
+ break;
+ case JsonbType::T_Array: {
+ target.SetArray();
+ const ArrayVal& array = static_cast<const ArrayVal&>(val);
+ if (array.numElem() == 0) {
+ target.SetNull();
+ break;
+ }
+ target.Reserve(array.numElem(), allocator);
+ for (auto it = array.begin(); it != array.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*static_cast<const JsonbValue*>(it),
val, allocator);
+ target.PushBack(val, allocator);
+ }
+ break;
+ }
+ case JsonbType::T_Object: {
+ target.SetObject();
+ const ObjectVal& obj = static_cast<const ObjectVal&>(val);
+ for (auto it = obj.begin(); it != obj.end(); ++it) {
+ rapidjson::Value val;
+ convert_jsonb_to_rapidjson(*it->value(), val, allocator);
+ target.AddMember(rapidjson::GenericStringRef(it->getKeyStr(),
it->klen()), val,
+ allocator);
+ }
+ break;
+ }
+ default:
+ CHECK(false) << "unkown type " << static_cast<int>(val.type());
+ break;
+ }
+}
+
+void DataTypeJsonbSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ auto& data = assert_cast<const ColumnString&>(column);
Review Comment:
warning: method 'write_one_cell_to_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeJsonbSerDe::write_one_cell_to_json(const IColumn&
column, rapidjson::Value& result,
```
be/src/vec/data_types/serde/data_type_jsonb_serde.cpp:200:
```diff
- int row_num) const {
+ int row_num) {
```
##########
be/src/vec/data_types/serde/data_type_nullable_serde.cpp:
##########
@@ -337,5 +337,30 @@ Status DataTypeNullableSerDe::write_column_to_orc(const
std::string& timezone,
const std::string DataTypeNullableSerDe::NULL_IN_CSV_FOR_ORDINARY_TYPE = "\\N";
const std::string DataTypeNullableSerDe::NULL_IN_CSV_FOR_NESTED_TYPE = "null";
+void DataTypeNullableSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ auto& col = static_cast<const ColumnNullable&>(column);
+ auto& nested_col = col.get_nested_column();
+ if (col.is_null_at(row_num)) {
Review Comment:
warning: method 'write_one_cell_to_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static
```
be/src/vec/data_types/serde/data_type_nullable_serde.cpp:346:
```diff
- ,
- {
+ ,
+ {
```
##########
be/src/vec/data_types/serde/data_type_nullable_serde.cpp:
##########
@@ -337,5 +337,30 @@
const std::string DataTypeNullableSerDe::NULL_IN_CSV_FOR_ORDINARY_TYPE = "\\N";
const std::string DataTypeNullableSerDe::NULL_IN_CSV_FOR_NESTED_TYPE = "null";
+void DataTypeNullableSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ auto& col = static_cast<const ColumnNullable&>(column);
+ auto& nested_col = col.get_nested_column();
+ if (col.is_null_at(row_num)) {
+ result.SetNull();
+ } else {
+ nested_serde->write_one_cell_to_json(nested_col, result, allocator,
row_num);
+ }
+}
+
+void DataTypeNullableSerDe::read_one_cell_from_json(IColumn& column,
+ const rapidjson::Value&
result) const {
+ auto& col = static_cast<ColumnNullable&>(column);
+ auto& nested_col = col.get_nested_column();
+ if (result.IsNull()) {
+ col.insert_default();
+ } else {
+ // TODO sanitize data
Review Comment:
warning: method 'read_one_cell_from_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
,static
{
```
##########
be/src/vec/data_types/serde/data_type_string_serde.cpp:
##########
@@ -253,5 +256,26 @@
return Status::OK();
}
+void DataTypeStringSerDe::write_one_cell_to_json(const IColumn& column,
rapidjson::Value& result,
+
rapidjson::Document::AllocatorType& allocator,
+ int row_num) const {
+ const auto& col = static_cast<const ColumnString&>(column);
+ const auto& data_ref = col.get_data_at(row_num);
+ result.SetString(data_ref.data, data_ref.size);
+}
+
+void DataTypeStringSerDe::read_one_cell_from_json(IColumn& column,
+ const rapidjson::Value&
result) const {
+ auto& col = static_cast<ColumnString&>(column);
+ if (!result.IsString()) {
+ rapidjson::StringBuffer buffer;
+ rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
Review Comment:
warning: method 'read_one_cell_from_json' can be made static
[readability-convert-member-functions-to-static]
```suggestion
static void DataTypeStringSerDe::read_one_cell_from_json(IColumn& column,
const rapidjson::Value&
result) {
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]