[bugfix](concat) be crash caused by function concat(ifnull) (#13693)

This commit is contained in:
TengJianPing
2022-10-28 08:42:51 +08:00
committed by GitHub
parent c108554f14
commit 859ffa6304
3 changed files with 12 additions and 1 deletions

View File

@ -62,7 +62,7 @@ public:
// ifnull(col_left, col_right) == if(isnull(col_left), col_right, col_left)
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) override {
const ColumnWithTypeAndName& col_left = block.get_by_position(arguments[0]);
ColumnWithTypeAndName& col_left = block.get_by_position(arguments[0]);
if (col_left.column->only_null()) {
block.get_by_position(result).column = block.get_by_position(arguments[1]).column;
return Status::OK();
@ -71,6 +71,8 @@ public:
ColumnWithTypeAndName null_column_arg0 {nullptr, std::make_shared<DataTypeUInt8>(), ""};
ColumnWithTypeAndName nested_column_arg0 {nullptr, col_left.type, ""};
col_left.column = col_left.column->convert_to_full_column_if_const();
/// implement isnull(col_left) logic
if (auto* nullable = check_and_get_column<ColumnNullable>(*col_left.column)) {
null_column_arg0.column = nullable->get_null_map_column_ptr();

View File

@ -1,4 +1,10 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !ifnull_const1 --
aA
-- !ifnull_const2 --
aA
-- !select --
true
\N

View File

@ -16,6 +16,9 @@
// under the License.
suite("test_nullif") {
qt_ifnull_const1 """select CONCAT('a', ifnull(split_part('A.B','.',1), 'x'));"""
qt_ifnull_const2 """select CONCAT('a', ifnull(split_part('A.B','.',1), null));"""
def tableName = "datetype"
sql """ DROP TABLE IF EXISTS ${tableName} """