Commit afedaa10 authored by unknown's avatar unknown
Browse files

Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0

into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0-bug21414


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sql_acl.cc:
  Auto merged
parents bde59627 d4933af8
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5394,4 +5394,12 @@ Procedure sql_mode Create Procedure
bug21416		CREATE DEFINER=`root`@`localhost` PROCEDURE `bug21416`()
show create procedure bug21416
drop procedure bug21416|
DROP PROCEDURE IF EXISTS bug21414|
CREATE PROCEDURE bug21414() SELECT 1|
FLUSH TABLES WITH READ LOCK|
DROP PROCEDURE bug21414|
ERROR HY000: Can't execute the query because you have a conflicting read lock
UNLOCK TABLES|
The following should succeed.
DROP PROCEDURE bug21414|
drop table t1,t2;
+22 −5
Original line number Diff line number Diff line
#
# Basic stored PROCEDURE tests
#
# Please keep this file free of --error cases and other
# things that will not run in a single debugged mysqld
# process (e.g. master-slave things).
#
# Test cases for bugs are added at the end. See template there.
#
# Tests that require --error go into sp-error.test
# Some tests that require --error go into sp-error.test
# Tests that require inndb go into sp_trans.test
# Tests that check privilege and security issues go to sp-security.test.
# Tests that require multiple connections, except security/privilege tests,
@@ -6322,6 +6318,27 @@ create procedure bug21416() show create procedure bug21416|
call bug21416()|
drop procedure bug21416|


#
# BUG#21414: SP: Procedure undroppable, to some extent
#
--disable_warnings
DROP PROCEDURE IF EXISTS bug21414|
--enable_warnings

CREATE PROCEDURE bug21414() SELECT 1|

FLUSH TABLES WITH READ LOCK|

--error ER_CANT_UPDATE_WITH_READLOCK
DROP PROCEDURE bug21414|

UNLOCK TABLES|

--echo The following should succeed.
DROP PROCEDURE bug21414|


#
# BUG#NNNN: New bug synopsis
#
+0 −1
Original line number Diff line number Diff line
@@ -1227,7 +1227,6 @@ extern my_bool opt_log_queries_not_using_indexes;
extern bool opt_disable_networking, opt_skip_show_db;
extern my_bool opt_character_set_client_handshake;
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
extern bool mysql_proc_table_exists;
extern uint volatile thread_count, thread_running, global_read_lock;
extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types;
extern my_bool opt_safe_show_db, opt_local_infile;
+0 −27
Original line number Diff line number Diff line
@@ -66,8 +66,6 @@ enum
  MYSQL_PROC_FIELD_COUNT
};

bool mysql_proc_table_exists= 1;

/* Tells what SP_DEFAULT_ACCESS should be mapped to */
#define SP_DEFAULT_ACCESS_MAPPING SP_CONTAINS_SQL

@@ -119,13 +117,6 @@ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
  bool not_used;
  DBUG_ENTER("open_proc_table");

  /*
    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)
    DBUG_RETURN(0);

  thd->reset_n_backup_open_tables_state(backup);

  bzero((char*) &tables, sizeof(tables));
@@ -135,7 +126,6 @@ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
                          MYSQL_LOCK_IGNORE_FLUSH)))
  {
    thd->restore_backup_open_tables_state(backup);
    mysql_proc_table_exists= 0;
    DBUG_RETURN(0);
  }

@@ -184,15 +174,6 @@ static TABLE *open_proc_table_for_update(THD *thd)

  table= open_ltable(thd, &tables, TL_WRITE);

  /*
    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 and lock it for writing since this condition may be
    transient.
  */
  if (!(thd->locked_tables || thd->prelocked_mode) || table)
    mysql_proc_table_exists= test(table);

  DBUG_RETURN(table);
}

@@ -1610,14 +1591,6 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
      case SP_KEY_NOT_FOUND:
        ret= SP_OK;
        break;
      case SP_OPEN_TABLE_FAILED:
        /*
          Force it to attempt opening it again on subsequent calls;
          otherwise we will get one error message the first time, and
          then ER_SP_PROC_TABLE_CORRUPT (below) on subsequent tries.
        */
        mysql_proc_table_exists= 1;
        /* Fall through */
      default:
        /*
          Any error when loading an existing routine is either some problem
+0 −1
Original line number Diff line number Diff line
@@ -202,7 +202,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
  DBUG_ENTER("acl_load");

  grant_version++; /* Privileges updated */
  mysql_proc_table_exists= 1;			// Assume mysql.proc exists

  acl_cache->clear(1);				// Clear locked hostname cache