1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-28599 EXCHANGE PARTITION on view causes ER_CHECK_NO_SUCH_TABLE instead of ER_WRONG_OBJECT

ER_CHECK_NO_SUCH_TABLE was raised because a view does not have
the corresponding TABLE instance connected to TABLE_LIST and the
server interprets the absence as the absence of the table itself.

To fix the problem, we add a check to ensure that the target table
to be swapped with a partition is not a view.

Reviewed by: Nayuta Yanagisawa
This commit is contained in:
Masashi Tomooka
2022-05-30 19:28:44 +09:00
committed by GitHub
parent c4e87cb22c
commit f7137a619f
3 changed files with 33 additions and 2 deletions

View File

@ -539,6 +539,14 @@ bool Sql_cmd_alter_table_exchange_partition::
part_table= table_list->table;
swap_table= swap_table_list->table;
/* Don't allow to exchange with a VIEW */
if (unlikely(swap_table_list->view))
{
my_error(ER_WRONG_OBJECT, MYF(0), table_list->db.str,
swap_table_list->table_name.str, "BASE TABLE");
DBUG_RETURN(TRUE);
}
if (unlikely(check_exchange_partition(swap_table, part_table)))
DBUG_RETURN(TRUE);