This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 78d6e318fbb [fix](ip)pick ip rowstore (#39345)
78d6e318fbb is described below
commit 78d6e318fbb4290957fa4bda2541131cfa95c2f9
Author: amory <[email protected]>
AuthorDate: Wed Aug 14 18:51:58 2024 +0800
[fix](ip)pick ip rowstore (#39345)
## Proposed changes
backport: https://github.com/apache/doris/pull/39258
Issue Number: close #xxx
<!--Describe your changes.-->
---
be/src/olap/rowset/segment_creator.cpp | 5 +++--
.../vec/data_types/serde/data_type_ipv6_serde.cpp | 22 ++++++++++++++++++++++
be/src/vec/data_types/serde/data_type_ipv6_serde.h | 3 +++
.../data/mv_p0/test_row_store/test_row_store.out | 4 ++++
.../mv_p0/test_row_store/test_row_store.groovy | 19 +++++++++++++++++++
5 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/be/src/olap/rowset/segment_creator.cpp
b/be/src/olap/rowset/segment_creator.cpp
index e42a80170a8..641b3253556 100644
--- a/be/src/olap/rowset/segment_creator.cpp
+++ b/be/src/olap/rowset/segment_creator.cpp
@@ -26,6 +26,7 @@
#include "common/compiler_util.h" // IWYU pragma: keep
#include "common/config.h"
+#include "common/exception.h"
#include "common/logging.h"
#include "common/status.h"
#include "io/fs/file_writer.h"
@@ -73,12 +74,12 @@ Status SegmentFlusher::flush_single_block(const
vectorized::Block* block, int32_
_context->tablet_schema->cluster_key_idxes().empty()) {
std::unique_ptr<segment_v2::VerticalSegmentWriter> writer;
RETURN_IF_ERROR(_create_segment_writer(writer, segment_id,
no_compression));
- RETURN_IF_ERROR(_add_rows(writer, &flush_block, 0,
flush_block.rows()));
+ RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_add_rows(writer, &flush_block, 0,
flush_block.rows()));
RETURN_IF_ERROR(_flush_segment_writer(writer, writer->flush_schema(),
flush_size));
} else {
std::unique_ptr<segment_v2::SegmentWriter> writer;
RETURN_IF_ERROR(_create_segment_writer(writer, segment_id,
no_compression));
- RETURN_IF_ERROR(_add_rows(writer, &flush_block, 0,
flush_block.rows()));
+ RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_add_rows(writer, &flush_block, 0,
flush_block.rows()));
RETURN_IF_ERROR(_flush_segment_writer(writer, nullptr, flush_size));
}
return Status::OK();
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 88251a5d5d3..f09b6feb4a2 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
@@ -68,6 +68,28 @@ Status DataTypeIPv6SerDe::write_column_to_mysql(const
IColumn& column,
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 {
+ IPv6 val = 0;
+ const auto* str_value = static_cast<const JsonbStringVal*>(arg);
+ ReadBuffer rb(reinterpret_cast<const unsigned char*>(str_value->getBlob()),
+ str_value->getBlobLen());
+ if (!read_ipv6_text_impl(val, rb)) {
+ throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "parse ipv6 fail,
string: '{}'",
+ rb.to_string());
+ }
+ assert_cast<ColumnIPv6&>(column).insert_value(val);
+}
+
+void DataTypeIPv6SerDe::write_one_cell_to_jsonb(const IColumn& column,
+ JsonbWriterT<JsonbOutStream>&
result,
+ Arena* mem_pool, int col_id,
int row_num) const {
+ // we make ipv6 as string in jsonb
+ result.writeKey(col_id);
+ IPv6 data = assert_cast<const ColumnIPv6&>(column).get_element(row_num);
+ IPv6Value ipv6_value(data);
+ result.writeString(ipv6_value.to_string());
+}
+
Status DataTypeIPv6SerDe::serialize_one_cell_to_json(const IColumn& column,
int row_num,
BufferWritable& bw,
FormatOptions& options)
const {
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 71f86f383b4..d308da41859 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
@@ -67,6 +67,9 @@ public:
const cctz::time_zone& ctz) const override;
void read_column_from_arrow(IColumn& column, const arrow::Array*
arrow_array, int start,
int end, const cctz::time_zone& ctz) const
override;
+ void read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg)
const override;
+ void write_one_cell_to_jsonb(const IColumn& column,
JsonbWriterT<JsonbOutStream>& result,
+ Arena* mem_pool, int unique_id, int row_num)
const override;
private:
template <bool is_binary_format>
diff --git a/regression-test/data/mv_p0/test_row_store/test_row_store.out
b/regression-test/data/mv_p0/test_row_store/test_row_store.out
new file mode 100644
index 00000000000..42f6adba1f1
--- /dev/null
+++ b/regression-test/data/mv_p0/test_row_store/test_row_store.out
@@ -0,0 +1,4 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !sql --
+1 :: 0.0.0.0
+
diff --git a/regression-test/suites/mv_p0/test_row_store/test_row_store.groovy
b/regression-test/suites/mv_p0/test_row_store/test_row_store.groovy
index 99cc3ba227e..b9ee72c5053 100644
--- a/regression-test/suites/mv_p0/test_row_store/test_row_store.groovy
+++ b/regression-test/suites/mv_p0/test_row_store/test_row_store.groovy
@@ -29,4 +29,23 @@ suite ("test_row_store") {
sql "create materialized view kavg as select k1,k4,avg(k2) from
d_table group by k1,k4;"
exception "RowStore table can't create materialized view"
}
+
+ // test ip type with row store
+ sql """ DROP TABLE IF EXISTS ipv_row; """
+ sql """ CREATE TABLE ipv_row (
+ `id` int,
+ `ip_v6` ipv6,
+ `ip_v4` ipv4
+ ) ENGINE=OLAP
+ DISTRIBUTED BY HASH(`id`) BUCKETS 4
+ PROPERTIES (
+ "store_row_column"="true",
+ "replication_allocation" = "tag.location.default: 1"
+ ); """
+
+ // rowstore column can't make inde
+ sql """ insert into ipv_row values(2, '2001:16a0:2:200a::2',
'192.1.2.0');"""
+ sql """ insert into ipv_row values(1, '::', '0.0.0.0');"""
+ qt_sql """select * from ipv_row where id = 1;"""
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]