From: Chad MILLER Date: May 15 2008 8:48pm Subject: bk commit into 5.0 tree (cmiller:1.2625) BUG#36570 List-Archive: http://lists.mysql.com/commits/46749 X-Bug: 36570 Message-Id: <20080515204833.C44AB8305C@cornsilk.net> Below is the list of changes that have just been committed into a local 5.0 repository of cmiller. When cmiller does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2008-05-15 16:48:29-04:00, cmiller@stripped +5 -0 Update for Bug#36570. Qualify routine names with db name when writing to the binlog. mysql-test/r/binlog_innodb.result@stripped, 2008-05-15 16:48:27-04:00, cmiller@stripped +1 -1 New offset to account for db-qualified names. mysql-test/r/ctype_cp932_binlog.result@stripped, 2008-05-15 16:48:27-04:00, cmiller@stripped +4 -4 Qualify routine names with DB. Offsets change also. mysql-test/r/mysqlbinlog.result@stripped, 2008-05-15 16:48:27-04:00, cmiller@stripped +1 -1 Qualify procedure name with db. mysql-test/r/rpl_sp.result@stripped, 2008-05-15 16:48:27-04:00, cmiller@stripped +17 -17 Qualify routine names with DB. Offsets change also. sql/sp.cc@stripped, 2008-05-15 16:48:27-04:00, cmiller@stripped +10 -1 Make the db name part of the CREATE string if it is specified. Specify it in part of writing to the binlog when creating a new routine. diff -Nrup a/mysql-test/r/binlog_innodb.result b/mysql-test/r/binlog_innodb.result --- a/mysql-test/r/binlog_innodb.result 2008-05-14 19:23:52 -04:00 +++ b/mysql-test/r/binlog_innodb.result 2008-05-15 16:48:27 -04:00 @@ -34,6 +34,6 @@ END| INSERT INTO t2 VALUES (2),(10+bug23333()); SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB -# 184141 +# 184148 DROP FUNCTION bug23333; DROP TABLE t1, t2; diff -Nrup a/mysql-test/r/ctype_cp932_binlog.result b/mysql-test/r/ctype_cp932_binlog.result --- a/mysql-test/r/ctype_cp932_binlog.result 2008-05-14 19:23:52 -04:00 +++ b/mysql-test/r/ctype_cp932_binlog.result 2008-05-15 16:48:27 -04:00 @@ -34,12 +34,12 @@ Log_name Pos Event_type Server_id End_lo master-bin.000001 362 Query 1 528 use `test`; CREATE TABLE t4 (s1 CHAR(50) CHARACTER SET latin1, s2 CHAR(50) CHARACTER SET cp932, d DECIMAL(10,2)) -master-bin.000001 528 Query 1 777 use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug18293`(IN ins1 CHAR(50), +master-bin.000001 528 Query 1 784 use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.`bug18293`(IN ins1 CHAR(50), IN ins2 CHAR(50) CHARACTER SET cp932, IN ind DECIMAL(10,2)) BEGIN INSERT INTO t4 VALUES (ins1, ins2, ind); END -master-bin.000001 777 Query 1 988 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93)) -master-bin.000001 988 Query 1 1077 use `test`; DROP PROCEDURE bug18293 -master-bin.000001 1077 Query 1 1156 use `test`; DROP TABLE t4 +master-bin.000001 784 Query 1 995 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93)) +master-bin.000001 995 Query 1 1084 use `test`; DROP PROCEDURE bug18293 +master-bin.000001 1084 Query 1 1163 use `test`; DROP TABLE t4 diff -Nrup a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result --- a/mysql-test/r/mysqlbinlog.result 2008-05-14 19:23:52 -04:00 +++ b/mysql-test/r/mysqlbinlog.result 2008-05-15 16:48:27 -04:00 @@ -268,7 +268,7 @@ SET @@session.foreign_key_checks=1, @@se SET @@session.sql_mode=0/*!*/; /*!\C latin1 *//*!*/; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; -CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.`p1`() begin select 1; end diff -Nrup a/mysql-test/r/rpl_sp.result b/mysql-test/r/rpl_sp.result --- a/mysql-test/r/rpl_sp.result 2008-05-14 19:23:52 -04:00 +++ b/mysql-test/r/rpl_sp.result 2008-05-15 16:48:27 -04:00 @@ -386,7 +386,7 @@ Log_name Pos Event_type Server_id End_lo master-bin.000001 # Query 1 # drop database if exists mysqltest1 master-bin.000001 # Query 1 # create database mysqltest1 master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a varchar(100)) -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest1`.`foo`() begin declare b int; set b = 8; @@ -396,19 +396,19 @@ end master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8)) master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp()) master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest1`.`foo2`() select * from mysqltest1.t1 master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1 master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int) master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest1`.`foo3`() DETERMINISTIC insert into t1 values (15) master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1 master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1 master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `mysqltest1`.`foo4`() DETERMINISTIC begin insert into t2 values(3); @@ -423,7 +423,7 @@ master-bin.000001 # Query 1 # use `mysql master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2 master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a) master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest1`.`foo4`() DETERMINISTIC begin insert into t2 values(20),(20); @@ -433,7 +433,7 @@ master-bin.000001 # Query 1 # use `mysql master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2 master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo3 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `mysqltest1`.`fn1`(x int) RETURNS int(11) DETERMINISTIC begin insert into t1 values (x); @@ -443,19 +443,19 @@ master-bin.000001 # Query 1 # use `mysql master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20) master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21)) master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `mysqltest1`.`fn1`() RETURNS int(11) NO SQL begin return unix_timestamp(); end master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1 master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(fn1()) -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `mysqltest1`.`fn2`() RETURNS int(11) NO SQL begin return unix_timestamp(); end -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `mysqltest1`.`fn3`() RETURNS int(11) READS SQL DATA begin return 0; @@ -463,7 +463,7 @@ end master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2 master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a) master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1 -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `mysqltest1`.`fn1`(x int) RETURNS int(11) begin insert into t2 values(x),(x); return 10; @@ -476,14 +476,14 @@ master-bin.000001 # Query 1 # use `mysql master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1 master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1) -master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`() +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest1`.`foo`() READS SQL DATA select * from t1 master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1 master-bin.000001 # Query 1 # drop database mysqltest1 master-bin.000001 # Query 1 # drop user "zedjzlcsjhd"@127.0.0.1 -master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `test`.`f1`() RETURNS int(11) READS SQL DATA begin declare var integer; @@ -500,13 +500,13 @@ master-bin.000001 # Query 1 # use `test` master-bin.000001 # Query 1 # use `test`; drop function f1 master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1 master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10)) -master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10)) +master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.`p1`(arg VARCHAR(10)) INSERT INTO t1 VALUES(arg) master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test')) master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1 -master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.`p1`() SET @a = 1 -master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `test`.`f1`() RETURNS int(11) RETURN 0 master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1 master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1 @@ -516,10 +516,10 @@ master-bin.000001 # Query 1 # drop datab master-bin.000001 # Query 1 # create database mysqltest master-bin.000001 # Query 1 # create database mysqltest2 master-bin.000001 # Query 1 # use `mysqltest2`; create table t ( t integer ) -master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `test`() +master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`() begin end master-bin.000001 # Query 1 # use `mysqltest2`; insert into t values ( 1 ) -master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `mysqltest2`.`f1`() RETURNS int(11) begin insert into t values (1); return 0; diff -Nrup a/sql/sp.cc b/sql/sp.cc --- a/sql/sp.cc 2008-05-14 19:23:52 -04:00 +++ b/sql/sp.cc 2008-05-15 16:48:27 -04:00 @@ -25,6 +25,7 @@ static bool create_string(THD *thd, String *buf, int sp_type, + const char *db, ulong dblen, const char *name, ulong namelen, const char *params, ulong paramslen, const char *returns, ulong returnslen, @@ -427,6 +428,7 @@ db_load_routine(THD *thd, int type, sp_n if (!create_string(thd, &defstr, type, + NULL, 0, name->m_name.str, name->m_name.length, params, strlen(params), returns, strlen(returns), @@ -628,6 +630,7 @@ db_create_routine(THD *thd, int type, sp if (!create_string(thd, &log_query, sp->m_type, + sp->m_db.str, sp->m_db.length, sp->m_name.str, sp->m_name.length, sp->m_params.str, sp->m_params.length, retstr.c_ptr(), retstr.length(), @@ -1804,6 +1807,7 @@ sp_cache_routines_and_add_tables_for_tri static bool create_string(THD *thd, String *buf, int type, + const char *db, ulong dblen, const char *name, ulong namelen, const char *params, ulong paramslen, const char *returns, ulong returnslen, @@ -1813,7 +1817,7 @@ create_string(THD *thd, String *buf, const LEX_STRING *definer_host) { /* Make some room to begin with */ - if (buf->alloc(100 + namelen + paramslen + returnslen + bodylen + + if (buf->alloc(100 + dblen + 1 + namelen + paramslen + returnslen + bodylen + chistics->comment.length + 10 /* length of " DEFINER= "*/ + USER_HOST_BUFF_SIZE)) return FALSE; @@ -1824,6 +1828,11 @@ create_string(THD *thd, String *buf, buf->append(STRING_WITH_LEN("FUNCTION ")); else buf->append(STRING_WITH_LEN("PROCEDURE ")); + if (dblen > 0) + { + append_identifier(thd, buf, db, dblen); + buf->append('.'); + } append_identifier(thd, buf, name, namelen); buf->append('('); buf->append(params, paramslen);