mirror of
https://github.com/MariaDB/server.git
synced 2025-08-30 11:22:14 +03:00
Merge kpdesk.mysql.com:/home/thek/dev/bug22043/my50-bug22043
into kpdesk.mysql.com:/home/thek/dev/mysql-5.0-maint
This commit is contained in:
@@ -467,3 +467,28 @@ DROP FUNCTION f1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
set global log_bin_trust_function_creators=0;
|
set global log_bin_trust_function_creators=0;
|
||||||
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;
|
||||||
|
@@ -524,4 +524,25 @@ sync_slave_with_master;
|
|||||||
set global log_bin_trust_function_creators=0;
|
set global log_bin_trust_function_creators=0;
|
||||||
connection master;
|
connection master;
|
||||||
set global log_bin_trust_function_creators=0;
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -494,17 +494,10 @@ db_create_routine(THD *thd, int type, sp_head *sp)
|
|||||||
char definer[USER_HOST_BUFF_SIZE];
|
char definer[USER_HOST_BUFF_SIZE];
|
||||||
char old_db_buf[NAME_LEN+1];
|
char old_db_buf[NAME_LEN+1];
|
||||||
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
|
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
|
||||||
bool dbchanged;
|
|
||||||
DBUG_ENTER("db_create_routine");
|
DBUG_ENTER("db_create_routine");
|
||||||
DBUG_PRINT("enter", ("type: %d name: %.*s",type,sp->m_name.length,
|
DBUG_PRINT("enter", ("type: %d name: %.*s",type,sp->m_name.length,
|
||||||
sp->m_name.str));
|
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)))
|
if (!(table= open_proc_table_for_update(thd)))
|
||||||
ret= SP_OPEN_TABLE_FAILED;
|
ret= SP_OPEN_TABLE_FAILED;
|
||||||
else
|
else
|
||||||
@@ -629,8 +622,6 @@ db_create_routine(THD *thd, int type, sp_head *sp)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
if (dbchanged)
|
|
||||||
(void) mysql_change_db(thd, old_db.str, 1);
|
|
||||||
DBUG_RETURN(ret);
|
DBUG_RETURN(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4249,6 +4249,30 @@ end_with_restore_list:
|
|||||||
DBUG_ASSERT(lex->sphead != 0);
|
DBUG_ASSERT(lex->sphead != 0);
|
||||||
DBUG_ASSERT(lex->sphead->m_db.str); /* Must be initialized in the parser */
|
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,
|
if (check_access(thd, CREATE_PROC_ACL, lex->sphead->m_db.str, 0, 0, 0,
|
||||||
is_schema_db(lex->sphead->m_db.str)))
|
is_schema_db(lex->sphead->m_db.str)))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user