Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
32dc0aad
Commit
32dc0aad
authored
Sep 13, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/usr/local/bk/mysql-5.0
into mysql.com:/usr/home/pem/mysql-5.0
parents
468c357a
902932a1
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
124 additions
and
73 deletions
+124
-73
mysql-test/r/sp.result
mysql-test/r/sp.result
+39
-0
mysql-test/t/sp.test
mysql-test/t/sp.test
+45
-0
sql/sp_head.cc
sql/sp_head.cc
+9
-26
sql/sp_pcontext.cc
sql/sp_pcontext.cc
+0
-1
sql/sp_pcontext.h
sql/sp_pcontext.h
+0
-10
sql/sql_yacc.yy
sql/sql_yacc.yy
+31
-36
No files found.
mysql-test/r/sp.result
View file @
32dc0aad
...
@@ -3225,4 +3225,43 @@ select @var|
...
@@ -3225,4 +3225,43 @@ select @var|
@var
@var
abcdabcd
abcdabcd
drop procedure bug12849_2|
drop procedure bug12849_2|
drop procedure if exists bug131333|
drop function if exists bug131333|
create procedure bug131333()
begin
begin
declare a int;
select a;
set a = 1;
select a;
end;
begin
declare b int;
select b;
end;
end|
create function bug131333()
returns int
begin
begin
declare a int;
set a = 1;
end;
begin
declare b int;
return b;
end;
end|
call bug131333()|
a
NULL
a
1
b
NULL
select bug131333()|
bug131333()
NULL
drop procedure bug131333|
drop function bug131333|
drop table t1,t2;
drop table t1,t2;
mysql-test/t/sp.test
View file @
32dc0aad
...
@@ -4063,6 +4063,51 @@ call bug12849_2(@var)|
...
@@ -4063,6 +4063,51 @@ call bug12849_2(@var)|
select
@
var
|
select
@
var
|
drop
procedure
bug12849_2
|
drop
procedure
bug12849_2
|
#
# BUG#13133: Local variables in stored procedures are not initialized correctly.
#
--
disable_warnings
drop
procedure
if
exists
bug131333
|
drop
function
if
exists
bug131333
|
--
enable_warnings
create
procedure
bug131333
()
begin
begin
declare
a
int
;
select
a
;
set
a
=
1
;
select
a
;
end
;
begin
declare
b
int
;
select
b
;
end
;
end
|
create
function
bug131333
()
returns
int
begin
begin
declare
a
int
;
set
a
=
1
;
end
;
begin
declare
b
int
;
return
b
;
end
;
end
|
call
bug131333
()
|
select
bug131333
()
|
drop
procedure
bug131333
|
drop
function
bug131333
|
#
#
# BUG#NNNN: New bug synopsis
# BUG#NNNN: New bug synopsis
#
#
...
...
sql/sp_head.cc
View file @
32dc0aad
...
@@ -1078,7 +1078,6 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
...
@@ -1078,7 +1078,6 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
sp_rcontext
*
octx
=
thd
->
spcont
;
sp_rcontext
*
octx
=
thd
->
spcont
;
sp_rcontext
*
nctx
=
NULL
;
sp_rcontext
*
nctx
=
NULL
;
uint
i
;
uint
i
;
Item_null
*
nit
;
int
ret
=
-
1
;
// Assume error
int
ret
=
-
1
;
// Assume error
if
(
argcount
!=
params
)
if
(
argcount
!=
params
)
...
@@ -1109,22 +1108,15 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
...
@@ -1109,22 +1108,15 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
nctx
->
push_item
(
it
);
nctx
->
push_item
(
it
);
}
}
/*
/*
The rest of the frame are local variables which are all IN.
The rest of the frame are local variables which are all IN.
Default all variables to null (those with default clauses will
Push NULLs to get the right size (and make the reuse mechanism work) -
be set by an set instruction)
.
the will be initialized by set instructions in each frame
.
*/
*/
nit
=
NULL
;
// Re-use this, and only create if needed
for
(;
i
<
csize
;
i
++
)
for
(;
i
<
csize
;
i
++
)
{
nctx
->
push_item
(
NULL
);
if
(
!
nit
)
{
if
(
!
(
nit
=
new
Item_null
()))
DBUG_RETURN
(
-
1
);
}
nctx
->
push_item
(
nit
);
}
thd
->
spcont
=
nctx
;
thd
->
spcont
=
nctx
;
binlog_save_options
=
thd
->
options
;
binlog_save_options
=
thd
->
options
;
...
@@ -1321,23 +1313,14 @@ int sp_head::execute_procedure(THD *thd, List<Item> *args)
...
@@ -1321,23 +1313,14 @@ int sp_head::execute_procedure(THD *thd, List<Item> *args)
close_thread_tables
(
thd
,
0
,
0
);
close_thread_tables
(
thd
,
0
,
0
);
DBUG_PRINT
(
"info"
,(
" %.*s: eval args done"
,
m_name
.
length
,
m_name
.
str
));
DBUG_PRINT
(
"info"
,(
" %.*s: eval args done"
,
m_name
.
length
,
m_name
.
str
));
/*
/*
The rest of the frame are local variables which are all IN.
The rest of the frame are local variables which are all IN.
Default all variables to null (those with default clauses will
Push NULLs to get the right size (and make the reuse mechanism work) -
be set by an set instruction)
.
the will be initialized by set instructions in each frame
.
*/
*/
for
(;
i
<
csize
;
i
++
)
for
(;
i
<
csize
;
i
++
)
{
nctx
->
push_item
(
NULL
);
if
(
!
nit
)
{
if
(
!
(
nit
=
new
Item_null
()))
{
ret
=
-
1
;
break
;
}
}
nctx
->
push_item
(
nit
);
}
}
}
thd
->
spcont
=
nctx
;
thd
->
spcont
=
nctx
;
...
...
sql/sp_pcontext.cc
View file @
32dc0aad
...
@@ -184,7 +184,6 @@ sp_pcontext::push_pvar(LEX_STRING *name, enum enum_field_types type,
...
@@ -184,7 +184,6 @@ sp_pcontext::push_pvar(LEX_STRING *name, enum enum_field_types type,
p
->
type
=
type
;
p
->
type
=
type
;
p
->
mode
=
mode
;
p
->
mode
=
mode
;
p
->
offset
=
current_pvars
();
p
->
offset
=
current_pvars
();
p
->
isset
=
(
mode
==
sp_param_out
?
FALSE
:
TRUE
);
p
->
dflt
=
NULL
;
p
->
dflt
=
NULL
;
insert_dynamic
(
&
m_pvar
,
(
gptr
)
&
p
);
insert_dynamic
(
&
m_pvar
,
(
gptr
)
&
p
);
}
}
...
...
sql/sp_pcontext.h
View file @
32dc0aad
...
@@ -35,7 +35,6 @@ typedef struct sp_pvar
...
@@ -35,7 +35,6 @@ typedef struct sp_pvar
enum
enum_field_types
type
;
enum
enum_field_types
type
;
sp_param_mode_t
mode
;
sp_param_mode_t
mode
;
uint
offset
;
// Offset in current frame
uint
offset
;
// Offset in current frame
my_bool
isset
;
Item
*
dflt
;
Item
*
dflt
;
}
sp_pvar_t
;
}
sp_pvar_t
;
...
@@ -147,15 +146,6 @@ class sp_pcontext : public Sql_alloc
...
@@ -147,15 +146,6 @@ class sp_pcontext : public Sql_alloc
p
->
type
=
type
;
p
->
type
=
type
;
}
}
inline
void
set_isset
(
uint
i
,
my_bool
val
)
{
sp_pvar_t
*
p
=
find_pvar
(
i
);
if
(
p
)
p
->
isset
=
val
;
}
inline
void
inline
void
set_default
(
uint
i
,
Item
*
it
)
set_default
(
uint
i
,
Item
*
it
)
{
{
...
...
sql/sql_yacc.yy
View file @
32dc0aad
...
@@ -1657,42 +1657,41 @@ sp_decls:
...
@@ -1657,42 +1657,41 @@ sp_decls:
;
;
sp_decl:
sp_decl:
DECLARE_SYM sp_decl_idents type
DECLARE_SYM sp_decl_idents type
{ Lex->sphead->reset_lex(YYTHD); }
{ Lex->sphead->reset_lex(YYTHD); }
sp_opt_default
sp_opt_default
{
{
LEX *lex= Lex;
LEX *lex= Lex;
sp_pcontext *ctx= lex->spcont;
sp_pcontext *ctx= lex->spcont;
uint max= ctx->context_pvars();
uint max= ctx->context_pvars();
enum enum_field_types type= (enum enum_field_types)$3;
enum enum_field_types type= (enum enum_field_types)$3;
Item *it= $5;
Item *it= $5;
bool has_default= (it != NULL);
for (uint i = max-$2 ; i < max ; i++)
for (uint i = max-$2 ; i < max ; i++)
{
{
ctx->set_type(i, type);
sp_instr_set *in;
if (! it)
ctx->set_isset(i, FALSE);
ctx->set_type(i, type);
else
if (! has_default)
{
it= new Item_null(); /* QQ Set to the type with null_value? */
sp_instr_set *in= new sp_instr_set(lex->sphead->instructions(),
in = new sp_instr_set(lex->sphead->instructions(),
ctx,
ctx,
ctx->pvar_context2index(i),
ctx->pvar_context2index(i),
it, type, lex,
it, type, lex,
(i == max - 1));
(i == max - 1));
/*
/*
The last instruction is assigned to be responsible for
The last instruction is assigned to be responsible for
freeing LEX.
freeing LEX.
*/
*/
lex->sphead->add_instr(in);
lex->sphead->add_instr(in);
ctx->set_isset(i, TRUE);
ctx->set_default(i, it);
ctx->set_default(i, it);
}
}
}
lex->sphead->restore_lex(YYTHD);
lex->sphead->restore_lex(YYTHD);
$$.vars= $2;
$$.vars= $2;
$$.conds= $$.hndlrs= $$.curs= 0;
$$.conds= $$.hndlrs= $$.curs= 0;
}
}
| DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond
| DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond
{
{
LEX *lex= Lex;
LEX *lex= Lex;
...
@@ -2268,7 +2267,6 @@ sp_fetch_list:
...
@@ -2268,7 +2267,6 @@ sp_fetch_list:
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
i->add_to_varlist(spv);
i->add_to_varlist(spv);
spv->isset= TRUE;
}
}
}
}
|
|
...
@@ -2290,7 +2288,6 @@ sp_fetch_list:
...
@@ -2290,7 +2288,6 @@ sp_fetch_list:
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
sp_instr_cfetch *i= (sp_instr_cfetch *)sp->last_instruction();
i->add_to_varlist(spv);
i->add_to_varlist(spv);
spv->isset= TRUE;
}
}
}
}
;
;
...
@@ -5894,7 +5891,6 @@ select_var_ident:
...
@@ -5894,7 +5891,6 @@ select_var_ident:
else
else
{
{
((select_dumpvar *)lex->result)->var_list.push_back( new my_var($1,1,t->offset,t->type));
((select_dumpvar *)lex->result)->var_list.push_back( new my_var($1,1,t->offset,t->type));
t->isset= TRUE;
}
}
}
}
;
;
...
@@ -7925,7 +7921,6 @@ sys_option_value:
...
@@ -7925,7 +7921,6 @@ sys_option_value:
sp_set= new sp_instr_set(lex->sphead->instructions(), ctx,
sp_set= new sp_instr_set(lex->sphead->instructions(), ctx,
spv->offset, it, spv->type, lex, TRUE);
spv->offset, it, spv->type, lex, TRUE);
lex->sphead->add_instr(sp_set);
lex->sphead->add_instr(sp_set);
spv->isset= TRUE;
}
}
}
}
| option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
| option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment