summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/mysqldump.c11
-rw-r--r--mysql-test/r/mysqldump.result30
-rw-r--r--mysql-test/t/mysqldump.test19
3 files changed, 58 insertions, 2 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 53cb06be6f3..9469815bfaf 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -2781,6 +2781,12 @@ static my_bool dump_all_views_in_db(char *database)
uint numrows;
char table_buff[NAME_LEN*2+3];
+ if (mysql_select_db(sock, database))
+ {
+ DB_error(sock, "when selecting the database");
+ return 1;
+ }
+
if (opt_xml)
print_xml_tag1(md_result_file, "", "database name=", database, "\n");
if (lock_tables)
@@ -3436,12 +3442,13 @@ static my_bool get_view_structure(char *table, char* db)
mysql_free_result(table_res);
/* Get the result from "select ... information_schema" */
- if (!(table_res= mysql_store_result(sock)))
+ if (!(table_res= mysql_store_result(sock)) ||
+ !(row= mysql_fetch_row(table_res)))
{
safe_exit(EX_MYSQLERR);
DBUG_RETURN(1);
}
- row= mysql_fetch_row(table_res);
+
lengths= mysql_fetch_lengths(table_res);
/*
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result
index f9714e067e6..6bc60164e9b 100644
--- a/mysql-test/r/mysqldump.result
+++ b/mysql-test/r/mysqldump.result
@@ -2844,3 +2844,33 @@ DROP TABLE IF EXISTS `v1`;
drop view v1;
drop table t1;
drop database mysqldump_test_db;
+create database mysqldump_tables;
+use mysqldump_tables;
+create table basetable ( id serial, tag varchar(64) );
+create database mysqldump_views;
+use mysqldump_views;
+create view nasishnasifu as select mysqldump_tables.basetable.id from
+mysqldump_tables.basetable;
+
+CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqldump_tables` /*!40100 DEFAULT CHARACTER SET latin1 */;
+
+USE `mysqldump_tables`;
+CREATE TABLE `basetable` (
+ `id` bigint(20) unsigned NOT NULL auto_increment,
+ `tag` varchar(64) default NULL,
+ UNIQUE KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqldump_views` /*!40100 DEFAULT CHARACTER SET latin1 */;
+
+USE `mysqldump_views`;
+/*!50001 CREATE TABLE `nasishnasifu` (
+ `id` bigint(20) unsigned
+) */;
+/*!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` */;
+drop view nasishnasifu;
+drop database mysqldump_views;
+drop table mysqldump_tables.basetable;
+drop database mysqldump_tables;
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index 7e4fedb297d..575b9c98120 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -1195,6 +1195,7 @@ drop table t1;
--exec $MYSQL_DUMP --force -N --compact --skip-comments test
--echo } mysqldump
drop view v1;
+
# BUG#17201 Spurious 'DROP DATABASE' in output,
# also confusion between tables and views.
# Example code from Markus Popp
@@ -1211,3 +1212,21 @@ insert into t1 values (0815);
drop view v1;
drop table t1;
drop database mysqldump_test_db;
+
+# Bug21014 Segmentation fault of mysqldump on view
+
+create database mysqldump_tables;
+use mysqldump_tables;
+create table basetable ( id serial, tag varchar(64) );
+
+create database mysqldump_views;
+use mysqldump_views;
+create view nasishnasifu as select mysqldump_tables.basetable.id from
+mysqldump_tables.basetable;
+
+--exec $MYSQL_DUMP --skip-comments --compact --databases mysqldump_tables mysqldump_views;
+
+drop view nasishnasifu;
+drop database mysqldump_views;
+drop table mysqldump_tables.basetable;
+drop database mysqldump_tables;