mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-27 05:56:07 +03:00 
			
		
		
		
	Merge kpdesk.mysql.com:/home/thek/dev/bug22043/my51-bug22043
into kpdesk.mysql.com:/home/thek/dev/mysql-5.1-maint sql/sql_parse.cc: Auto merged
This commit is contained in:
		| @@ -468,4 +468,24 @@ 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; | ||||||
| End of 5.0 tests | End of 5.0 tests | ||||||
|  | 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 8657; | ||||||
|  | Log_name	Pos	Event_type	Server_id	End_log_pos	Info | ||||||
|  | master-bin.000001	8657	Query	1	8760	drop database if exists mysqltest2 | ||||||
|  | master-bin.000001	8760	Query	1	8853	create database mysqltest | ||||||
|  | master-bin.000001	8853	Query	1	8948	create database mysqltest2 | ||||||
|  | master-bin.000001	8948	Query	1	9045	use `mysqltest2`; create table t ( t integer ) | ||||||
|  | master-bin.000001	9045	Query	1	9184	use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end | ||||||
|  | master-bin.000001	9184	Query	1	9279	use `mysqltest2`; insert into t values ( 1 ) | ||||||
|  | create procedure `\\`.test() begin end; | ||||||
|  | ERROR 42000: Unknown database '\\' | ||||||
|  | drop database mysqltest; | ||||||
|  | drop database mysqltest2; | ||||||
| End of 5.1 tests | End of 5.1 tests | ||||||
|   | |||||||
| @@ -528,4 +528,26 @@ connection master; | |||||||
| set global log_bin_trust_function_creators=0; | set global log_bin_trust_function_creators=0; | ||||||
| --echo End of 5.0 tests | --echo End of 5.0 tests | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # 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 8657; | ||||||
|  | --error ER_BAD_DB_ERROR | ||||||
|  | create procedure `\\`.test() begin end; | ||||||
|  | # Clean up | ||||||
|  | drop database mysqltest; | ||||||
|  | drop database mysqltest2; | ||||||
|  |  | ||||||
| --echo End of 5.1 tests | --echo End of 5.1 tests | ||||||
|  |  | ||||||
|   | |||||||
| @@ -497,17 +497,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 | ||||||
| @@ -631,8 +624,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); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4384,6 +4384,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