diff options
author | unknown <tnurnberg@mysql.com> | 2006-05-31 13:36:28 +0200 |
---|---|---|
committer | unknown <tnurnberg@mysql.com> | 2006-05-31 13:36:28 +0200 |
commit | c69ba2559bd1b866895186d7e41d0a1e17e25714 (patch) | |
tree | fa70a8b7e428338d25cc0677bf0be4d778caed8a | |
parent | 967c9739be6404941d9c0c03d7569e424fa27eab (diff) | |
download | mariadb-git-c69ba2559bd1b866895186d7e41d0a1e17e25714.tar.gz |
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
-rw-r--r-- | client/mysqldump.c | 3 | ||||
-rw-r--r-- | mysql-test/r/mysqldump.result | 19 | ||||
-rw-r--r-- | mysql-test/t/mysqldump.test | 21 |
3 files changed, 43 insertions, 0 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c index ee6d7b9d12b..bc41ebb486f 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -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); } diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 467e0818646..2d5be53ea6f 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -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`() diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 4076fd258e9..f88b0f7cd2b 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -1128,6 +1128,27 @@ 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 # |