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/04/11 11:46:48 UTC
[doris] branch master updated: [bug](array) fix be core in array_with_constant/array_repeat function when the first argument is nullable (#18404)
This is an automated email from the ASF dual-hosted git repository.
xuyang 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 1238f6de97 [bug](array) fix be core in array_with_constant/array_repeat function when the first argument is nullable (#18404)
1238f6de97 is described below
commit 1238f6de975106869f2a2f90e70348f4fb300abc
Author: xy720 <22...@users.noreply.github.com>
AuthorDate: Tue Apr 11 19:46:41 2023 +0800
[bug](array) fix be core in array_with_constant/array_repeat function when the first argument is nullable (#18404)
fix be core in array_with_constant/array_repeat function when the first argument is nullable
---
be/src/vec/functions/array/function_array_with_constant.cpp | 4 ++++
.../sql-functions/array-functions/array_with_constant.md | 9 +++++++++
.../sql-functions/array-functions/array_with_constant.md | 9 +++++++++
.../sql_functions/array_functions/test_array_functions.out | 11 +++++++++++
.../array_functions/test_array_functions_by_literal.out | 7 +++++++
.../sql_functions/array_functions/test_array_functions.groovy | 1 +
.../array_functions/test_array_functions_by_literal.groovy | 2 ++
7 files changed, 43 insertions(+)
diff --git a/be/src/vec/functions/array/function_array_with_constant.cpp b/be/src/vec/functions/array/function_array_with_constant.cpp
index 6c4466be55..5ee91b97a3 100644
--- a/be/src/vec/functions/array/function_array_with_constant.cpp
+++ b/be/src/vec/functions/array/function_array_with_constant.cpp
@@ -18,6 +18,7 @@
#include "vec/columns/column_array.h"
#include "vec/columns/column_const.h"
#include "vec/data_types/data_type_array.h"
+#include "vec/data_types/data_type_nullable.h"
#include "vec/data_types/data_type_number.h"
#include "vec/functions/function.h"
#include "vec/functions/function_helpers.h"
@@ -54,6 +55,9 @@ public:
size_t result, size_t input_rows_count) override {
auto num = block.get_by_position(arguments[FunctionType::param_num_idx])
.column->convert_to_full_column_if_const();
+ num = num->is_nullable()
+ ? assert_cast<const ColumnNullable*>(num.get())->get_nested_column_ptr()
+ : num;
auto value = block.get_by_position(arguments[FunctionType::param_val_idx])
.column->convert_to_full_column_if_const();
auto offsets_col = ColumnVector<ColumnArray::Offset64>::create();
diff --git a/docs/en/docs/sql-manual/sql-functions/array-functions/array_with_constant.md b/docs/en/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
index 9b9982c32b..60f4d0cd5e 100644
--- a/docs/en/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
+++ b/docs/en/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
@@ -72,6 +72,15 @@ mysql> select array_with_constant(3, null), array_repeat(null, 3);
| [NULL, NULL, NULL] | [NULL, NULL, NULL] |
+------------------------------+-----------------------+
1 row in set (0.01 sec)
+
+mysql> select array_with_constant(null, 3), array_repeat(3, null);
++------------------------------+-----------------------+
+| array_with_constant(NULL, 3) | array_repeat(3, NULL) |
++------------------------------+-----------------------+
+| [] | [] |
++------------------------------+-----------------------+
+1 row in set (0.01 sec)
+
```
### keywords
diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/array-functions/array_with_constant.md b/docs/zh-CN/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
index 99e73da2b0..bb419e6de7 100644
--- a/docs/zh-CN/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
+++ b/docs/zh-CN/docs/sql-manual/sql-functions/array-functions/array_with_constant.md
@@ -73,6 +73,15 @@ mysql> select array_with_constant(3, null), array_repeat(null, 3);
| [NULL, NULL, NULL] | [NULL, NULL, NULL] |
+------------------------------+-----------------------+
1 row in set (0.01 sec)
+
+mysql> select array_with_constant(null, 3), array_repeat(3, null);
++------------------------------+-----------------------+
+| array_with_constant(NULL, 3) | array_repeat(3, NULL) |
++------------------------------+-----------------------+
+| [] | [] |
++------------------------------+-----------------------+
+1 row in set (0.01 sec)
+
```
### keywords
diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
index ee258b88e9..228170dea7 100644
--- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
+++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out
@@ -956,6 +956,17 @@
8 [123, 123] [123, 123]
9 [123, 123] [123, 123]
+-- !select_array_with_constant5 --
+1 [3] [3]
+2 [3, 3] [3, 3]
+3 [3, 3, 3] [3, 3, 3]
+4 [3, 3, 3, 3] [3, 3, 3, 3]
+5 [3, 3, 3, 3, 3] [3, 3, 3, 3, 3]
+6 [3, 3, 3, 3, 3, 3] [3, 3, 3, 3, 3, 3]
+7 [3, 3, 3, 3, 3, 3, 3] [3, 3, 3, 3, 3, 3, 3]
+8 [3, 3, 3, 3, 3, 3, 3, 3] [3, 3, 3, 3, 3, 3, 3, 3]
+9 [3, 3, 3, 3, 3, 3, 3, 3, 3] [3, 3, 3, 3, 3, 3, 3, 3, 3]
+
-- !select --
1 [2, 1]
2 [2, 2]
diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
index 0a6df2301f..8002628352 100644
--- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
+++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out
@@ -617,6 +617,12 @@ _
-- !sql_array_with_constant4 --
[NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL] [NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL]
+-- !sql_array_with_constant5 --
+[] []
+
+-- !sql_array_with_constant6 --
+[] []
+
-- !sql --
[1, 2, 3, NULL, 4]
@@ -823,3 +829,4 @@ _
-- !sql --
[333.333, 111.111, 222.222]
+
diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
index 881704ecd4..34a791b4f2 100644
--- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
+++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
@@ -139,6 +139,7 @@ suite("test_array_functions") {
qt_select_array_with_constant2 "SELECT k1, array_with_constant(10, null), array_repeat(null, 10) from ${tableName} ORDER BY k1"
qt_select_array_with_constant3 "SELECT k1, array_with_constant(2, 'a'), array_repeat('a', 2) from ${tableName} ORDER BY k1"
qt_select_array_with_constant4 "SELECT k1, array_with_constant(2, 123), array_repeat(123, 2) from ${tableName} ORDER BY k1"
+ qt_select_array_with_constant5 "SELECT k1, array_with_constant(k1, 3), array_repeat(3, k1) from ${tableName} ORDER BY k1"
qt_select "SELECT k1, array(2, k1) from ${tableName} ORDER BY k1"
qt_select "SELECT k1, array(k1, null, '2020-01-01') from ${tableName} ORDER BY k1"
qt_select "SELECT k1, array(null, k1) from ${tableName} ORDER BY k1"
diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
index 1e9c1507ab..8d9c1487d7 100644
--- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
+++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy
@@ -250,6 +250,8 @@ suite("test_array_functions_by_literal") {
qt_sql_array_with_constant2 "select array_with_constant(2, '1'), array_repeat('1', 2)"
qt_sql_array_with_constant3 "select array_with_constant(4, 1223), array_repeat(1223, 4)"
qt_sql_array_with_constant4 "select array_with_constant(8, null), array_repeat(null, 8)"
+ qt_sql_array_with_constant5 "select array_with_constant(null, 'abc'), array_repeat('abc', null)"
+ qt_sql_array_with_constant6 "select array_with_constant(null, null), array_repeat(null, null)"
// array_compact function
qt_sql "select array_compact([1, 2, 3, 3, null, null, 4, 4])"
qt_sql "select array_compact([null, null, null])"
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org