summaryrefslogtreecommitdiff
path: root/storage/innobase/row/row0mysql.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/row/row0mysql.cc')
-rw-r--r--storage/innobase/row/row0mysql.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index 483e10b6283..b20d0cddf5b 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -2549,7 +2549,7 @@ row_rename_table_for_mysql(
const char* old_name, /*!< in: old table name */
const char* new_name, /*!< in: new table name */
trx_t* trx, /*!< in/out: transaction */
- bool use_fk) /*!< in: whether to parse and enforce
+ rename_fk fk) /*!< in: how to handle
FOREIGN KEY constraints */
{
dict_table_t* table = NULL;
@@ -2634,9 +2634,9 @@ row_rename_table_for_mysql(
goto funct_exit;
- } else if (use_fk && !old_is_tmp && new_is_tmp) {
- /* MySQL is doing an ALTER TABLE command and it renames the
- original table to a temporary table name. We want to preserve
+ } else if (fk == RENAME_ALTER_COPY && !old_is_tmp && new_is_tmp) {
+ /* Non-native ALTER TABLE is renaming the
+ original table to a temporary name. We want to preserve
the original foreign key constraint definitions despite the
name change. An exception is those constraints for which
the ALTER TABLE contained DROP FOREIGN KEY <foreign key id>.*/
@@ -2680,7 +2680,7 @@ row_rename_table_for_mysql(
goto rollback_and_exit;
}
- if (!new_is_tmp) {
+ if (fk == RENAME_IGNORE_FK || fk == RENAME_FK || !new_is_tmp) {
/* Rename all constraints. */
char new_table_name[MAX_TABLE_NAME_LEN + 1];
char old_table_utf8[MAX_TABLE_NAME_LEN + 1];
@@ -2854,7 +2854,7 @@ row_rename_table_for_mysql(
err = dict_load_foreigns(
new_name, nullptr, trx->id,
!old_is_tmp || trx->check_foreigns,
- use_fk
+ fk == RENAME_FK || fk == RENAME_ALTER_COPY
? DICT_ERR_IGNORE_NONE
: DICT_ERR_IGNORE_FK_NOKEY,
fk_tables);