diff --git a/mysql-test/main/create.result b/mysql-test/main/create.result index 4bae81878103b..d901ead20f613 100644 --- a/mysql-test/main/create.result +++ b/mysql-test/main/create.result @@ -2066,3 +2066,9 @@ SHOW CREATE DATABASE `#testone#■■■■■■■■■■■■■■■■ ERROR 42000: Incorrect database name '#testone#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■...' SET NAMES DEFAULT; # End of 10.5 Test +# +# MDEV-39002: Diagnostics area assertion failure upon CREATE TABLE +# +CREATE TABLE t1 (a INT, b VARCHAR(8) DEFAULT (IFNULL(a,''))) CHARSET swe7; +ERROR HY000: Illegal mix of collations (latin1_swedish_ci,NUMERIC) and (swe7_swedish_ci,COERCIBLE) for operation 'ifnull' +End of 10.11 tests diff --git a/mysql-test/main/create.test b/mysql-test/main/create.test index dada6963fdb2e..74c100b5ee601 100644 --- a/mysql-test/main/create.test +++ b/mysql-test/main/create.test @@ -1945,3 +1945,12 @@ SHOW CREATE DATABASE `#testone#■■■■■■■■■■■■■■■■ SET NAMES DEFAULT; --echo # End of 10.5 Test + +--echo # +--echo # MDEV-39002: Diagnostics area assertion failure upon CREATE TABLE +--echo # + +--error ER_CANT_AGGREGATE_2COLLATIONS +CREATE TABLE t1 (a INT, b VARCHAR(8) DEFAULT (IFNULL(a,''))) CHARSET swe7; + +--echo End of 10.11 tests diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 753d939f6560d..d47394818faec 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -1207,9 +1207,9 @@ class Item_func_coalesce :public Item_func_case_expression bool fix_length_and_dec(THD *thd) override { update_nullability_post_fix_fields(); - if (aggregate_for_result(func_name_cstring(), args, arg_count, true)) + if (aggregate_for_result(func_name_cstring(), args, arg_count, true) || + fix_attributes(args, arg_count)) return TRUE; - fix_attributes(args, arg_count); return FALSE; } LEX_CSTRING func_name_cstring() const override @@ -1236,9 +1236,9 @@ class Item_func_case_abbreviation2 :public Item_func_case_expression protected: bool fix_length_and_dec2(Item **items) { - if (aggregate_for_result(func_name_cstring(), items, 2, true)) + if (aggregate_for_result(func_name_cstring(), items, 2, true) || + fix_attributes(items, 2)) return TRUE; - fix_attributes(items, 2); return FALSE; }