summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc19
1 files changed, 9 insertions, 10 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 3fde2d1f2d3..91d1354a6b7 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -9904,7 +9904,6 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
if (alter_info->requested_lock > Alter_info::ALTER_TABLE_LOCK_NONE
|| alter_info->flags & ALTER_DROP_SYSTEM_VERSIONING
- || thd->locked_tables_mode == LTM_LOCK_TABLES
|| thd->lex->sql_command == SQLCOM_OPTIMIZE
|| ignore
|| alter_info->algorithm(thd) > Alter_info::ALTER_TABLE_ALGORITHM_COPY)
@@ -10035,16 +10034,13 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
set of tables from the old table or to open a new TABLE object for
an extended list and verify that they belong to locked tables.
*/
- if (thd->locked_tables_mode == LTM_LOCK_TABLES ||
- thd->locked_tables_mode == LTM_PRELOCKED_UNDER_LOCK_TABLES)
+ if ((thd->locked_tables_mode == LTM_LOCK_TABLES ||
+ thd->locked_tables_mode == LTM_PRELOCKED_UNDER_LOCK_TABLES) &&
+ (create_info->used_fields & HA_CREATE_USED_UNION) &&
+ (table->s->tmp_table == NO_TMP_TABLE))
{
- if ((create_info->used_fields & HA_CREATE_USED_UNION) &&
- (table->s->tmp_table == NO_TMP_TABLE))
- {
- my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0));
- DBUG_RETURN(true);
- }
- alter_info->requested_lock= Alter_info::ALTER_TABLE_LOCK_DEFAULT;
+ my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0));
+ DBUG_RETURN(true);
}
/* Check that we are not trying to rename to an existing table */
@@ -10767,6 +10763,9 @@ do_continue:;
goto err_new_table_cleanup;
}
+ if (thd->locked_tables_mode == LTM_LOCK_TABLES)
+ online= false;
+
// If EXCLUSIVE lock is requested, upgrade already.
if (alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_EXCLUSIVE &&
wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN))