mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Fix for bug#44860: ALTER TABLE on view crashes server
Problem: executing queries like "ALTER TABLE view1;" we don't check new view's name (which is not specified), that leads to server crash. Fix: do nothing (to be consistent with the behaviour for tables) in such cases. mysql-test/r/view.result: Fix for bug#44860: ALTER TABLE on view crashes server - test result. mysql-test/t/view.test: Fix for bug#44860: ALTER TABLE on view crashes server - test case. sql/sql_rename.cc: Fix for bug#44860: ALTER TABLE on view crashes server - do_rename(): new view/table name must be specified, ASSERT() added. sql/sql_table.cc: Fix for bug#44860: ALTER TABLE on view crashes server - mysql_alter_table(): renaming a view, check if new view name is specified.
This commit is contained in:
parent
d4be7dadb8
commit
fb3e433d4e
4 changed files with 35 additions and 0 deletions
|
@ -3836,6 +3836,14 @@ call p();
|
|||
call p();
|
||||
drop view a;
|
||||
drop procedure p;
|
||||
#
|
||||
# Bug #44860: ALTER TABLE on view crashes server
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
ALTER TABLE v1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.1 tests.
|
||||
# -----------------------------------------------------------------
|
||||
|
|
|
@ -3859,6 +3859,17 @@ drop procedure p;
|
|||
|
||||
###########################################################################
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #44860: ALTER TABLE on view crashes server
|
||||
--echo #
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
ALTER TABLE v1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- End of 5.1 tests.
|
||||
--echo # -----------------------------------------------------------------
|
||||
|
|
|
@ -261,6 +261,8 @@ do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, char *new_table_name,
|
|||
old_alias= ren_table->table_name;
|
||||
new_alias= new_table_name;
|
||||
}
|
||||
DBUG_ASSERT(new_alias);
|
||||
|
||||
build_table_filename(name, sizeof(name),
|
||||
new_db, new_alias, reg_ext, 0);
|
||||
if (!access(name,F_OK))
|
||||
|
|
|
@ -6139,6 +6139,20 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
/* Sic: there is a race here */
|
||||
if (frm_type == FRMTYPE_VIEW && !(alter_info->flags & ~ALTER_RENAME))
|
||||
{
|
||||
/*
|
||||
The following branch handles "ALTER VIEW v1 /no arguments/;"
|
||||
This feature is not documented one.
|
||||
However, before "OPTIMIZE TABLE t1;" was implemented,
|
||||
ALTER TABLE with no alter_specifications was used to force-rebuild
|
||||
the table. That's why this grammar is allowed. That's why we ignore
|
||||
it for views. So just do nothing in such a case.
|
||||
*/
|
||||
if (!new_name)
|
||||
{
|
||||
my_ok(thd);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
Avoid problems with a rename on a table that we have locked or
|
||||
if the user is trying to to do this in a transcation context
|
||||
|
|
Loading…
Reference in a new issue