You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by xu...@apache.org on 2023/01/18 08:11:14 UTC
[doris] branch struct-type updated: [fix](struct-type) fix insert null and explain for struct type (#16054)
This is an automated email from the ASF dual-hosted git repository.
xuyang pushed a commit to branch struct-type
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/struct-type by this push:
new 5175a45f46 [fix](struct-type) fix insert null and explain for struct type (#16054)
5175a45f46 is described below
commit 5175a45f46119ae75fefe5a7c89da460eab96d23
Author: camby <10...@qq.com>
AuthorDate: Wed Jan 18 16:11:07 2023 +0800
[fix](struct-type) fix insert null and explain for struct type (#16054)
1、support insert null for struct type;
2、fix explain const exprs for strut type got wrong result;
Co-authored-by: cambyzju <zh...@baidu.com>
---
be/src/olap/rowset/segment_v2/column_writer.cpp | 25 ++++++++++++++++------
be/src/olap/rowset/segment_v2/column_writer.h | 3 ++-
be/src/vec/data_types/data_type_struct.cpp | 2 +-
.../org/apache/doris/analysis/StructLiteral.java | 2 +-
4 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp b/be/src/olap/rowset/segment_v2/column_writer.cpp
index 2fc64f741d..5e2de337aa 100644
--- a/be/src/olap/rowset/segment_v2/column_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/column_writer.cpp
@@ -648,6 +648,13 @@ Status StructColumnWriter::write_inverted_index() {
return Status::OK();
}
+Status StructColumnWriter::append_nullable(const uint8_t* null_map, const uint8_t** ptr,
+ size_t num_rows) {
+ RETURN_IF_ERROR(append_data(ptr, num_rows));
+ RETURN_IF_ERROR(_null_writer->append_data(&null_map, num_rows));
+ return Status::OK();
+}
+
Status StructColumnWriter::append_data(const uint8_t** ptr, size_t num_rows) {
auto results = reinterpret_cast<const uint64_t*>(*ptr);
for (size_t i = 0; i < _num_sub_column_writers; ++i) {
@@ -658,11 +665,9 @@ Status StructColumnWriter::append_data(const uint8_t** ptr, size_t num_rows) {
num_rows));
}
if (is_nullable()) {
- uint8_t null_sign = 0;
- const uint8_t* null_sign_ptr = &null_sign;
- for (size_t i = 0; i < num_rows; ++i) {
- RETURN_IF_ERROR(_null_writer->append_data(&null_sign_ptr, 1));
- }
+ std::vector<vectorized::UInt8> null_signs(num_rows, 0);
+ const uint8_t* null_sign_ptr = null_signs.data();
+ RETURN_IF_ERROR(_null_writer->append_data(&null_sign_ptr, num_rows));
}
return Status::OK();
}
@@ -707,7 +712,15 @@ Status StructColumnWriter::write_ordinal_index() {
}
Status StructColumnWriter::append_nulls(size_t num_rows) {
- return Status::NotSupported("struct writer not support append nulls");
+ for (auto& column_writer : _sub_column_writers) {
+ RETURN_IF_ERROR(column_writer->append_nulls(num_rows));
+ }
+ if (is_nullable()) {
+ std::vector<vectorized::UInt8> null_signs(num_rows, 1);
+ const uint8_t* null_sign_ptr = null_signs.data();
+ RETURN_IF_ERROR(_null_writer->append_data(&null_sign_ptr, num_rows));
+ }
+ return Status::OK();
}
Status StructColumnWriter::finish_current_page() {
diff --git a/be/src/olap/rowset/segment_v2/column_writer.h b/be/src/olap/rowset/segment_v2/column_writer.h
index c1329f2404..274c9be6f3 100644
--- a/be/src/olap/rowset/segment_v2/column_writer.h
+++ b/be/src/olap/rowset/segment_v2/column_writer.h
@@ -113,7 +113,7 @@ public:
Status append_nullable(const uint8_t* nullmap, const void* data, size_t num_rows);
// use only in vectorized load
- Status append_nullable(const uint8_t* null_map, const uint8_t** data, size_t num_rows);
+ virtual Status append_nullable(const uint8_t* null_map, const uint8_t** data, size_t num_rows);
virtual Status append_nulls(size_t num_rows) = 0;
@@ -274,6 +274,7 @@ public:
Status init() override;
+ Status append_nullable(const uint8_t* null_map, const uint8_t** data, size_t num_rows) override;
Status append_data(const uint8_t** ptr, size_t num_rows) override;
uint64_t estimate_buffer_size() override;
diff --git a/be/src/vec/data_types/data_type_struct.cpp b/be/src/vec/data_types/data_type_struct.cpp
index a3a54966b0..7249977295 100644
--- a/be/src/vec/data_types/data_type_struct.cpp
+++ b/be/src/vec/data_types/data_type_struct.cpp
@@ -272,7 +272,7 @@ bool DataTypeStruct::equals(const IDataType& rhs) const {
}
for (size_t i = 0; i < size; ++i) {
- if (!elems[i]->equals(*rhs_tuple.elems[i]) || names[i] != rhs_tuple.names[i]) {
+ if (!elems[i]->equals(*rhs_tuple.elems[i])) {
return false;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
index a9209f1c5a..95362a37ab 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StructLiteral.java
@@ -58,7 +58,7 @@ public class StructLiteral extends LiteralExpr {
@Override
protected String toSqlImpl() {
List<String> list = new ArrayList<>(children.size());
- children.forEach(v -> list.add(v.toDigestImpl()));
+ children.forEach(v -> list.add(v.toSqlImpl()));
return "STRUCT(" + StringUtils.join(list, ", ") + ")";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org