Commit 8ac71ce7 authored by unknown's avatar unknown
Browse files

Merge kpdesk.mysql.com:/home/thek/dev/bug22043/my50-bug22043

into  kpdesk.mysql.com:/home/thek/dev/mysql-5.0-maint


sql/sql_parse.cc:
  Auto merged
mysql-test/r/rpl_sp.result:
  - merged
mysql-test/t/rpl_sp.test:
  -merged
parents 89d106c1 9a87702b
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -467,3 +467,28 @@ DROP FUNCTION f1;
drop table t1;
set global log_bin_trust_function_creators=0;
set global log_bin_trust_function_creators=0;
drop database if exists mysqltest;
drop database if exists mysqltest2;
create database mysqltest;
create database mysqltest2;
use mysqltest2;
create table t ( t integer );
create procedure mysqltest.test() begin end;
insert into t values ( 1 );
show binlog events in 'master-bin.000001' from 8186;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
master-bin.000001	8186	Query	1	8317	use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION f1() RETURNS INT RETURN 0
master-bin.000001	8317	Query	1	8397	use `test`; DROP PROCEDURE p1
master-bin.000001	8397	Query	1	8476	use `test`; DROP FUNCTION f1
master-bin.000001	8476	Query	1	8552	use `test`; drop table t1
master-bin.000001	8552	Query	1	8653	drop database if exists mysqltest
master-bin.000001	8653	Query	1	8756	drop database if exists mysqltest2
master-bin.000001	8756	Query	1	8849	create database mysqltest
master-bin.000001	8849	Query	1	8944	create database mysqltest2
master-bin.000001	8944	Query	1	9041	use `mysqltest2`; create table t ( t integer )
master-bin.000001	9041	Query	1	9180	use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end
master-bin.000001	9180	Query	1	9275	use `mysqltest2`; insert into t values ( 1 )
create procedure `\\`.test() begin end;
ERROR 42000: Incorrect database name '\\'
drop database mysqltest;
drop database mysqltest2;
+21 −0
Original line number Diff line number Diff line
@@ -524,4 +524,25 @@ sync_slave_with_master;
set global log_bin_trust_function_creators=0;
connection master;
set global log_bin_trust_function_creators=0;
#
# Bug22043: MySQL don't add "USE <DATABASE>" before "DROP PROCEDURE IF EXISTS"
#
connection master;
--disable_warnings
drop database if exists mysqltest;
drop database if exists mysqltest2;
--enable_warnings
create database mysqltest;
create database mysqltest2;
use mysqltest2;
create table t ( t integer );
create procedure mysqltest.test() begin end;
insert into t values ( 1 );
show binlog events in 'master-bin.000001' from 8186;
--error ER_WRONG_DB_NAME
create procedure `\\`.test() begin end;
# Clean up
drop database mysqltest;
drop database mysqltest2;

+0 −9
Original line number Diff line number Diff line
@@ -494,17 +494,10 @@ db_create_routine(THD *thd, int type, sp_head *sp)
  char definer[USER_HOST_BUFF_SIZE];
  char old_db_buf[NAME_LEN+1];
  LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
  bool dbchanged;
  DBUG_ENTER("db_create_routine");
  DBUG_PRINT("enter", ("type: %d name: %.*s",type,sp->m_name.length,
                       sp->m_name.str));

  if ((ret= sp_use_new_db(thd, sp->m_db, &old_db, 0, &dbchanged)))
  {
    ret= SP_NO_DB_ERROR;
    goto done;
  }

  if (!(table= open_proc_table_for_update(thd)))
    ret= SP_OPEN_TABLE_FAILED;
  else
@@ -629,8 +622,6 @@ db_create_routine(THD *thd, int type, sp_head *sp)

done:
  close_thread_tables(thd);
  if (dbchanged)
    (void) mysql_change_db(thd, old_db.str, 1);
  DBUG_RETURN(ret);
}

+24 −0
Original line number Diff line number Diff line
@@ -4249,6 +4249,30 @@ mysql_execute_command(THD *thd)
    DBUG_ASSERT(lex->sphead != 0);
    DBUG_ASSERT(lex->sphead->m_db.str); /* Must be initialized in the parser */

    /*
      Verify that the database name is allowed, optionally
      lowercase it.
    */
    if (check_db_name(lex->sphead->m_db.str))
    {
      my_error(ER_WRONG_DB_NAME, MYF(0), lex->sphead->m_db.str);
      delete lex->sphead;
      lex->sphead= 0;
      goto error;
    }

    /*
      Check that a database with this name
      exists.
    */
    if (check_db_dir_existence(lex->sphead->m_db.str))
    {
      my_error(ER_BAD_DB_ERROR, MYF(0), lex->sphead->m_db.str);
      delete lex->sphead;
      lex->sphead= 0;
      goto error;
    }

    if (check_access(thd, CREATE_PROC_ACL, lex->sphead->m_db.str, 0, 0, 0,
                     is_schema_db(lex->sphead->m_db.str)))
    {