From: Date: July 26 2006 3:55pm Subject: bk commit into 5.1 tree (msvensson:1.2231) BUG#17244 List-Archive: http://lists.mysql.com/commits/9589 X-Bug: 17244 Message-Id: <20060726135538.D2F9B86005F@localhost.localdomain> Below is the list of changes that have just been committed into a local 5.1 repository of msvensson. When msvensson 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, 2006-07-26 15:55:29+02:00, msvensson@shellback.(none) +7 -0 Bug#21039 Transaction cache not flushed after SELECT CREATE - Add prelocking for stored procedures that uses sp or sf - Update test result for sp_error(reported as bug#21294) - Make note about new error message from sp-error(bug#17244) mysql-test/r/sp-error.result@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +1 -1 Update test result(reported as bug#21294) mysql-test/r/sp_notembedded.result@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +0 -11 Update test result after disabling test case mysql-test/t/sp-error.test@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +4 -0 Add note about the faulty error message mysql-test/t/sp_notembedded.test@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +3 -1 Disable test case until bug#17244 has been fixed sql/sp.cc@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +9 -18 Add prelocking for all stored procedures that uses another sp or sf sql/sp.h@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +1 -2 Add prelocking for all stored procedures that uses another sp or sf sql/sql_base.cc@stripped, 2006-07-26 15:55:25+02:00, msvensson@shellback.(none) +4 -16 Add prelocking for all stored procedures that uses another sp or sf # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: msvensson # Host: shellback.(none) # Root: /home/msvensson/mysql/my51-m-bug21039 --- 1.334/sql/sql_base.cc 2006-07-26 15:55:38 +02:00 +++ 1.335/sql/sql_base.cc 2006-07-26 15:55:38 +02:00 @@ -2855,25 +2855,18 @@ statement for which table list for prelocking is already built, let us cache routines and try to build such table list. - NOTE: We will mark statement as requiring prelocking only if we will - have non empty table list. But this does not guarantee that in prelocked - mode we will have some locked tables, because queries which use only - derived/information schema tables and views possible. Thus "counter" - may be still zero for prelocked statement... */ if (!thd->prelocked_mode && !thd->lex->requires_prelocking() && thd->lex->sroutines_list.elements) { - bool first_no_prelocking, need_prelocking, tabs_changed; + bool first_no_prelocking, need_prelocking; TABLE_LIST **save_query_tables_last= thd->lex->query_tables_last; DBUG_ASSERT(thd->lex->query_tables == *start); sp_get_prelocking_info(thd, &need_prelocking, &first_no_prelocking); - if (sp_cache_routines_and_add_tables(thd, thd->lex, - first_no_prelocking, - &tabs_changed)) + if (sp_cache_routines_and_add_tables(thd, thd->lex, first_no_prelocking)) { /* Serious error during reading stored routines from mysql.proc table. @@ -2883,7 +2876,7 @@ result= -1; goto err; } - else if ((tabs_changed || *start) && need_prelocking) + else if (need_prelocking) { query_tables_last_own= save_query_tables_last; *start= thd->lex->query_tables; @@ -3310,11 +3303,6 @@ in prelocked mode. */ DBUG_ASSERT(!thd->prelocked_mode || !thd->lex->requires_prelocking()); - /* - If statement requires prelocking then it has non-empty table list. - So it is safe to shortcut. - */ - DBUG_ASSERT(!thd->lex->requires_prelocking() || tables); *need_reopen= FALSE; @@ -3326,7 +3314,7 @@ thd->set_current_stmt_binlog_row_based_if_mixed(); #endif /*HAVE_ROW_BASED_REPLICATION*/ - if (!tables) + if (!tables && !thd->lex->requires_prelocking()) DBUG_RETURN(0); /* --- 1.5/mysql-test/r/sp_notembedded.result 2006-07-26 15:55:38 +02:00 +++ 1.6/mysql-test/r/sp_notembedded.result 2006-07-26 15:55:38 +02:00 @@ -25,17 +25,6 @@ # event_scheduler localhost NULL Connect # Suspended NULL # root localhost test Query # NULL show processlist drop procedure bug4902_2| -drop function if exists bug5278| -create function bug5278 () returns char -begin -SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass'); -return 'okay'; -end| -select bug5278()| -ERROR 42000: Can't find any matching row in the user table -select bug5278()| -ERROR 42000: Can't find any matching row in the user table -drop function bug5278| drop table if exists t1| create table t1 ( id char(16) not null default '', --- 1.5/mysql-test/t/sp_notembedded.test 2006-07-26 15:55:38 +02:00 +++ 1.6/mysql-test/t/sp_notembedded.test 2006-07-26 15:55:38 +02:00 @@ -46,6 +46,8 @@ drop procedure bug4902_2| +# Disable until bug#17244 is fixed +--disable_parsing # # BUG#5278: Stored procedure packets out of order if SET PASSWORD. # @@ -63,7 +65,7 @@ --error 1133 select bug5278()| drop function bug5278| - +--enable_parsing --disable_warnings drop table if exists t1| --- 1.110/mysql-test/r/sp-error.result 2006-07-26 15:55:38 +02:00 +++ 1.111/mysql-test/r/sp-error.result 2006-07-26 15:55:38 +02:00 @@ -754,7 +754,7 @@ 10 drop function bug11834_1; execute stmt; -ERROR 42000: FUNCTION test.bug11834_1 does not exist +ERROR 42000: FUNCTION test.bug11834_2 does not exist deallocate prepare stmt; drop function bug11834_2; DROP FUNCTION IF EXISTS bug12953| --- 1.108/mysql-test/t/sp-error.test 2006-07-26 15:55:38 +02:00 +++ 1.109/mysql-test/t/sp-error.test 2006-07-26 15:55:38 +02:00 @@ -1075,6 +1075,10 @@ drop function bug11834_1; # Attempt to execute statement should return proper error and # should not crash server. + +# NOTE! The error we get from the below query indicates that the sp bug11834_2 +# does not exist(this is wrong but can be accepted) +# This behaviour has been reported as bug#21294 --error ER_SP_DOES_NOT_EXIST execute stmt; deallocate prepare stmt; --- 1.114/sql/sp.cc 2006-07-26 15:55:38 +02:00 +++ 1.115/sql/sp.cc 2006-07-26 15:55:38 +02:00 @@ -1537,7 +1537,6 @@ first_no_prelock - If true, don't add tables or cache routines used by the body of the first routine (i.e. *start) will be executed in non-prelocked mode. - tabs_changed - Set to TRUE some tables were added, FALSE otherwise NOTE If some function is missing this won't be reported here. Instead this fact will be discovered during query execution. @@ -1550,10 +1549,9 @@ static int sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex, Sroutine_hash_entry *start, - bool first_no_prelock, bool *tabs_changed) + bool first_no_prelock) { int ret= 0; - bool tabschnd= 0; /* Set if tables changed */ bool first= TRUE; DBUG_ENTER("sp_cache_routines_and_add_tables_aux"); @@ -1626,16 +1624,13 @@ { sp_update_stmt_used_routines(thd, lex, &sp->m_sroutines, rt->belong_to_view); - tabschnd|= - sp->add_used_tables_to_table_list(thd, &lex->query_tables_last, - rt->belong_to_view); + (void)sp->add_used_tables_to_table_list(thd, &lex->query_tables_last, + rt->belong_to_view); } sp->propagate_attributes(lex); } first= FALSE; } - if (tabs_changed) /* it can be NULL */ - *tabs_changed= tabschnd; DBUG_RETURN(ret); } @@ -1651,20 +1646,18 @@ lex - LEX representing statement first_no_prelock - If true, don't add tables or cache routines used by the body of the first routine (i.e. *start) - tabs_changed - Set to TRUE some tables were added, FALSE otherwise - + RETURN VALUE 0 - success non-0 - failure */ int -sp_cache_routines_and_add_tables(THD *thd, LEX *lex, bool first_no_prelock, - bool *tabs_changed) +sp_cache_routines_and_add_tables(THD *thd, LEX *lex, bool first_no_prelock) { return sp_cache_routines_and_add_tables_aux(thd, lex, (Sroutine_hash_entry *)lex->sroutines_list.first, - first_no_prelock, tabs_changed); + first_no_prelock); } @@ -1691,9 +1684,8 @@ (Sroutine_hash_entry **)lex->sroutines_list.next; sp_update_stmt_used_routines(thd, lex, &view->view->sroutines_list, view->top_table()); - return sp_cache_routines_and_add_tables_aux(thd, lex, - *last_cached_routine_ptr, FALSE, - NULL); + return sp_cache_routines_and_add_tables_aux(thd, lex, + *last_cached_routine_ptr, FALSE); } @@ -1742,8 +1734,7 @@ } } ret= sp_cache_routines_and_add_tables_aux(thd, lex, - *last_cached_routine_ptr, - FALSE, NULL); + *last_cached_routine_ptr, FALSE); } return ret; } --- 1.35/sql/sp.h 2006-07-26 15:55:38 +02:00 +++ 1.36/sql/sp.h 2006-07-26 15:55:38 +02:00 @@ -88,8 +88,7 @@ void sp_remove_not_own_routines(LEX *lex); void sp_update_sp_used_routines(HASH *dst, HASH *src); int sp_cache_routines_and_add_tables(THD *thd, LEX *lex, - bool first_no_prelock, - bool *tabs_changed); + bool first_no_prelock); int sp_cache_routines_and_add_tables_for_view(THD *thd, LEX *lex, TABLE_LIST *view); int sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,