summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorgi Kodinov <joro@sun.com>2009-10-23 16:54:58 +0300
committerGeorgi Kodinov <joro@sun.com>2009-10-23 16:54:58 +0300
commitd539c1570b6ab23394709192c0bebc4ea736d63d (patch)
tree6ef7a0f2df438b968ce77ae7645336e8af6d8d72
parent88084d67634d4660e097e6937df8ed6194241166 (diff)
downloadmariadb-git-d539c1570b6ab23394709192c0bebc4ea736d63d.tar.gz
Revert the fix for bug #47627 as it's causing the regression tests in pb2 to
fail.
-rw-r--r--mysql-test/r/sp.result45
-rw-r--r--mysql-test/t/sp.test46
-rw-r--r--sql/sql_yacc.yy61
3 files changed, 15 insertions, 137 deletions
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index 752edf8db41..67514c314f4 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -6979,51 +6979,6 @@ CALL p1;
ERROR 42S22: Unknown column 'A.b' in 'IN/ALL/ANY subquery'
DROP PROCEDURE p1;
DROP TABLE t1, t2;
-#
-# Bug47627 SET @@{global.session}.local_variable in stored routine causes crash
-#
-DROP PROCEDURE IF EXISTS p1;
-DROP PROCEDURE IF EXISTS p2;
-DROP PROCEDURE IF EXISTS p3;
-CREATE PROCEDURE p1()
-BEGIN
-DECLARE v INT DEFAULT 0;
-SET @@session.v= 10;
-END//
-ERROR HY000: Unknown system variable 'v'
-CREATE PROCEDURE p2()
-BEGIN
-DECLARE v INT DEFAULT 0;
-SET v= 10;
-END//
-call p2()//
-CREATE PROCEDURE p3()
-BEGIN
-DECLARE v INT DEFAULT 0;
-SELECT @@session.v;
-END//
-ERROR HY000: Unknown system variable 'v'
-CREATE PROCEDURE p4()
-BEGIN
-DECLARE v INT DEFAULT 0;
-SET @@global.v= 10;
-END//
-ERROR HY000: Unknown system variable 'v'
-CREATE PROCEDURE p5()
-BEGIN
-DECLARE v INT DEFAULT 0;
-SET @@global.query_cache_size= 0;
-SET @@session.identity= 1;
-SELECT @@session.identity;
-SELECT @@global.query_cache_size;
-END//
-CALL p5();
-@@session.identity
-1
-@@global.query_cache_size
-0
-DROP PROCEDURE p2;
-DROP PROCEDURE p5;
# ------------------------------------------------------------------
# -- End of 5.1 tests
# ------------------------------------------------------------------
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 328dde4b26f..44c4556340e 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -8263,51 +8263,7 @@ CALL p1;
DROP PROCEDURE p1;
DROP TABLE t1, t2;
---echo #
---echo # Bug47627 SET @@{global.session}.local_variable in stored routine causes crash
---echo #
---disable_warnings
-DROP PROCEDURE IF EXISTS p1;
-DROP PROCEDURE IF EXISTS p2;
-DROP PROCEDURE IF EXISTS p3;
---enable_warnings
-delimiter //;
---error ER_UNKNOWN_SYSTEM_VARIABLE
-CREATE PROCEDURE p1()
-BEGIN
- DECLARE v INT DEFAULT 0;
- SET @@session.v= 10;
-END//
-CREATE PROCEDURE p2()
-BEGIN
- DECLARE v INT DEFAULT 0;
- SET v= 10;
-END//
-call p2()//
---error ER_UNKNOWN_SYSTEM_VARIABLE
-CREATE PROCEDURE p3()
-BEGIN
- DECLARE v INT DEFAULT 0;
- SELECT @@session.v;
-END//
---error ER_UNKNOWN_SYSTEM_VARIABLE
-CREATE PROCEDURE p4()
-BEGIN
- DECLARE v INT DEFAULT 0;
- SET @@global.v= 10;
-END//
-CREATE PROCEDURE p5()
-BEGIN
- DECLARE v INT DEFAULT 0;
- SET @@global.query_cache_size= 0;
- SET @@session.identity= 1;
- SELECT @@session.identity;
- SELECT @@global.query_cache_size;
-END//
-delimiter ;//
-CALL p5();
-DROP PROCEDURE p2;
-DROP PROCEDURE p5;
+
--echo # ------------------------------------------------------------------
--echo # -- End of 5.1 tests
--echo # ------------------------------------------------------------------
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index a837a10325b..37c583ad572 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -11783,17 +11783,8 @@ option_type:
;
option_type2:
- /* empty */
- {
- $$= OPT_DEFAULT;
- Lex->option_type= OPT_DEFAULT;
- }
- | ONE_SHOT_SYM
- {
- Lex->one_shot_set= 1;
- $$= OPT_SESSION;
- Lex->option_type= OPT_SESSION;
- }
+ /* empty */ { $$= OPT_DEFAULT; }
+ | ONE_SHOT_SYM { Lex->one_shot_set= 1; $$= OPT_SESSION; }
;
opt_var_type:
@@ -11804,26 +11795,10 @@ opt_var_type:
;
opt_var_ident_type:
- /* empty */
- {
- $$=OPT_DEFAULT;
- Lex->option_type= OPT_DEFAULT;
- }
- | GLOBAL_SYM '.'
- {
- $$=OPT_GLOBAL;
- Lex->option_type= OPT_GLOBAL;
- }
- | LOCAL_SYM '.'
- {
- $$=OPT_SESSION;
- Lex->option_type= OPT_SESSION;
- }
- | SESSION_SYM '.'
- {
- $$=OPT_SESSION;
- Lex->option_type= OPT_SESSION;
- }
+ /* empty */ { $$=OPT_DEFAULT; }
+ | GLOBAL_SYM '.' { $$=OPT_GLOBAL; }
+ | LOCAL_SYM '.' { $$=OPT_SESSION; }
+ | SESSION_SYM '.' { $$=OPT_SESSION; }
;
ext_option_value:
@@ -12063,22 +12038,8 @@ internal_variable_name:
sp_pcontext *spc= lex->spcont;
sp_variable_t *spv;
- /*
- We have to lookup here since local vars can shadow sysvars.
-
- We also have to inspect the option_type first since the variable
- identifier might have been prefixed with @@session or @@global
- prefixes. Without this check we would wrongly identify them
- as SP local variables.
- */
- if (lex->option_type == OPT_DEFAULT && spc &&
- (spv= spc->find_variable(&$1)))
- {
- /* An SP local variable */
- $$.var= NULL;
- $$.base_name= $1;
- }
- else
+ /* We have to lookup here since local vars can shadow sysvars */
+ if (!spc || !(spv = spc->find_variable(&$1)))
{
/* Not an SP local variable */
sys_var *tmp=find_sys_var(thd, $1.str, $1.length);
@@ -12095,6 +12056,12 @@ internal_variable_name:
lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
}
}
+ else
+ {
+ /* An SP local variable */
+ $$.var= NULL;
+ $$.base_name= $1;
+ }
}
| ident '.' ident
{