Commit c69ba255 authored by unknown's avatar unknown

Bug#18462: mysqldump does not dump view structures correctly

(The above problem only occurs with -T -- create a separate file for
each table / view.) This ChangeSet results in correct output of view-
information while omitting the information for the view's stand-in
table. The rationale is that with -T, the user is likely interested
in transferring part of a database, not the db in its entirety (that
would be difficult as replay order is obscure, the files being named
for the table/view they contain rather than getting a sequence number).


client/mysqldump.c:
  Added missing fclose(). Before, a view's stand-in table would get
  dumped in get_table_structure(), and the file would remain open.
  get_view_structure() would re-open the same file and write to it,
  resulting in garbage.  The way we handle it now, the table-struct
  gets closed, then the opening of the view-struct (same name)
  overwrites it. (The SQL for the view drop-if-exists the table,
  anyway.) If this were not desired and we wanted SQL for the views
  that contains the create for the stand-in table, we'd hand a mode
  to open_sql_file_for_table(), which would feature O_APPEND in
  get_view_structure(), but not in get_table_structure().
mysql-test/r/mysqldump.result:
  prove mysqldump -T (each item gets its own file) dumps views correctly
mysql-test/t/mysqldump.test:
  prove mysqldump -T (each item gets its own file) dumps views correctly
parent 967c9739
......@@ -1554,6 +1554,9 @@ static uint get_table_structure(char *table, char *db, char *table_type,
}
mysql_free_result(result);
if (path)
my_fclose(sql_file, MYF(MY_WME));
was_views= 1;
DBUG_RETURN(0);
}
......
......@@ -2717,6 +2717,25 @@ end AFTER # root@localhost
drop trigger tr1;
drop trigger tr2;
drop table t1, t2;
create table t (qty int, price int);
insert into t values(3, 50);
insert into t values(5, 51);
create view v1 as select qty, price, qty*price as value from t;
create view v2 as select qty from v1;
mysqldump {
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v1` AS select `t`.`qty` AS `qty`,`t`.`price` AS `price`,(`t`.`qty` * `t`.`price`) AS `value` from `t` */;
} mysqldump {
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v2` AS select `v1`.`qty` AS `qty` from `v1` */;
} mysqldump
drop view v1;
drop view v2;
drop table t;
/*!50003 CREATE FUNCTION `f`() RETURNS bigint(20)
return 42 */|
/*!50003 CREATE PROCEDURE `p`()
......
......@@ -1127,6 +1127,27 @@ drop trigger tr2;
drop table t1, t2;
#
# Bug#18462 mysqldump does not dump view structures correctly
#
#
create table t (qty int, price int);
insert into t values(3, 50);
insert into t values(5, 51);
create view v1 as select qty, price, qty*price as value from t;
create view v2 as select qty from v1;
--echo mysqldump {
--exec $MYSQL_DUMP --compact -F --tab . test
--exec cat v1.sql
--echo } mysqldump {
--exec cat v2.sql
--echo } mysqldump
--rm v.sql t.sql t.txt
drop view v1;
drop view v2;
drop table t;
#
# Bug#14857 Reading dump files with single statement stored routines fails.
# fixed by patch for bug#16878
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment