Commit cef84f3b authored by lenz@mysql.com's avatar lenz@mysql.com

Merge lgrimmer@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/space/my/mysql-5.0
parents 9afd2563 f711a3d7
...@@ -658,4 +658,17 @@ create procedure bug9529_9012345678901234567890123456789012345678901234567890123 ...@@ -658,4 +658,17 @@ create procedure bug9529_9012345678901234567890123456789012345678901234567890123
begin begin
end| end|
ERROR 42000: Identifier name 'bug9529_90123456789012345678901234567890123456789012345678901234567890' is too long ERROR 42000: Identifier name 'bug9529_90123456789012345678901234567890123456789012345678901234567890' is too long
drop procedure if exists bug10969|
create procedure bug10969()
begin
declare s1 int default 0;
select default(s1) from t30;
end|
ERROR 42000: Incorrect column name 's1'
create procedure bug10969()
begin
declare s1 int default 0;
select default(t30.s1) from t30;
end|
drop procedure bug10969|
drop table t1| drop table t1|
...@@ -3109,4 +3109,33 @@ select bug9559()| ...@@ -3109,4 +3109,33 @@ select bug9559()|
bug9559() bug9559()
-3 -3
drop function bug9559| drop function bug9559|
drop procedure if exists bug10961|
create procedure bug10961()
begin
declare v char;
declare x int;
declare c cursor for select * from dual;
declare continue handler for sqlexception select x;
set x = 1;
open c;
set x = 2;
fetch c into v;
set x = 3;
close c;
end|
call bug10961()|
x
1
x
2
x
3
call bug10961()|
x
1
x
2
x
3
drop procedure bug10961|
drop table t1,t2; drop table t1,t2;
...@@ -930,6 +930,29 @@ begin ...@@ -930,6 +930,29 @@ begin
end| end|
#
# BUG#10969: Stored procedures: crash if default() function
#
--disable_warnings
drop procedure if exists bug10969|
--enable_warnings
--error ER_WRONG_COLUMN_NAME
create procedure bug10969()
begin
declare s1 int default 0;
select default(s1) from t30;
end|
# This should work
create procedure bug10969()
begin
declare s1 int default 0;
select default(t30.s1) from t30;
end|
drop procedure bug10969|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -3801,6 +3801,7 @@ call bug5963_2(1)| ...@@ -3801,6 +3801,7 @@ call bug5963_2(1)|
drop procedure bug5963_2| drop procedure bug5963_2|
drop table t3| drop table t3|
# #
# BUG#9559: Functions: Numeric Operations using -ve value gives incorrect # BUG#9559: Functions: Numeric Operations using -ve value gives incorrect
# results. # results.
...@@ -3820,6 +3821,34 @@ select bug9559()| ...@@ -3820,6 +3821,34 @@ select bug9559()|
drop function bug9559| drop function bug9559|
#
# BUG#10961: Stored procedures: crash if select * from dual
#
--disable_warnings
drop procedure if exists bug10961|
--enable_warnings
# "select * from dual" results in an error, so the cursor will not open
create procedure bug10961()
begin
declare v char;
declare x int;
declare c cursor for select * from dual;
declare continue handler for sqlexception select x;
set x = 1;
open c;
set x = 2;
fetch c into v;
set x = 3;
close c;
end|
call bug10961()|
call bug10961()|
drop procedure bug10961|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -584,6 +584,13 @@ public: ...@@ -584,6 +584,13 @@ public:
Item::maybe_null= TRUE; Item::maybe_null= TRUE;
} }
/* For error printing */
inline void my_name(char **strp, uint *lengthp)
{
*strp= m_name.str;
*lengthp= m_name.length;
}
bool is_splocal() { return 1; } /* Needed for error checking */ bool is_splocal() { return 1; } /* Needed for error checking */
Item *this_item(); Item *this_item();
......
...@@ -159,8 +159,8 @@ public: ...@@ -159,8 +159,8 @@ public:
MYSQL_ROWS **prev_record; MYSQL_ROWS **prev_record;
ulong row_count; ulong row_count;
Protocol_cursor() {} Protocol_cursor() :data(NULL) {}
Protocol_cursor(THD *thd_arg, MEM_ROOT *ini_alloc) :Protocol_simple(thd_arg), alloc(ini_alloc) {} Protocol_cursor(THD *thd_arg, MEM_ROOT *ini_alloc) :Protocol_simple(thd_arg), alloc(ini_alloc), data(NULL) {}
bool prepare_for_send(List<Item> *item_list) bool prepare_for_send(List<Item> *item_list)
{ {
row_count= 0; row_count= 0;
......
...@@ -1913,7 +1913,19 @@ sp_instr_copen::execute(THD *thd, uint *nextp) ...@@ -1913,7 +1913,19 @@ sp_instr_copen::execute(THD *thd, uint *nextp)
else else
res= lex_keeper->reset_lex_and_exec_core(thd, nextp, FALSE, this); res= lex_keeper->reset_lex_and_exec_core(thd, nextp, FALSE, this);
c->post_open(thd, (lex_keeper ? TRUE : FALSE)); /*
Work around the fact that errors in selects are not returned properly
(but instead converted into a warning), so if a condition handler
caught, we have lost the result code.
*/
if (!res)
{
uint dummy1, dummy2;
if (thd->spcont->found_handler(&dummy1, &dummy2))
res= -1;
}
c->post_open(thd, (lex_keeper && !res ? TRUE : FALSE));
} }
DBUG_RETURN(res); DBUG_RETURN(res);
......
...@@ -4343,7 +4343,18 @@ simple_expr: ...@@ -4343,7 +4343,18 @@ simple_expr:
| CONVERT_SYM '(' expr USING charset_name ')' | CONVERT_SYM '(' expr USING charset_name ')'
{ $$= new Item_func_conv_charset($3,$5); } { $$= new Item_func_conv_charset($3,$5); }
| DEFAULT '(' simple_ident ')' | DEFAULT '(' simple_ident ')'
{ $$= new Item_default_value($3); } {
if ($3->is_splocal())
{
LEX_STRING name;
Item_splocal *il= static_cast<Item_splocal *>($3);
il->my_name(&name.str, &name.length);
my_error(ER_WRONG_COLUMN_NAME, MYF(0), name.str);
YYABORT;
}
$$= new Item_default_value($3);
}
| VALUES '(' simple_ident ')' | VALUES '(' simple_ident ')'
{ $$= new Item_insert_value($3); } { $$= new Item_insert_value($3); }
| FUNC_ARG0 '(' ')' | FUNC_ARG0 '(' ')'
......
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