mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge mysql.com:/usr/local/bk/mysql-5.0
into mysql.com:/home/pem/work/mysql-5.0 sql/sql_yacc.yy: Auto merged
This commit is contained in:
commit
aecb4409ef
8 changed files with 128 additions and 4 deletions
|
@ -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()|
|
||||||
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
|
||||||
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)|
|
||||||
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()|
|
||||||
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:
|
||||||
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:
|
||||||
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)
|
||||||
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:
|
||||||
| 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 '(' ')'
|
||||||
|
|
Loading…
Reference in a new issue