Commit 609277f9 authored by unknown's avatar unknown
Browse files

Bug#23491 MySQLDump prefix function call in a view by database name

- mysqldump executes a SHOW CREATE VIEW statement to generate the text
that it outputs.  When the function name is retrieved it's database 
name is unconditionally prepended.  This change causes the function's 
database name to be prepended only when it was used to define the 
function.


mysql-test/r/information_schema.result:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Updated Results.
mysql-test/r/mysqldump.result:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Added new results.
mysql-test/r/sp-code.result:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Updated Results.
mysql-test/r/udf.result:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Updated Results.
mysql-test/t/mysqldump.test:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Added new testcase.
sql/item_func.cc:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Use new m_explicit_name member when deciding whether or not to prepend
  the db name while building the function name.
sql/sp.cc:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Use new sp_name constructor.
sql/sp_head.h:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Add m_explicit_name member to sp_name object.
  - Redefined sp_name constructor to include new member.
sql/sql_yacc.yy:
  Bug#23491 MySQLDump prefix function call in a view by database name
  - Use new sp_name constructors.
parent 65c34cc8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -687,7 +687,7 @@ Warnings:
Warning	1356	View 'test.v2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
show create table v3;
View	Create View
v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `test`.`sub1`(1) AS `c`
v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `sub1`(1) AS `c`
Warnings:
Warning	1356	View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
drop view v2;
+23 −0
Original line number Diff line number Diff line
@@ -3218,5 +3218,28 @@ INSERT INTO t1 VALUES(1,0xff00fef0);
</mysqldump>
DROP TABLE t1;
#
# Bug #23491: MySQLDump prefix function call in a view by database name
#
create database bug23491_original;
create database bug23491_restore;
use bug23491_original;
create table t1 (c1 int);
create view v1 as select * from t1;
create procedure p1() select 1;
create function f1() returns int return 1;
create view v2 as select f1();
create function f2() returns int return f1();
create view v3 as select bug23491_original.f1();
use bug23491_restore;
show create view bug23491_restore.v2;
View	Create View
v2	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `f1`() AS `f1()`
show create view bug23491_restore.v3;
View	Create View
v3	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `bug23491_original`.`f1`() AS `bug23491_original.f1()`
drop database bug23491_original;
drop database bug23491_restore;
use test;
#
# End of 5.0 tests
#
+1 −1
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ Pos Instruction
32	set v_dig@4 (v_dig@4 + 1)
33	stmt 4 "update sudoku_work set dig = v_dig wh..."
34	set v_tcounter@6 (v_tcounter@6 + 1)
35	jump_if_not 37(37) (not(`test`.`sudoku_digit_ok`(v_row@7,v_col@8,v_dig@4)))
35	jump_if_not 37(37) (not(`sudoku_digit_ok`(v_row@7,v_col@8,v_dig@4)))
36	jump 15
37	set v_i@3 (v_i@3 + 1)
38	jump 15
+1 −1
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ EXPLAIN EXTENDED SELECT myfunc_int(fn(MIN(b))) as c FROM t1 GROUP BY a;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using temporary; Using filesort
Warnings:
Note	1003	select myfunc_int(`test`.`fn`(min(`test`.`t1`.`b`)) AS `fn(MIN(b))`) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
Note	1003	select myfunc_int(`fn`(min(`test`.`t1`.`b`)) AS `fn(MIN(b))`) AS `c` from `test`.`t1` group by `test`.`t1`.`a`
EXPLAIN EXTENDED SELECT myfunc_int(test.fn(MIN(b))) as c FROM t1 GROUP BY a;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using temporary; Using filesort
+32 −0
Original line number Diff line number Diff line
@@ -1429,6 +1429,38 @@ INSERT INTO t1 VALUES(1,0xff00fef0);

DROP TABLE t1;

--echo #
--echo # Bug #23491: MySQLDump prefix function call in a view by database name
--echo #

# Setup
create database bug23491_original;
create database bug23491_restore;
use bug23491_original;
create table t1 (c1 int);
create view v1 as select * from t1;
create procedure p1() select 1;
create function f1() returns int return 1;
create view v2 as select f1();
create function f2() returns int return f1();
create view v3 as select bug23491_original.f1();

# Backup.
--exec $MYSQL_DUMP --skip-comments -uroot --opt --routines bug23491_original > $MYSQLTEST_VARDIR/tmp/bug23491_backup.sql;

# Restore.
--exec $MYSQL bug23491_restore < $MYSQLTEST_VARDIR/tmp/bug23491_backup.sql;

# Verify
use bug23491_restore;
show create view bug23491_restore.v2;
show create view bug23491_restore.v3;

# Cleanup
drop database bug23491_original;
drop database bug23491_restore;
use test;

--echo #
--echo # End of 5.0 tests
--echo #
Loading