summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <iggy@rolltop.ignatz42.dyndns.org>2006-07-17 18:07:08 -0400
committerunknown <iggy@rolltop.ignatz42.dyndns.org>2006-07-17 18:07:08 -0400
commit1c242b0e6f4a2e55a10284b377b5843bd6f79bc3 (patch)
tree749cdf0e9f005bea8ca17f159e5c065200023800
parentd512f22ec1a3c0fd3de587b6a0160d7b6d8ac0ec (diff)
downloadmariadb-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.c17
-rw-r--r--mysql-test/r/mysqldump.result39
-rw-r--r--mysql-test/t/mysqldump.test38
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;