diff options
author | Kentoku SHIBA <kentokushiba@gmail.com> | 2021-04-30 03:32:29 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-30 03:32:29 +0900 |
commit | 687b913cb5350f3199468e358c09440ebff4f2f8 (patch) | |
tree | 8f35ad36b9283a3878a0073a44d54e80477538e1 | |
parent | 54a478b39663cbd578af4794d8f0cb0b5f7e5436 (diff) | |
parent | e8b9d8d38cac3ca4c18a09a29601791390323bbb (diff) | |
download | mariadb-git-bb-10.5-MDEV-22265.tar.gz |
Merge branch '10.5' into bb-10.5-MDEV-22265bb-10.5-MDEV-22265
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result | 17 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test | 17 | ||||
-rw-r--r-- | sql/sql_table.cc | 16 |
3 files changed, 36 insertions, 14 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result b/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result index 7f2a82f1efb..cd8bb938828 100644 --- a/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result +++ b/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result @@ -55,4 +55,21 @@ count(*) 0 connection master; drop table t2,t1; +set foreign_key_checks=1; +# +# MDEV-25530 Error 1451 on slave: Cannot delete or update a parent row: a foreign key constraint fails +# +create table t1 (id int primary key)engine=innodb; +create table t2 (id int not null primary key auto_increment, +id2 int default null, key f1 (id2), +constraint f1 foreign key (id2) references t1 (id) on delete cascade) engine=innodb; +drop table t1,t2; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails +connection slave; +show tables; +Tables_in_test +t1 +connection master; +drop table t1; +connection slave; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test b/mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test index 53db1723325..2c4af75e020 100644 --- a/mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test +++ b/mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test @@ -57,5 +57,22 @@ select count(*) from t1 /* must be zero */; connection master; drop table t2,t1; +set foreign_key_checks=1; + +--echo # +--echo # MDEV-25530 Error 1451 on slave: Cannot delete or update a parent row: a foreign key constraint fails +--echo # + +create table t1 (id int primary key)engine=innodb; +create table t2 (id int not null primary key auto_increment, + id2 int default null, key f1 (id2), + constraint f1 foreign key (id2) references t1 (id) on delete cascade) engine=innodb; +error ER_ROW_IS_REFERENCED_2; +drop table t1,t2; +sync_slave_with_master; +show tables; +connection master; +drop table t1; +sync_slave_with_master; --source include/rpl_end.inc diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 79979d05033..6330c09e2e8 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2238,7 +2238,6 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, uint not_found_errors= 0; int error= 0; int non_temp_tables_count= 0; - bool non_tmp_error= 0; bool trans_tmp_table_deleted= 0, non_trans_tmp_table_deleted= 0; bool non_tmp_table_deleted= 0; bool is_drop_tmp_if_exists_added= 0; @@ -2304,7 +2303,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, { bool is_trans= 0, temporary_table_was_dropped= 0; bool table_creation_was_logged= 0; - bool local_non_tmp_error= 0, wrong_drop_sequence= 0; + bool wrong_drop_sequence= 0; bool table_dropped= 0; const LEX_CSTRING db= table->db; const LEX_CSTRING table_name= table->table_name; @@ -2469,7 +2468,6 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, */ wrong_drop_sequence= drop_sequence && hton; was_table|= wrong_drop_sequence; - local_non_tmp_error= 1; error= table_type == TABLE_TYPE_UNKNOWN ? ENOENT : -1; tdc_remove_table(thd, db.str, table_name.str); } @@ -2562,7 +2560,6 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, table_dropped= 1; } } - local_non_tmp_error|= MY_TEST(error); } /* @@ -2580,8 +2577,6 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, ferror= ha_delete_table_force(thd, path, &db, &table_name); if (!ferror) { - /* Table existed and was deleted */ - local_non_tmp_error= 0; table_dropped= 1; error= 0; } @@ -2655,12 +2650,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, didn't exists */ if (if_exists && non_existing_table_error(error)) - { error= 0; - local_non_tmp_error= 0; - } - - non_tmp_error|= local_non_tmp_error; if (!error && table_dropped) { @@ -2774,12 +2764,10 @@ err: normal_tables.chop(); built_query.append(normal_tables.ptr(), normal_tables.length()); built_query.append(" /* generated by server */"); - int error_code = non_tmp_error ? thd->get_stmt_da()->sql_errno() : 0; error |= (thd->binlog_query(THD::STMT_QUERY_TYPE, built_query.ptr(), built_query.length(), - TRUE, FALSE, FALSE, - error_code) > 0); + TRUE, FALSE, FALSE, 0) > 0); } } } |