You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/04/06 01:50:33 UTC

[doris] branch master updated: [fix](column) Add unimplemented replicate function in ColumnStruct (#18368)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 66a0c090b8 [fix](column) Add unimplemented replicate function in ColumnStruct (#18368)
66a0c090b8 is described below

commit 66a0c090b8ba14cce8194d801d1ef0bb88e9f63a
Author: Jerry Hu <mr...@gmail.com>
AuthorDate: Thu Apr 6 09:50:27 2023 +0800

    [fix](column) Add unimplemented replicate function in ColumnStruct (#18368)
---
 be/src/vec/columns/column_struct.cpp                 |  15 +++++++++++++++
 be/src/vec/columns/column_struct.h                   |   2 ++
 .../aggregate/aggregate_group_by_metric_type.out     | Bin 0 -> 170 bytes
 .../aggregate/aggregate_group_by_metric_type.groovy  |  19 +++++++++++++++++++
 4 files changed, 36 insertions(+)

diff --git a/be/src/vec/columns/column_struct.cpp b/be/src/vec/columns/column_struct.cpp
index 092157655e..e0663b6386 100644
--- a/be/src/vec/columns/column_struct.cpp
+++ b/be/src/vec/columns/column_struct.cpp
@@ -248,6 +248,21 @@ ColumnPtr ColumnStruct::replicate(const Offsets& offsets) const {
     return ColumnStruct::create(new_columns);
 }
 
+void ColumnStruct::replicate(const uint32_t* counts, size_t target_size, IColumn& column,
+                             size_t begin, int count_sz) const {
+    size_t col_size = count_sz < 0 ? size() : count_sz;
+    if (0 == col_size) {
+        return;
+    }
+
+    auto& res = reinterpret_cast<ColumnStruct&>(column);
+    res.columns.resize(columns.size());
+
+    for (size_t i = 0; i != columns.size(); ++i) {
+        columns[i]->replicate(counts, target_size, *res.columns[i], begin, count_sz);
+    }
+}
+
 MutableColumns ColumnStruct::scatter(ColumnIndex num_columns, const Selector& selector) const {
     const size_t tuple_size = columns.size();
     std::vector<MutableColumns> scattered_tuple_elements(tuple_size);
diff --git a/be/src/vec/columns/column_struct.h b/be/src/vec/columns/column_struct.h
index 9a00244b5a..d43d8801f6 100644
--- a/be/src/vec/columns/column_struct.h
+++ b/be/src/vec/columns/column_struct.h
@@ -110,6 +110,8 @@ public:
     Status filter_by_selector(const uint16_t* sel, size_t sel_size, IColumn* col_ptr) override;
     ColumnPtr permute(const Permutation& perm, size_t limit) const override;
     ColumnPtr replicate(const Offsets& offsets) const override;
+    void replicate(const uint32_t* counts, size_t target_size, IColumn& column, size_t begin = 0,
+                   int count_sz = -1) const override;
     MutableColumns scatter(ColumnIndex num_columns, const Selector& selector) const override;
 
     // ColumnPtr index(const IColumn & indexes, size_t limit) const override;
diff --git a/regression-test/data/query_p0/aggregate/aggregate_group_by_metric_type.out b/regression-test/data/query_p0/aggregate/aggregate_group_by_metric_type.out
new file mode 100644
index 0000000000..d9f26a0fa7
Binary files /dev/null and b/regression-test/data/query_p0/aggregate/aggregate_group_by_metric_type.out differ
diff --git a/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy b/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
index ee6ccf63a3..bf514cb6f1 100644
--- a/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
+++ b/regression-test/suites/query_p0/aggregate/aggregate_group_by_metric_type.groovy
@@ -130,4 +130,23 @@ suite("aggregate_group_by_metric_type") {
         sql "select s_struct,count(*) from test_group_by_struct group by s_struct"
         exception "${error_msg}"
     }
+
+    sql "DROP TABLE IF EXISTS test_group_by_struct_join"
+    sql """
+        CREATE TABLE IF NOT EXISTS test_group_by_struct_join (id int, value int)
+        DISTRIBUTED BY HASH(`id`) BUCKETS 1 properties("replication_num" = "1");
+    """
+
+    sql """
+        insert into test_group_by_struct_join values(1, 1), (1, 2), (1, 3), (1, 4);
+    """
+
+    qt_select """
+        select
+            t1.s_struct
+            , t2.value
+        from
+            test_group_by_struct t1 right join test_group_by_struct_join t2 on t1.id = t2.id
+        order by t2.value;
+    """
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org