#At file:///home/ram/mysql/b44860-5.1-bugteam/ based on revid:gshchepa@stripped
2888 Ramil Kalimullin 2009-05-19
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.
modified:
mysql-test/r/view.result
mysql-test/t/view.test
sql/sql_rename.cc
sql/sql_table.cc
=== modified file 'mysql-test/r/view.result'
--- a/mysql-test/r/view.result 2009-05-18 19:51:52 +0000
+++ b/mysql-test/r/view.result 2009-05-19 04:25:36 +0000
@@ -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.
# -----------------------------------------------------------------
=== modified file 'mysql-test/t/view.test'
--- a/mysql-test/t/view.test 2009-05-18 19:51:52 +0000
+++ b/mysql-test/t/view.test 2009-05-19 04:25:36 +0000
@@ -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 # -----------------------------------------------------------------
=== modified file 'sql/sql_rename.cc'
--- a/sql/sql_rename.cc 2009-04-13 13:09:10 +0000
+++ b/sql/sql_rename.cc 2009-05-19 04:25:36 +0000
@@ -261,6 +261,8 @@ do_rename(THD *thd, TABLE_LIST *ren_tabl
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))
=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc 2009-05-15 13:03:22 +0000
+++ b/sql/sql_table.cc 2009-05-19 04:25:36 +0000
@@ -6140,6 +6140,20 @@ bool mysql_alter_table(THD *thd,char *ne
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
*/
Attachment: [text/bzr-bundle] bzr/ramil@mysql.com-20090519042536-l4brd8nluz002t3m.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-bugteam branch (ramil:2888) Bug#44860 | Ramil Kalimullin | 19 May |