Commit cc0f1f15 authored by unknown's avatar unknown

Implemented DEFAULT for DECLARE variables.


BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent 771237ce
......@@ -72,6 +72,7 @@ papa@gbichot.local
paul@central.snake.net
paul@teton.kitebird.com
pem@mysql.com
pem@per-erik-martins-dator.local
peter@linux.local
peter@mysql.com
pgulutzan@linux.local
......
......@@ -117,8 +117,7 @@ drop procedure inc2;
drop procedure inc;
create procedure cbv1()
begin
declare y int;
set y = 3;
declare y int default 3;
call cbv2(y+1, y);
insert into test.t1 values ("cbv1", y);
end;
......@@ -354,8 +353,7 @@ append("foo", "bar")
foobar
create function fac(n int unsigned) returns bigint unsigned
begin
declare f bigint unsigned;
set f = 1;
declare f bigint unsigned default 1;
while n > 1 do
set f = f * n;
set n = n - 1;
......@@ -396,8 +394,7 @@ drop table if exists fac;
create table fac (n int unsigned not null primary key, f bigint unsigned);
create procedure ifac(n int unsigned)
begin
declare i int unsigned;
set i = 1;
declare i int unsigned default 1;
if n > 20 then
set n = 20; # bigint overflow otherwise
end if;
......@@ -452,8 +449,7 @@ insert into primes values
create procedure opp(n bigint unsigned, out pp bool)
begin
declare r double;
declare b, s bigint unsigned;
set b = 0, s = 0;
declare b, s bigint unsigned default 0;
set r = sqrt(n);
again:
loop
......@@ -483,8 +479,7 @@ declare i int unsigned;
set i=45, p=201;
while i < m do
begin
declare pp bool;
set pp = 0;
declare pp bool default 0;
call opp(p, pp);
if pp then
insert into test.primes values (i, p);
......
......@@ -153,9 +153,8 @@ drop procedure inc|
# ("cbv1", 4711)
create procedure cbv1()
begin
declare y int;
declare y int default 3;
set y = 3;
call cbv2(y+1, y);
insert into test.t1 values ("cbv1", y);
end|
......@@ -428,9 +427,8 @@ select append("foo", "bar")|
# A function with flow control
create function fac(n int unsigned) returns bigint unsigned
begin
declare f bigint unsigned;
declare f bigint unsigned default 1;
set f = 1;
while n > 1 do
set f = f * n;
set n = n - 1;
......@@ -479,8 +477,8 @@ create table fac (n int unsigned not null primary key, f bigint unsigned)|
create procedure ifac(n int unsigned)
begin
declare i int unsigned;
set i = 1;
declare i int unsigned default 1;
if n > 20 then
set n = 20; # bigint overflow otherwise
end if;
......@@ -524,9 +522,8 @@ insert into primes values
create procedure opp(n bigint unsigned, out pp bool)
begin
declare r double;
declare b, s bigint unsigned;
declare b, s bigint unsigned default 0;
set b = 0, s = 0;
set r = sqrt(n);
again:
......@@ -561,9 +558,8 @@ begin
while i < m do
begin
declare pp bool;
declare pp bool default 0;
set pp = 0;
call opp(p, pp);
if pp then
insert into test.primes values (i, p);
......
......@@ -622,7 +622,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
table_wild opt_pad no_in_expr expr_expr simple_expr no_and_expr
using_list expr_or_default set_expr_or_default interval_expr
param_marker singlerow_subselect singlerow_subselect_init
exists_subselect exists_subselect_init
exists_subselect exists_subselect_init sp_opt_default
%type <item_list>
expr_list udf_expr_list when_list ident_list ident_list_arg
......@@ -1082,15 +1082,26 @@ sp_decls:
;
sp_decl:
DECLARE_SYM sp_decl_idents type
DECLARE_SYM sp_decl_idents type sp_opt_default
{
LEX *lex= Lex;
uint max= lex->spcont->current_framesize();
enum enum_field_types type= (enum enum_field_types)$3;
Item *it= $4;
for (uint i = max-$2 ; i < max ; i++)
{
lex->spcont->set_type(i, (enum enum_field_types)$3);
lex->spcont->set_isset(i, FALSE);
lex->spcont->set_type(i, type);
if (! it)
lex->spcont->set_isset(i, FALSE);
else
{
sp_instr_set *in= new sp_instr_set(lex->sphead->instructions(),
i, it, type);
lex->sphead->add_instr(in);
lex->spcont->set_isset(i, TRUE);
}
}
$$= $2;
}
......@@ -1109,6 +1120,11 @@ sp_decl_idents:
}
;
sp_opt_default:
/* Empty */ { $$ = NULL; }
| DEFAULT expr { $$ = $2; }
;
sp_proc_stmt:
{
Lex->sphead->reset_lex(YYTHD);
......
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