This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new 20ce60c326 [fix](grouping) fix coredump of grouping function for outer join (#18345) 20ce60c326 is described below commit 20ce60c32664506845eba0e8471d4a567c5a77d9 Author: TengJianPing <18241664+jackte...@users.noreply.github.com> AuthorDate: Mon Apr 3 18:10:52 2023 +0800 [fix](grouping) fix coredump of grouping function for outer join (#18345) --- be/src/vec/functions/function_grouping.h | 5 +- .../query_p0/grouping_sets/test_grouping_sets1.out | 5 ++ .../grouping_sets/test_grouping_sets1.groovy | 84 ++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/be/src/vec/functions/function_grouping.h b/be/src/vec/functions/function_grouping.h index 17aa1fdfe6..ae96a50a76 100644 --- a/be/src/vec/functions/function_grouping.h +++ b/be/src/vec/functions/function_grouping.h @@ -38,7 +38,10 @@ public: size_t result, size_t input_rows_count) override { const ColumnWithTypeAndName& src_column = block.get_by_position(arguments[0]); DCHECK(src_column.column->size() == input_rows_count); - block.get_by_position(result).column = src_column.column; + // result of functions grouping and grouping_id is always not nullable, + // but outer join will convert the column to nullable when necessary, + // so need to remove nullable here when functions grouping and grouping_id are executed + block.get_by_position(result).column = remove_nullable(src_column.column); return Status::OK(); } }; diff --git a/regression-test/data/query_p0/grouping_sets/test_grouping_sets1.out b/regression-test/data/query_p0/grouping_sets/test_grouping_sets1.out index a717f57bf4..31973c7bb9 100644 --- a/regression-test/data/query_p0/grouping_sets/test_grouping_sets1.out +++ b/regression-test/data/query_p0/grouping_sets/test_grouping_sets1.out @@ -29,3 +29,8 @@ a \N a -1 0 0 0 0 0 1 a \N a -1 0 1 0 1 1 1 \N \N all -1 1 1 1 1 3 2 +-- !sql_grouping_nullable -- +2019-05-04 2019-05-04 2019-05-04 2019-05-04 +2019-05-05 2019-05-05 2019-05-05 2019-05-05 +\N empty \N empty + diff --git a/regression-test/suites/query_p0/grouping_sets/test_grouping_sets1.groovy b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets1.groovy index 477f607a76..e3808f55f0 100644 --- a/regression-test/suites/query_p0/grouping_sets/test_grouping_sets1.groovy +++ b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets1.groovy @@ -109,4 +109,88 @@ suite("test_grouping_sets1") { grouping_col1,grouping_col2,col1,col2 ; """ + + + sql """ DROP TABLE IF EXISTS `grouping_t1`; """ + sql """ + CREATE TABLE `grouping_t1` ( + `p_date` date NULL, + `entry_id` varchar(200) NULL, + `publish_date` text NULL + ) ENGINE=OLAP + UNIQUE KEY(`p_date`, `entry_id`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`entry_id`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + sql """ + insert into grouping_t1 values ("2023-03-29", "aaa", "2019-05-04"), + ("2023-03-29", "bbb", "2019-05-04"), + ("2023-03-30", "aaa", "2019-05-05"); + """ + + sql """ DROP TABLE IF EXISTS `grouping_t2`; """ + sql """ + CREATE TABLE `grouping_t2` ( + `p_date` date NULL, + `entry_id` varchar(64) NULL, + `entry_date` varchar(64) NULL + ) ENGINE=OLAP + DUPLICATE KEY(`p_date`, `entry_id`) + DISTRIBUTED BY HASH(`entry_id`) BUCKETS 2 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + sql """ + insert into grouping_t2 values ("2023-03-29", "aaa", "2019-05-04"), + ("2023-03-29", "bbb", "2019-05-04"), + ("2023-03-30", "aaa", "2019-05-05"); + """ + + qt_sql_grouping_nullable """ + select + * + from + ( + select + idt_335.publish_date, + if( + grouping(idt_335.publish_date) = 0, + idt_335.publish_date, + 'empty' + ) as dim_207 + from + ( + select + * + from + grouping_t1 + ) idt_335 + group by + GROUPING SETS((idt_335.publish_date),()) + ) t_0 full + join ( + select + idt_765.entry_date, + if( + grouping(idt_765.entry_date) = 0, + idt_765.entry_date, + 'empty' + ) as dim_207 + from + ( + select + * + from + grouping_t2 + ) idt_765 + group by + GROUPING SETS((idt_765.entry_date),()) + ) t_1 on t_0.dim_207 = t_1.dim_207; + """ } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org