Commit 220494bd authored by unknown's avatar unknown

Fixed BUG#3259: Stored procedure names are case sensitive.

Procedure names were unintentionally case-sensitive when read from the database
(but case-insensitive when fetched from the cache).
Note that the DB-part of qualified names is still case-sensitive (for consistency
with other usage in mysql).


Docs/sp-imp-spec.txt:
  Removed "binary" from name and specific_name columns in mysql.proc definition.
mysql-test/r/sp.result:
  Test case for BUG#3259; SP names were supposed to be case-insensitive.
mysql-test/t/sp.test:
  Test case for BUG#3259; SP names were supposed to be case-insensitive.
scripts/mysql_create_system_tables.sh:
  Removed "binary" from name and specific_name columns in mysql.proc definition.
scripts/mysql_fix_privilege_tables.sql:
  Removed "binary" from name and specific_name columns in mysql.proc definition,
  and added a corresponding ALTER TABLE to fix existing tables.
sql/sp.cc:
  Added missing init of variable.
parent 645d19f6
...@@ -1057,9 +1057,9 @@ ...@@ -1057,9 +1057,9 @@
CREATE TABLE proc ( CREATE TABLE proc (
db char(64) binary DEFAULT '' NOT NULL, db char(64) binary DEFAULT '' NOT NULL,
name char(64) binary DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL,
type enum('FUNCTION','PROCEDURE') NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL,
specific_name char(64) binary DEFAULT '' NOT NULL, specific_name char(64) DEFAULT '' NOT NULL,
language enum('SQL') DEFAULT 'SQL' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL,
sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL,
is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL,
......
...@@ -1000,6 +1000,18 @@ select bug2674()| ...@@ -1000,6 +1000,18 @@ select bug2674()|
bug2674() bug2674()
262136 262136
drop function bug2674| drop function bug2674|
create procedure bug3259_1 () begin end|
create procedure BUG3259_2 () begin end|
create procedure Bug3259_3 () begin end|
call BUG3259_1()|
call BUG3259_1()|
call bug3259_2()|
call Bug3259_2()|
call bug3259_3()|
call bUG3259_3()|
drop procedure bUg3259_1|
drop procedure BuG3259_2|
drop procedure BUG3259_3|
drop table if exists fac| drop table if exists fac|
create table fac (n int unsigned not null primary key, f bigint unsigned)| create table fac (n int unsigned not null primary key, f bigint unsigned)|
create procedure ifac(n int unsigned) create procedure ifac(n int unsigned)
......
...@@ -1159,6 +1159,25 @@ create function bug2674 () returns int ...@@ -1159,6 +1159,25 @@ create function bug2674 () returns int
select bug2674()| select bug2674()|
drop function bug2674| drop function bug2674|
#
# BUG#3259
#
create procedure bug3259_1 () begin end|
create procedure BUG3259_2 () begin end|
create procedure Bug3259_3 () begin end|
call BUG3259_1()|
call BUG3259_1()|
call bug3259_2()|
call Bug3259_2()|
call bug3259_3()|
call bUG3259_3()|
drop procedure bUg3259_1|
drop procedure BuG3259_2|
drop procedure BUG3259_3|
# #
# Some "real" examples # Some "real" examples
......
...@@ -290,9 +290,9 @@ if test ! -f $mdata/proc.frm ...@@ -290,9 +290,9 @@ if test ! -f $mdata/proc.frm
then then
c_p="$c_p CREATE TABLE proc (" c_p="$c_p CREATE TABLE proc ("
c_p="$c_p db char(64) binary DEFAULT '' NOT NULL," c_p="$c_p db char(64) binary DEFAULT '' NOT NULL,"
c_p="$c_p name char(64) binary DEFAULT '' NOT NULL," c_p="$c_p name char(64) DEFAULT '' NOT NULL,"
c_p="$c_p type enum('FUNCTION','PROCEDURE') NOT NULL," c_p="$c_p type enum('FUNCTION','PROCEDURE') NOT NULL,"
c_p="$c_p specific_name char(64) binary DEFAULT '' NOT NULL," c_p="$c_p specific_name char(64) DEFAULT '' NOT NULL,"
c_p="$c_p language enum('SQL') DEFAULT 'SQL' NOT NULL," c_p="$c_p language enum('SQL') DEFAULT 'SQL' NOT NULL,"
c_p="$c_p sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL," c_p="$c_p sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL,"
c_p="$c_p is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL," c_p="$c_p is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL,"
......
...@@ -141,9 +141,9 @@ unique index (name) ...@@ -141,9 +141,9 @@ unique index (name)
CREATE TABLE IF NOT EXISTS proc ( CREATE TABLE IF NOT EXISTS proc (
db char(64) binary DEFAULT '' NOT NULL, db char(64) binary DEFAULT '' NOT NULL,
name char(64) binary DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL,
type enum('FUNCTION','PROCEDURE') NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL,
specific_name char(64) binary DEFAULT '' NOT NULL, specific_name char(64) DEFAULT '' NOT NULL,
language enum('SQL') DEFAULT 'SQL' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL,
sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL') DEFAULT 'CONTAINS_SQL' NOT NULL,
is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL,
...@@ -179,3 +179,7 @@ CREATE TABLE IF NOT EXISTS proc ( ...@@ -179,3 +179,7 @@ CREATE TABLE IF NOT EXISTS proc (
comment char(64) binary DEFAULT '' NOT NULL, comment char(64) binary DEFAULT '' NOT NULL,
PRIMARY KEY (db,name,type) PRIMARY KEY (db,name,type)
) comment='Stored Procedures'; ) comment='Stored Procedures';
# Correct the name fields to not binary
ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
MODIFY specific_name char(64) DEFAULT '' NOT NULL;
...@@ -637,6 +637,7 @@ sp_drop_db_routines(THD *thd, char *db) ...@@ -637,6 +637,7 @@ sp_drop_db_routines(THD *thd, char *db)
else else
{ {
ret= SP_DELETE_ROW_FAILED; ret= SP_DELETE_ROW_FAILED;
nxtres= 0;
break; break;
} }
} while (! (nxtres= table->file->index_next_same(table->record[0], } while (! (nxtres= table->file->index_next_same(table->record[0],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment