summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKentoku SHIBA <kentokushiba@gmail.com>2021-04-30 03:32:29 +0900
committerGitHub <noreply@github.com>2021-04-30 03:32:29 +0900
commit687b913cb5350f3199468e358c09440ebff4f2f8 (patch)
tree8f35ad36b9283a3878a0073a44d54e80477538e1
parent54a478b39663cbd578af4794d8f0cb0b5f7e5436 (diff)
parente8b9d8d38cac3ca4c18a09a29601791390323bbb (diff)
downloadmariadb-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.result17
-rw-r--r--mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test17
-rw-r--r--sql/sql_table.cc16
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);
}
}
}