From 9a0ac0cdf7814241dbc8f3d95fa045f9fa6358e6 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 24 Jan 2025 13:48:12 +0100 Subject: [PATCH] MDEV-35911 Assertion `marked_for_write_or_computed()' failed in bool Field_new_decimal::store_value(const my_decimal*, int*) disable the assert. also, use the same check for check_that_all_fields_are_given_values() as it's used in not_null_fields_have_null_values() - to avoid issuing the same warning twice. --- .../{trigger_null-8605.result => trigger_null.result} | 11 +++++++++++ .../{trigger_null-8605.test => trigger_null.test} | 10 ++++++++++ sql/field_conv.cc | 2 ++ sql/sql_insert.cc | 3 +-- 4 files changed, 24 insertions(+), 2 deletions(-) rename mysql-test/main/{trigger_null-8605.result => trigger_null.result} (96%) rename mysql-test/main/{trigger_null-8605.test => trigger_null.test} (97%) diff --git a/mysql-test/main/trigger_null-8605.result b/mysql-test/main/trigger_null.result similarity index 96% rename from mysql-test/main/trigger_null-8605.result rename to mysql-test/main/trigger_null.result index 6480fbf9a7e..91bae7e3b0e 100644 --- a/mysql-test/main/trigger_null-8605.result +++ b/mysql-test/main/trigger_null.result @@ -388,4 +388,15 @@ id rate 3 15 4 5 drop table t1; +# +# MDEV-35911 Assertion `marked_for_write_or_computed()' failed in bool Field_new_decimal::store_value(const my_decimal*, int*) +# +set sql_mode=''; +create table t1 (c fixed,c2 binary (1),c5 fixed not null); +create trigger tr1 before update on t1 for each row set @a=0; +insert into t1 (c) values (1); +Warnings: +Warning 1364 Field 'c5' doesn't have a default value +drop table t1; +set sql_mode=default; # End of 10.5 tests diff --git a/mysql-test/main/trigger_null-8605.test b/mysql-test/main/trigger_null.test similarity index 97% rename from mysql-test/main/trigger_null-8605.test rename to mysql-test/main/trigger_null.test index e33f17151bf..d3b74af49b3 100644 --- a/mysql-test/main/trigger_null-8605.test +++ b/mysql-test/main/trigger_null.test @@ -415,4 +415,14 @@ select * from t1; drop table t1; +--echo # +--echo # MDEV-35911 Assertion `marked_for_write_or_computed()' failed in bool Field_new_decimal::store_value(const my_decimal*, int*) +--echo # +set sql_mode=''; +create table t1 (c fixed,c2 binary (1),c5 fixed not null); +create trigger tr1 before update on t1 for each row set @a=0; +insert into t1 (c) values (1); +drop table t1; +set sql_mode=default; + --echo # End of 10.5 tests diff --git a/sql/field_conv.cc b/sql/field_conv.cc index dcbb6b39a31..a8c528d07fd 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -172,7 +172,9 @@ int convert_null_to_field_value_or_error(Field *field, uint err) return 0; } + MY_BITMAP *old_map= dbug_tmp_use_all_columns(field->table, &field->table->write_set); field->reset(); // Note: we ignore any potential failure of reset() here. + dbug_tmp_restore_column_map(&field->table->write_set, old_map); if (field == field->table->next_number_field) { diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 0182ca0ee1b..26adcf3d228 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -950,8 +950,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list, if (fields.elements || !value_count || table_list->view != 0) { - if (table->triggers && - table->triggers->has_triggers(TRG_EVENT_INSERT, TRG_ACTION_BEFORE)) + if (table->field != table->field_to_fill()) { /* BEFORE INSERT triggers exist, the check will be done later, per row */ }