This is an automated email from the ASF dual-hosted git repository. panxiaolei 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 48ec530d2c [fix](functions) fix least/greatest function coredump bug (#19462) 48ec530d2c is described below commit 48ec530d2c447390088542c3391f1bd06a76054d Author: xueweizhang <zxw520bl...@163.com> AuthorDate: Wed May 17 14:12:52 2023 +0800 [fix](functions) fix least/greatest function coredump bug (#19462) fix least/greatest function coredump bug --- be/src/vec/functions/least_greast.cpp | 12 +- .../math_functions/test_least_greatest.out | 325 +++++++++++++++++++++ .../math_functions/test_least_greatest.groovy | 121 ++++++++ 3 files changed, 455 insertions(+), 3 deletions(-) diff --git a/be/src/vec/functions/least_greast.cpp b/be/src/vec/functions/least_greast.cpp index 4358a19bb3..26f168ad68 100644 --- a/be/src/vec/functions/least_greast.cpp +++ b/be/src/vec/functions/least_greast.cpp @@ -79,10 +79,10 @@ struct CompareMultiImpl { auto& column_res = reinterpret_cast<ColumnString&>(*result_column); for (int i = 0; i < input_rows_count; ++i) { - auto str_data = column_string.get_data_at(i); + auto str_data = column_string.get_data_at(index_check_const(i, col_const[0])); for (int cmp_col = 1; cmp_col < arguments.size(); ++cmp_col) { auto temp_data = assert_cast<const ColumnString&>(*cols[cmp_col]) - .get_data_at(index_check_const(i, col_const[i])); + .get_data_at(index_check_const(i, col_const[cmp_col])); str_data = Op<StringRef, StringRef>::apply(temp_data, str_data) ? temp_data : str_data; } @@ -90,7 +90,13 @@ struct CompareMultiImpl { } } else { - result_column->insert_range_from(*(cols[0]), 0, input_rows_count); + if (col_const[0]) { + for (int i = 0; i < input_rows_count; ++i) { + result_column->insert_range_from(*(cols[0]), 0, 1); + } + } else { + result_column->insert_range_from(*(cols[0]), 0, input_rows_count); + } WhichDataType which(data_type); #define DISPATCH(TYPE, COLUMN_TYPE) \ diff --git a/regression-test/data/query_p0/sql_functions/math_functions/test_least_greatest.out b/regression-test/data/query_p0/sql_functions/math_functions/test_least_greatest.out new file mode 100644 index 0000000000..da49e1da30 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/math_functions/test_least_greatest.out @@ -0,0 +1,325 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- +1 + +-- !select -- +1 + +-- !select -- +1111 + +-- !select -- +1111111 + +-- !select -- +1.100000000 + +-- !select -- +1.100000000 + +-- !select -- +2020-01-01 01:01:01 + +-- !select -- +2020-01-01 + +-- !select -- +aaa + +-- !select -- +1 + +-- !select -- +3 + +-- !select -- +3333 + +-- !select -- +3333333 + +-- !select -- +1.300000000 + +-- !select -- +10.000000000 + +-- !select -- +2020-01-03 01:01:01 + +-- !select -- +2020-01-03 + +-- !select -- +ccc + +-- !select -- +1 +1 +1 + +-- !select -- +1 +1 +1 + +-- !select -- +1111 +1111 +1111 + +-- !select -- +1111111 +1111111 +1111111 + +-- !select -- +1.100000000 +1.100000000 +1.100000000 + +-- !select -- +1.100000000 +1.100000000 +1.100000000 + +-- !select -- +2020-01-01 01:01:01 +2020-01-01 01:01:01 +2020-01-01 01:01:01 + +-- !select -- +2020-01-01 +2020-01-01 +2020-01-01 + +-- !select -- +aaa +aaa +aaa + +-- !select -- +1 +2 +3 + +-- !select -- +1.1 +2.2 +3.3 + +-- !select -- +1 +2 +3 + +-- !select -- +2020-01-01 +2020-02-01 +2020-03-01 + +-- !select -- +2020-01-01T01:01:01 +2020-02-01T01:01:01 +2020-03-01T01:01:01 + +-- !select -- +aaa +bbb +ccc + +-- !select -- +1 +2 +3 + +-- !select -- +1.1 +2.2 +3.3 + +-- !select -- +1 +2 +3 + +-- !select -- +2020-01-01 +2020-02-01 +2020-03-01 + +-- !select -- +2020-01-01T01:01:01 +2020-02-01T01:01:01 +2020-03-01T01:01:01 + +-- !select -- +aaa +bbb +ccc + +-- !select -- +1 +2 +3 + +-- !select -- +1.100000000 +2.200000000 +3.300000000 + +-- !select -- +1.000000000 +2.000000000 +3.000000000 + +-- !select -- +2020-01-01 +2020-02-01 +2020-03-01 + +-- !select -- +2020-01-01 01:01:01 +2020-02-01 01:01:01 +2020-03-01 01:01:01 + +-- !select -- +aaa +bbb +ccc + +-- !select -- +1 +1 +1 + +-- !select -- +3 +3 +3 + +-- !select -- +3333 +3333 +3333 + +-- !select -- +3333333 +3333333 +3333333 + +-- !select -- +1.300000000 +1.300000000 +1.300000000 + +-- !select -- +10.000000000 +10.000000000 +10.000000000 + +-- !select -- +2020-01-03 01:01:01 +2020-01-03 01:01:01 +2020-01-03 01:01:01 + +-- !select -- +2020-01-03 +2020-01-03 +2020-01-03 + +-- !select -- +ccc +ccc +ccc + +-- !select -- +1 +2 +3 + +-- !select -- +1.1 +2.2 +3.3 + +-- !select -- +1 +2 +3 + +-- !select -- +2020-01-01 +2020-02-01 +2020-03-01 + +-- !select -- +2020-01-01T01:01:01 +2020-02-01T01:01:01 +2020-03-01T01:01:01 + +-- !select -- +aaa +bbb +ccc + +-- !select -- +1 +2 +3 + +-- !select -- +1.1 +2.2 +3.3 + +-- !select -- +1 +2 +3 + +-- !select -- +2020-01-01 +2020-02-01 +2020-03-01 + +-- !select -- +2020-01-01T01:01:01 +2020-02-01T01:01:01 +2020-03-01T01:01:01 + +-- !select -- +aaa +bbb +ccc + +-- !select -- +100 +100 +100 + +-- !select -- +100.100000000 +100.100000000 +100.100000000 + +-- !select -- +100.000010000 +100.000010000 +100.000010000 + +-- !select -- +2021-01-01 +2021-01-01 +2021-01-01 + +-- !select -- +2021-01-01 01:01:01 +2021-01-01 01:01:01 +2021-01-01 01:01:01 + +-- !select -- +zzz +zzz +zzz + diff --git a/regression-test/suites/query_p0/sql_functions/math_functions/test_least_greatest.groovy b/regression-test/suites/query_p0/sql_functions/math_functions/test_least_greatest.groovy new file mode 100644 index 0000000000..5da23ccb25 --- /dev/null +++ b/regression-test/suites/query_p0/sql_functions/math_functions/test_least_greatest.groovy @@ -0,0 +1,121 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_least_greatest") { + qt_select "SELECT LEAST(1)" + qt_select "SELECT LEAST(1,2,3)" + qt_select "SELECT LEAST(1111,2222,3333)" + qt_select "SELECT LEAST(1111111,2222222,3333333)" + qt_select "SELECT LEAST(1.1,1.2,1.3)" + qt_select "SELECT LEAST(1.1,10,2)" + qt_select "SELECT LEAST('2020-01-01 01:01:01', '2020-01-02 01:01:01', '2020-01-03 01:01:01')" + qt_select "SELECT LEAST('2020-01-01', '2020-01-02', '2020-01-03')" + qt_select "SELECT LEAST('aaa', 'bbb', 'ccc')" + + qt_select "SELECT GREATEST(1)" + qt_select "SELECT GREATEST(1,2,3)" + qt_select "SELECT GREATEST(1111,2222,3333)" + qt_select "SELECT GREATEST(1111111,2222222,3333333)" + qt_select "SELECT GREATEST(1.1,1.2,1.3)" + qt_select "SELECT GREATEST(1.1,10,2)" + qt_select "SELECT GREATEST('2020-01-01 01:01:01', '2020-01-02 01:01:01', '2020-01-03 01:01:01')" + qt_select "SELECT GREATEST('2020-01-01', '2020-01-02', '2020-01-03')" + qt_select "SELECT GREATEST('aaa', 'bbb', 'ccc')" + + sql """ drop table if exists test_least_greatest; """ + sql """ create table test_least_greatest( + k1 INT, + v1 DOUBLE, + v2 DECIMALV3, + v3 DATEV2, + v4 DATETIMEV2, + v5 STRING + ) distributed by hash (k1) buckets 1 + properties ("replication_num"="1"); + """ + sql """ insert into test_least_greatest values + (1, 1.1, 1.111111, '2020-01-01', '2020-01-01 01:01:01', 'aaa'), + (2, 2.2, 2.222222, '2020-02-01', '2020-02-01 01:01:01', 'bbb'), + (3, 3.3, 3.333333, '2020-03-01', '2020-03-01 01:01:01', 'ccc') + """ + + qt_select "SELECT LEAST(1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(1,2,3) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(1111,2222,3333) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(1111111,2222222,3333333) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(1.1,1.2,1.3) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(1.1,10,2) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('2020-01-01 01:01:01', '2020-01-02 01:01:01', '2020-01-03 01:01:01') FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('2020-01-01', '2020-01-02', '2020-01-03') FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('aaa', 'bbb', 'ccc') FROM test_least_greatest order by k1" + + qt_select "SELECT LEAST(k1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v2) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v3) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v4) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v5) FROM test_least_greatest order by k1" + + qt_select "SELECT LEAST(k1, k1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v1, v1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v2, v2) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v3, v3) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v4, v4) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(v5, v5) FROM test_least_greatest order by k1" + + qt_select "SELECT LEAST(100, k1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(100.100, v1) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST(100.00001, v2) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('2021-01-01', v3) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('2021-01-01 01:01:01', v4) FROM test_least_greatest order by k1" + qt_select "SELECT LEAST('zzz', v5) FROM test_least_greatest order by k1" + + qt_select "SELECT GREATEST(1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(1,2,3) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(1111,2222,3333) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(1111111,2222222,3333333) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(1.1,1.2,1.3) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(1.1,10,2) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('2020-01-01 01:01:01', '2020-01-02 01:01:01', '2020-01-03 01:01:01') FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('2020-01-01', '2020-01-02', '2020-01-03') FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('aaa', 'bbb', 'ccc') FROM test_least_greatest order by k1" + + qt_select "SELECT GREATEST(k1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v2) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v3) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v4) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v5) FROM test_least_greatest order by k1" + + qt_select "SELECT GREATEST(k1, k1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v1, v1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v2, v2) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v3, v3) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v4, v4) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(v5, v5) FROM test_least_greatest order by k1" + + qt_select "SELECT GREATEST(100, k1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(100.100, v1) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST(100.00001, v2) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('2021-01-01', v3) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('2021-01-01 01:01:01', v4) FROM test_least_greatest order by k1" + qt_select "SELECT GREATEST('zzz', v5) FROM test_least_greatest order by k1" + + sql """ drop table if exists test_least_greatest; """ +} + + --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org