diff options
-rw-r--r-- | mysql-test/r/sp-destruct.result | 18 | ||||
-rw-r--r-- | mysql-test/t/sp-destruct.test | 27 | ||||
-rw-r--r-- | sql/sp.cc | 2 |
3 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/r/sp-destruct.result b/mysql-test/r/sp-destruct.result index 32d0e39c5af..a3c8574d141 100644 --- a/mysql-test/r/sp-destruct.result +++ b/mysql-test/r/sp-destruct.result @@ -150,3 +150,21 @@ Warnings: Error 1547 Column count of mysql.proc is wrong. Expected 20, found 19. The table is probably corrupted # Restore mysql.proc. drop table mysql.proc; +# +# Bug#58414 mysql_upgrade fails on dump upgrade between 5.1.53 -> 5.5.8 +# +DROP TABLE IF EXISTS proc_backup; +DROP DATABASE IF EXISTS db1; +# Backup the proc table +RENAME TABLE mysql.proc TO proc_backup; +CREATE TABLE mysql.proc LIKE proc_backup; +CREATE DATABASE db1; +CREATE PROCEDURE db1.p1() SET @foo = 10; +# Modify a field of the table. +ALTER TABLE mysql.proc MODIFY comment CHAR (32); +DROP DATABASE db1; +Warnings: +Error 1548 Cannot load from mysql.proc. The table is probably corrupted +# Restore mysql.proc +DROP TABLE mysql.proc; +RENAME TABLE proc_backup TO mysql.proc; diff --git a/mysql-test/t/sp-destruct.test b/mysql-test/t/sp-destruct.test index a5c287e44a8..b4aa9ea1959 100644 --- a/mysql-test/t/sp-destruct.test +++ b/mysql-test/t/sp-destruct.test @@ -252,3 +252,30 @@ drop table mysql.proc; --remove_file $MYSQLTEST_VARDIR/tmp/proc.frm --remove_file $MYSQLTEST_VARDIR/tmp/proc.MYD --remove_file $MYSQLTEST_VARDIR/tmp/proc.MYI + + +--echo # +--echo # Bug#58414 mysql_upgrade fails on dump upgrade between 5.1.53 -> 5.5.8 +--echo # + +--disable_warnings +DROP TABLE IF EXISTS proc_backup; +DROP DATABASE IF EXISTS db1; +--enable_warnings + +--echo # Backup the proc table +RENAME TABLE mysql.proc TO proc_backup; +CREATE TABLE mysql.proc LIKE proc_backup; + +CREATE DATABASE db1; +CREATE PROCEDURE db1.p1() SET @foo = 10; + +--echo # Modify a field of the table. +ALTER TABLE mysql.proc MODIFY comment CHAR (32); + +# This should not fail even if mysql.proc is invalid. +DROP DATABASE db1; + +--echo # Restore mysql.proc +DROP TABLE mysql.proc; +RENAME TABLE proc_backup TO mysql.proc; diff --git a/sql/sp.cc b/sql/sp.cc index 71a5afb437c..ae11c2ad14c 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -1372,6 +1372,8 @@ public: MYSQL_ERROR ** cond_hdl) { if (sql_errno == ER_NO_SUCH_TABLE || + sql_errno == ER_CANNOT_LOAD_FROM_TABLE || + sql_errno == ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE || sql_errno == ER_COL_COUNT_DOESNT_MATCH_CORRUPTED) return true; return false; |