cambyzju commented on code in PR #15669: URL: https://github.com/apache/doris/pull/15669#discussion_r1069036760
########## be/src/vec/data_types/data_type_struct.cpp: ########## @@ -91,6 +80,88 @@ std::string DataTypeStruct::do_get_name() const { return s.str(); } +Status DataTypeStruct::from_string(ReadBuffer& rb, IColumn* column) const { + DCHECK(!rb.eof()); + auto* struct_column = assert_cast<ColumnStruct*>(column); + + if (*rb.position() != '{') { + return Status::InvalidArgument("Struct does not start with '{' character, found '{}'", + *rb.position()); + } + if (*(rb.end() - 1) != '}') { + return Status::InvalidArgument("Struct does not end with '}' character, found '{}'", + *(rb.end() - 1)); + } + ++rb.position(); + std::vector<ReadBuffer> field_rbs; + field_rbs.reserve(elems.size()); + + // here get the value "jack" and 20 from {"name":"jack","age":20} + while (!rb.eof()) { + size_t field_len = 0; + auto start = rb.position(); + while (!rb.eof() && *start != ',' && *start != '}') { + field_len++; + start++; + } + if (field_len >= rb.count()) { + return Status::InvalidArgument("Invalid Length"); + } + ReadBuffer field_rb(rb.position(), field_len); + size_t len = 0; + auto start_rb = field_rb.position(); + while (!field_rb.eof() && *start_rb != ':') { + len++; + start_rb++; + } + ReadBuffer field(field_rb.position() + len + 1, field_rb.count() - len - 1); + + if (*field.position() != '"' && *field.end() != '"') { Review Comment: if `field_size < 2 || *field.position() != '"' || *field.end() != '"'` ? ########## be/src/vec/data_types/data_type_factory.cpp: ########## @@ -20,6 +20,10 @@ #include "vec/data_types/data_type_factory.hpp" +#include "vec/data_types/data_type_hll.h" +#include "vec/data_types/data_type_jsonb.h" Review Comment: hll and jsonb already included in data_type_factory.hpp ########## fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java: ########## @@ -169,8 +169,29 @@ public abstract class Type { arraySubTypes.add(STRING); structSubTypes = Lists.newArrayList(); + structSubTypes.add(TINYINT); + structSubTypes.add(SMALLINT); structSubTypes.add(INT); + structSubTypes.add(BIGINT); + structSubTypes.add(LARGEINT); + structSubTypes.add(FLOAT); + structSubTypes.add(DOUBLE); + + structSubTypes.add(BOOLEAN); + structSubTypes.add(VARCHAR); structSubTypes.add(STRING); + structSubTypes.add(CHAR); + structSubTypes.add(DATE); + structSubTypes.add(DATETIME); + structSubTypes.add(DATEV2); + structSubTypes.add(DATETIMEV2); + structSubTypes.add(TIME); + structSubTypes.add(TIMEV2); + structSubTypes.add(JSONB); Review Comment: do not add complex type now for STRUCT -- 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: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org