List:Internals« Previous MessageNext Message »
From:dlenev Date:April 6 2005 11:40pm
Subject:bk commit into 5.0 tree (dlenev:1.1886) BUG#9566
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of dlenev. When dlenev 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
  1.1886 05/04/07 01:40:29 dlenev@stripped +3 -0
  Fix for bug #9566 "explicit LOCK TABLE and store procedures result in
  illegal state".
  
  We should not assume that mysql.proc table does not exist if we are
  unable to open it under LOCK TABLES or in prelocked mode (and
  remember this fact by setting mysql_proc_table_exists to zero).

  sql/sp.cc
    1.73 05/04/07 01:40:25 dlenev@stripped +9 -4
    db_find_routine_aux():
      We should not assume that mysql.proc table does not exist if we are
      unable to open it under LOCK TABLES or in prelocked mode since this
      condition may be transient.

  mysql-test/t/sp.test
    1.100 05/04/07 01:40:25 dlenev@stripped +23 -0
    Added test for bug #9566 "explicit LOCK TABLE and store procedures result in illegal
    state"

  mysql-test/r/sp.result
    1.105 05/04/07 01:40:25 dlenev@stripped +10 -0
    Added test for bug #9566 "explicit LOCK TABLE and store procedures result in illegal
    state"

# 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:	dlenev
# Host:	brandersnatch.localdomain
# Root:	/home/dlenev/src/mysql-5.0-bg9566

--- 1.104/mysql-test/r/sp.result	Wed Apr  6 06:45:07 2005
+++ 1.105/mysql-test/r/sp.result	Thu Apr  7 01:40:25 2005
@@ -2779,4 +2779,14 @@
 3.2000
 drop procedure bug8937|
 delete from t1|
+drop procedure if exists bug9566|
+create procedure bug9566()
+begin
+select * from t1;
+end|
+lock table t1 read|
+call bug9566()|
+ERROR HY000: Table 'proc' was not locked with LOCK TABLES
+unlock tables|
+drop procedure bug9566|
 drop table t1,t2;

--- 1.99/mysql-test/t/sp.test	Wed Apr  6 06:45:08 2005
+++ 1.100/mysql-test/t/sp.test	Thu Apr  7 01:40:25 2005
@@ -3397,6 +3397,29 @@
 drop procedure bug8937|
 delete from t1|
 
+#
+# BUG#9566: explicit LOCK TABLE and store procedures result in illegal state
+#
+# We should not think that mysql.proc table does not exist if we are unable
+# to open it under LOCK TABLE or in prelocked mode. Probably this test
+# should be removed when Monty will allow access to mysql.proc without
+# locking it.
+#
+--disable_warnings
+drop procedure if exists bug9566|
+--enable_warnings
+create procedure bug9566()
+begin
+  select * from t1;
+end|
+lock table t1 read|
+# This should fail because we forgot to lock mysql.proc table explicitly
+--error 1100
+call bug9566()|
+unlock tables|
+# This should succeed
+drop procedure bug9566|
+
 
 #
 # BUG#NNNN: New bug synopsis

--- 1.72/sql/sp.cc	Mon Apr  4 17:43:20 2005
+++ 1.73/sql/sp.cc	Thu Apr  7 01:40:25 2005
@@ -70,9 +70,8 @@
 		       type, name->m_name.length, name->m_name.str));
 
   /*
-    Speed up things if mysql.proc doesn't exists
-    mysql_proc_table_exists is set when on creates a stored procedure
-    or on flush privileges
+    Speed up things if mysql.proc doesn't exists. mysql_proc_table_exists
+    is set when we create or read stored procedure or on flush privileges.
   */
   if (!mysql_proc_table_exists && ltype == TL_READ)
     DBUG_RETURN(SP_OPEN_TABLE_FAILED);
@@ -98,7 +97,13 @@
     if (! (table= open_ltable(thd, &tables, ltype)))
     {
       *tablep= NULL;
-      mysql_proc_table_exists= 0;
+      /*
+        Under explicit LOCK TABLES or in prelocked mode we should not
+        say that mysql.proc table does not exist if we are unable to
+        open it since this condition may be transient.
+      */
+      if (!(thd->locked_tables || thd->prelocked_mode))
+        mysql_proc_table_exists= 0;
       DBUG_RETURN(SP_OPEN_TABLE_FAILED);
     }
     *opened= TRUE;
Thread
bk commit into 5.0 tree (dlenev:1.1886) BUG#9566dlenev6 Apr