diff options
author | unknown <iggy@rolltop.ignatz42.dyndns.org> | 2006-07-17 18:07:08 -0400 |
---|---|---|
committer | unknown <iggy@rolltop.ignatz42.dyndns.org> | 2006-07-17 18:07:08 -0400 |
commit | 1c242b0e6f4a2e55a10284b377b5843bd6f79bc3 (patch) | |
tree | 749cdf0e9f005bea8ca17f159e5c065200023800 | |
parent | d512f22ec1a3c0fd3de587b6a0160d7b6d8ac0ec (diff) | |
download | mariadb-git-1c242b0e6f4a2e55a10284b377b5843bd6f79bc3.tar.gz |
Bug# 20221- Dumping of multiple databases containing view(s) yields maleformed dumps.
client/mysqldump.c:
When dumping more than one database, make sure that the proper database is selected before restoring that database's views.
Replaced hard-coded database name length with appropiate token.
mysql-test/r/mysqldump.result:
Added new result and corrected results for existing test cases.
mysql-test/t/mysqldump.test:
Added new case for dumping and restoring multiple databases each containing a view.
-rw-r--r-- | client/mysqldump.c | 17 | ||||
-rw-r--r-- | mysql-test/r/mysqldump.result | 39 | ||||
-rw-r--r-- | mysql-test/t/mysqldump.test | 38 |
3 files changed, 91 insertions, 3 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c index 9469815bfaf..13e2b80c0b2 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2637,7 +2637,7 @@ static int init_dumping(char *database) /* length of table name * 2 (if name contains quotes), 2 quotes and 0 */ - char quoted_database_buf[64*2+3]; + char quoted_database_buf[NAME_LEN*2+3]; char *qdatabase= quote_name(database,quoted_database_buf,opt_quoted); if (opt_comments) { @@ -2786,7 +2786,18 @@ static my_bool dump_all_views_in_db(char *database) DB_error(sock, "when selecting the database"); return 1; } - + if (opt_databases || opt_alldbs) + { + char quoted_database_buf[NAME_LEN*2+3]; + char *qdatabase= quote_name(database,quoted_database_buf,opt_quoted); + if (opt_comments) + { + fprintf(md_result_file,"\n--\n-- Current Database: %s\n--\n", qdatabase); + check_io(md_result_file); + } + fprintf(md_result_file,"\nUSE %s;\n", qdatabase); + check_io(md_result_file); + } if (opt_xml) print_xml_tag1(md_result_file, "", "database name=", database, "\n"); if (lock_tables) @@ -3239,7 +3250,7 @@ static char *primary_key_fields(const char *table_name) MYSQL_RES *res = NULL; MYSQL_ROW row; /* SHOW KEYS FROM + table name * 2 (escaped) + 2 quotes + \0 */ - char show_keys_buff[15 + 64 * 2 + 3]; + char show_keys_buff[15 + NAME_LEN * 2 + 3]; uint result_length = 0; char *result = 0; diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 6bc60164e9b..99a651c954e 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -2503,6 +2503,8 @@ DROP TABLE IF EXISTS `v2`; `b` varchar(32), `c` varchar(32) ) */; + +USE `test`; /*!50001 DROP TABLE IF EXISTS `v0`*/; /*!50001 DROP VIEW IF EXISTS `v0`*/; /*!50001 CREATE ALGORITHM=UNDEFINED */ @@ -2826,6 +2828,8 @@ DROP TABLE IF EXISTS `v1`; /*!50001 CREATE TABLE `v1` ( `id` int(11) ) */; + +USE `mysqldump_test_db`; /*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 CREATE ALGORITHM=UNDEFINED */ @@ -2867,6 +2871,10 @@ USE `mysqldump_views`; /*!50001 CREATE TABLE `nasishnasifu` ( `id` bigint(20) unsigned ) */; + +USE `mysqldump_tables`; + +USE `mysqldump_views`; /*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ /*!50001 VIEW `mysqldump_views`.`nasishnasifu` AS select `mysqldump_tables`.`basetable`.`id` AS `id` from `mysqldump_tables`.`basetable` */; @@ -2874,3 +2882,34 @@ drop view nasishnasifu; drop database mysqldump_views; drop table mysqldump_tables.basetable; drop database mysqldump_tables; +create database mysqldump_dba; +use mysqldump_dba; +create table t1 (f1 int, f2 int); +insert into t1 values (1,1); +create view v1 as select f1, f2 from t1; +create database mysqldump_dbb; +use mysqldump_dbb; +create table t1 (f1 int, f2 int); +insert into t1 values (2,2); +create view v1 as select f1, f2 from t1; +drop view v1; +drop table t1; +drop database mysqldump_dbb; +use mysqldump_dba; +drop view v1; +drop table t1; +drop database mysqldump_dba; +select * from mysqldump_dba.v1; +f1 f2 +1 1 +select * from mysqldump_dbb.v1; +f1 f2 +2 2 +use mysqldump_dba; +drop view v1; +drop table t1; +drop database mysqldump_dba; +use mysqldump_dbb; +drop view v1; +drop table t1; +drop database mysqldump_dbb; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 575b9c98120..a4961dda7b6 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -1230,3 +1230,41 @@ drop view nasishnasifu; drop database mysqldump_views; drop table mysqldump_tables.basetable; drop database mysqldump_tables; + +# Bug20221 Dumping of multiple databases containing view(s) yields maleformed dumps + +create database mysqldump_dba; +use mysqldump_dba; +create table t1 (f1 int, f2 int); +insert into t1 values (1,1); +create view v1 as select f1, f2 from t1; + +create database mysqldump_dbb; +use mysqldump_dbb; +create table t1 (f1 int, f2 int); +insert into t1 values (2,2); +create view v1 as select f1, f2 from t1; + +--exec $MYSQL_DUMP --skip-comments --add-drop-database --databases mysqldump_dba mysqldump_dbb > $MYSQLTEST_VARDIR/tmp/bug20221_backup; + +drop view v1; +drop table t1; +drop database mysqldump_dbb; +use mysqldump_dba; +drop view v1; +drop table t1; +drop database mysqldump_dba; + +--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20221_backup; + +select * from mysqldump_dba.v1; +select * from mysqldump_dbb.v1; + +use mysqldump_dba; +drop view v1; +drop table t1; +drop database mysqldump_dba; +use mysqldump_dbb; +drop view v1; +drop table t1; +drop database mysqldump_dbb; |