Commit 2c36f4c8 authored by geert@kriem.kemuri.org's avatar geert@kriem.kemuri.org

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

into kriem.kemuri.org:/home/geert/MySQL/mysql-5.0
parents e5c607e0 dcc40a08
...@@ -9,6 +9,7 @@ Sinisa@sinisa.nasamreza.org ...@@ -9,6 +9,7 @@ Sinisa@sinisa.nasamreza.org
WAX@sergbook.mysql.com WAX@sergbook.mysql.com
acurtis@ltantony.rdg.cyberkinetica.homeunix.net acurtis@ltantony.rdg.cyberkinetica.homeunix.net
acurtis@pcgem.rdg.cyberkinetica.com acurtis@pcgem.rdg.cyberkinetica.com
acurtis@xiphis.org
administrador@light.hegel.local administrador@light.hegel.local
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
akishkin@work.mysql.com akishkin@work.mysql.com
......
...@@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c" ...@@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-czech.c" SOURCE="..\strings\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c" ...@@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-extra.c" SOURCE="..\strings\ctype-extra.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c" ...@@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-czech.c" SOURCE="..\strings\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c" ...@@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-extra.c" SOURCE="..\strings\ctype-extra.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -139,6 +139,10 @@ SOURCE="..\strings\ctype-bin.c" ...@@ -139,6 +139,10 @@ SOURCE="..\strings\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-czech.c" SOURCE="..\strings\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -147,6 +151,10 @@ SOURCE="..\strings\ctype-euc_kr.c" ...@@ -147,6 +151,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-extra.c" SOURCE="..\strings\ctype-extra.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -138,6 +138,10 @@ SOURCE="..\strings\ctype-bin.c" ...@@ -138,6 +138,10 @@ SOURCE="..\strings\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-czech.c" SOURCE="..\strings\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -146,6 +150,10 @@ SOURCE="..\strings\ctype-euc_kr.c" ...@@ -146,6 +150,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE="..\strings\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE="..\strings\ctype-extra.c" SOURCE="..\strings\ctype-extra.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -113,10 +113,18 @@ SOURCE=".\ctype-bin.c" ...@@ -113,10 +113,18 @@ SOURCE=".\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE=".\ctype-czech.c" SOURCE=".\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE=".\ctype-euc_kr.c" SOURCE=".\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -112,6 +112,10 @@ SOURCE=".\ctype-bin.c" ...@@ -112,6 +112,10 @@ SOURCE=".\ctype-bin.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\ctype-cp932.c"
# End Source File
# Begin Source File
SOURCE=".\ctype-czech.c" SOURCE=".\ctype-czech.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -120,6 +124,10 @@ SOURCE=".\ctype-euc_kr.c" ...@@ -120,6 +124,10 @@ SOURCE=".\ctype-euc_kr.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\ctype-eucjpms.c"
# End Source File
# Begin Source File
SOURCE=".\ctype-extra.c" SOURCE=".\ctype-extra.c"
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -378,6 +378,7 @@ inline double ulonglong2double(ulonglong value) ...@@ -378,6 +378,7 @@ inline double ulonglong2double(ulonglong value)
/* #undef HAVE_CHARSET_armscii8 */ /* #undef HAVE_CHARSET_armscii8 */
/* #undef HAVE_CHARSET_ascii */ /* #undef HAVE_CHARSET_ascii */
#define HAVE_CHARSET_big5 1 #define HAVE_CHARSET_big5 1
#define HAVE_CHARSET_cp932
#define HAVE_CHARSET_cp1250 1 #define HAVE_CHARSET_cp1250 1
/* #undef HAVE_CHARSET_cp1251 */ /* #undef HAVE_CHARSET_cp1251 */
/* #undef HAVE_CHARSET_cp1256 */ /* #undef HAVE_CHARSET_cp1256 */
...@@ -386,6 +387,7 @@ inline double ulonglong2double(ulonglong value) ...@@ -386,6 +387,7 @@ inline double ulonglong2double(ulonglong value)
/* #undef HAVE_CHARSET_cp852 */ /* #undef HAVE_CHARSET_cp852 */
/* #undef HAVE_CHARSET_cp866 */ /* #undef HAVE_CHARSET_cp866 */
/* #undef HAVE_CHARSET_dec8 */ /* #undef HAVE_CHARSET_dec8 */
#define HAVE_CHARSET_eucjpms 1
#define HAVE_CHARSET_euckr 1 #define HAVE_CHARSET_euckr 1
#define HAVE_CHARSET_gb2312 1 #define HAVE_CHARSET_gb2312 1
#define HAVE_CHARSET_gbk 1 #define HAVE_CHARSET_gbk 1
......
...@@ -513,4 +513,58 @@ call bug9566()| ...@@ -513,4 +513,58 @@ call bug9566()|
ERROR HY000: Table 'proc' was not locked with LOCK TABLES ERROR HY000: Table 'proc' was not locked with LOCK TABLES
unlock tables| unlock tables|
drop procedure bug9566| drop procedure bug9566|
drop procedure if exists bug7299|
create procedure bug7299()
begin
declare v int;
declare c cursor for select val from t1;
declare exit handler for sqlexception select 'Error!';
open c;
fetch c into v;
end|
delete from t1|
call bug7299()|
ERROR 02000: No data to FETCH
drop procedure bug7299|
create procedure bug9073()
begin
declare continue handler for sqlexception select 1;
declare continue handler for sqlexception select 2;
end|
ERROR 42000: Duplicate handler declared in the same block
create procedure bug9073()
begin
declare condname1 condition for 1234;
declare continue handler for condname1 select 1;
declare exit handler for condname1 select 2;
end|
ERROR 42000: Duplicate handler declared in the same block
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare condname2 condition for sqlstate '42000';
declare exit handler for condname1 select 1;
declare continue handler for condname2 select 2;
end|
ERROR 42000: Duplicate handler declared in the same block
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare exit handler for condname1 select 1;
declare exit handler for sqlstate '42000' select 2;
end|
ERROR 42000: Duplicate handler declared in the same block
drop procedure if exists bug9073|
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare continue handler for condname1 select 1;
begin
declare exit handler for sqlstate '42000' select 2;
begin
declare continue handler for sqlstate '42000' select 3;
end;
end;
end|
drop procedure bug9073|
drop table t1| drop table t1|
...@@ -2779,4 +2779,69 @@ a ...@@ -2779,4 +2779,69 @@ a
3.2000 3.2000
drop procedure bug8937| drop procedure bug8937|
delete from t1| delete from t1|
drop procedure if exists bug6900|
drop procedure if exists bug9074|
drop procedure if exists bug6900_9074|
drop table if exists t3|
create table t3 (w char unique, x char)|
insert into t3 values ('a', 'b')|
create procedure bug6900()
begin
declare exit handler for sqlexception select '1';
begin
declare exit handler for sqlexception select '2';
insert into t3 values ('x', 'y', 'z');
end;
end|
create procedure bug9074()
begin
declare x1, x2, x3, x4, x5, x6 int default 0;
begin
declare continue handler for sqlstate '23000' set x5 = 1;
insert into t3 values ('a', 'b');
set x6 = 1;
end;
begin1_label:
begin
declare continue handler for sqlstate '23000' set x1 = 1;
insert into t3 values ('a', 'b');
set x2 = 1;
begin2_label:
begin
declare exit handler for sqlstate '23000' set x3 = 1;
set x4= 1;
insert into t3 values ('a','b');
set x4= 0;
end begin2_label;
end begin1_label;
select x1, x2, x3, x4, x5, x6;
end|
create procedure bug6900_9074(z int)
begin
declare exit handler for sqlstate '23000' select '23000';
begin
declare exit handler for sqlexception select 'sqlexception';
if z = 1 then
insert into t3 values ('a', 'b');
else
insert into t3 values ('x', 'y', 'z');
end if;
end;
end|
call bug6900()|
2
2
call bug9074()|
x1 x2 x3 x4 x5 x6
1 1 1 1 1 1
call bug6900_9074(0)|
sqlexception
sqlexception
call bug6900_9074(1)|
23000
23000
drop procedure bug6900|
drop procedure bug9074|
drop procedure bug6900_9074|
drop table t3|
drop table t1,t2; drop table t1,t2;
...@@ -720,6 +720,78 @@ unlock tables| ...@@ -720,6 +720,78 @@ unlock tables|
drop procedure bug9566| drop procedure bug9566|
#
# BUG#7299: Stored procedures: exception handler catches not-found conditions
#
--disable_warnings
drop procedure if exists bug7299|
--enable_warnings
create procedure bug7299()
begin
declare v int;
declare c cursor for select val from t1;
declare exit handler for sqlexception select 'Error!';
open c;
fetch c into v;
end|
delete from t1|
--error ER_SP_FETCH_NO_DATA
call bug7299()|
drop procedure bug7299|
#
# BUG#9073: Able to declare two handlers for same condition in same scope
#
--error ER_SP_DUP_HANDLER
create procedure bug9073()
begin
declare continue handler for sqlexception select 1;
declare continue handler for sqlexception select 2;
end|
--error ER_SP_DUP_HANDLER
create procedure bug9073()
begin
declare condname1 condition for 1234;
declare continue handler for condname1 select 1;
declare exit handler for condname1 select 2;
end|
--error ER_SP_DUP_HANDLER
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare condname2 condition for sqlstate '42000';
declare exit handler for condname1 select 1;
declare continue handler for condname2 select 2;
end|
--error ER_SP_DUP_HANDLER
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare exit handler for condname1 select 1;
declare exit handler for sqlstate '42000' select 2;
end|
# This should still work.
--disable_warnings
drop procedure if exists bug9073|
--enable_warnings
create procedure bug9073()
begin
declare condname1 condition for sqlstate '42000';
declare continue handler for condname1 select 1;
begin
declare exit handler for sqlstate '42000' select 2;
begin
declare continue handler for sqlstate '42000' select 3;
end;
end;
end|
drop procedure bug9073|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -3398,6 +3398,89 @@ drop procedure bug8937| ...@@ -3398,6 +3398,89 @@ drop procedure bug8937|
delete from t1| delete from t1|
#
# BUG#6900: Stored procedure inner handler ignored
# BUG#9074: STORED PROC: The scope of every handler declared is not
# properly applied
#
--disable_warnings
drop procedure if exists bug6900|
drop procedure if exists bug9074|
drop procedure if exists bug6900_9074|
drop table if exists t3|
--enable_warnings
create table t3 (w char unique, x char)|
insert into t3 values ('a', 'b')|
create procedure bug6900()
begin
declare exit handler for sqlexception select '1';
begin
declare exit handler for sqlexception select '2';
insert into t3 values ('x', 'y', 'z');
end;
end|
create procedure bug9074()
begin
declare x1, x2, x3, x4, x5, x6 int default 0;
begin
declare continue handler for sqlstate '23000' set x5 = 1;
insert into t3 values ('a', 'b');
set x6 = 1;
end;
begin1_label:
begin
declare continue handler for sqlstate '23000' set x1 = 1;
insert into t3 values ('a', 'b');
set x2 = 1;
begin2_label:
begin
declare exit handler for sqlstate '23000' set x3 = 1;
set x4= 1;
insert into t3 values ('a','b');
set x4= 0;
end begin2_label;
end begin1_label;
select x1, x2, x3, x4, x5, x6;
end|
create procedure bug6900_9074(z int)
begin
declare exit handler for sqlstate '23000' select '23000';
begin
declare exit handler for sqlexception select 'sqlexception';
if z = 1 then
insert into t3 values ('a', 'b');
else
insert into t3 values ('x', 'y', 'z');
end if;
end;
end|
call bug6900()|
call bug9074()|
call bug6900_9074(0)|
call bug6900_9074(1)|
drop procedure bug6900|
drop procedure bug9074|
drop procedure bug6900_9074|
drop table t3|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -4107,7 +4107,7 @@ ulonglong ha_ndbcluster::get_auto_increment() ...@@ -4107,7 +4107,7 @@ ulonglong ha_ndbcluster::get_auto_increment()
DBUG_ENTER("get_auto_increment"); DBUG_ENTER("get_auto_increment");
DBUG_PRINT("enter", ("m_tabname: %s", m_tabname)); DBUG_PRINT("enter", ("m_tabname: %s", m_tabname));
Ndb *ndb= get_ndb(); Ndb *ndb= get_ndb();
if (m_rows_inserted > m_rows_to_insert) if (m_rows_inserted > m_rows_to_insert)
/* We guessed too low */ /* We guessed too low */
m_rows_to_insert+= m_autoincrement_prefetch; m_rows_to_insert+= m_autoincrement_prefetch;
......
...@@ -5338,4 +5338,5 @@ ER_WRONG_VALUE_FOR_TYPE ...@@ -5338,4 +5338,5 @@ ER_WRONG_VALUE_FOR_TYPE
eng "Incorrect %-.32s value: '%-.128s' for function %-.32s" eng "Incorrect %-.32s value: '%-.128s' for function %-.32s"
ER_TABLE_DEF_CHANGED ER_TABLE_DEF_CHANGED
eng "Table definition has changed, please retry transaction" eng "Table definition has changed, please retry transaction"
ER_SP_DUP_HANDLER 42000
eng "Duplicate handler declared in the same block"
...@@ -57,6 +57,7 @@ sp_pcontext::sp_pcontext(sp_pcontext *prev) ...@@ -57,6 +57,7 @@ sp_pcontext::sp_pcontext(sp_pcontext *prev)
VOID(my_init_dynamic_array(&m_pvar, sizeof(sp_pvar_t *), 16, 8)); VOID(my_init_dynamic_array(&m_pvar, sizeof(sp_pvar_t *), 16, 8));
VOID(my_init_dynamic_array(&m_cond, sizeof(sp_cond_type_t *), 16, 8)); VOID(my_init_dynamic_array(&m_cond, sizeof(sp_cond_type_t *), 16, 8));
VOID(my_init_dynamic_array(&m_cursor, sizeof(LEX_STRING), 16, 8)); VOID(my_init_dynamic_array(&m_cursor, sizeof(LEX_STRING), 16, 8));
VOID(my_init_dynamic_array(&m_handler, sizeof(sp_cond_type_t *), 16, 8));
m_label.empty(); m_label.empty();
m_children.empty(); m_children.empty();
if (!prev) if (!prev)
...@@ -82,6 +83,7 @@ sp_pcontext::destroy() ...@@ -82,6 +83,7 @@ sp_pcontext::destroy()
delete_dynamic(&m_pvar); delete_dynamic(&m_pvar);
delete_dynamic(&m_cond); delete_dynamic(&m_cond);
delete_dynamic(&m_cursor); delete_dynamic(&m_cursor);
delete_dynamic(&m_handler);
} }
sp_pcontext * sp_pcontext *
...@@ -258,6 +260,41 @@ sp_pcontext::find_cond(LEX_STRING *name, my_bool scoped) ...@@ -258,6 +260,41 @@ sp_pcontext::find_cond(LEX_STRING *name, my_bool scoped)
return NULL; return NULL;
} }
/*
* This only searches the current context, for error checking of
* duplicates.
* Returns TRUE if found.
*/
bool
sp_pcontext::find_handler(sp_cond_type_t *cond)
{
uint i= m_handler.elements;
while (i--)
{
sp_cond_type_t *p;
get_dynamic(&m_handler, (gptr)&p, i);
if (cond->type == p->type)
{
switch (p->type)
{
case sp_cond_type_t::number:
if (cond->mysqlerr == p->mysqlerr)
return TRUE;
break;
case sp_cond_type_t::state:
if (strcmp(cond->sqlstate, p->sqlstate) == 0)
return TRUE;
break;
default:
return TRUE;
}
}
}
return FALSE;
}
void void
sp_pcontext::push_cursor(LEX_STRING *name) sp_pcontext::push_cursor(LEX_STRING *name)
{ {
......
...@@ -241,6 +241,15 @@ class sp_pcontext : public Sql_alloc ...@@ -241,6 +241,15 @@ class sp_pcontext : public Sql_alloc
m_handlers+= 1; m_handlers+= 1;
} }
inline void
push_handler(sp_cond_type_t *cond)
{
insert_dynamic(&m_handler, (gptr)&cond);
}
bool
find_handler(sp_cond_type *cond);
inline uint inline uint
max_handlers() max_handlers()
{ {
...@@ -293,6 +302,7 @@ class sp_pcontext : public Sql_alloc ...@@ -293,6 +302,7 @@ class sp_pcontext : public Sql_alloc
DYNAMIC_ARRAY m_pvar; // Parameters/variables DYNAMIC_ARRAY m_pvar; // Parameters/variables
DYNAMIC_ARRAY m_cond; // Conditions DYNAMIC_ARRAY m_cond; // Conditions
DYNAMIC_ARRAY m_cursor; // Cursors DYNAMIC_ARRAY m_cursor; // Cursors
DYNAMIC_ARRAY m_handler; // Handlers, for checking of duplicates
List<sp_label_t> m_label; // The label list List<sp_label_t> m_label; // The label list
......
...@@ -80,24 +80,24 @@ sp_rcontext::find_handler(uint sql_errno, ...@@ -80,24 +80,24 @@ sp_rcontext::find_handler(uint sql_errno,
break; break;
case sp_cond_type_t::state: case sp_cond_type_t::state:
if (strcmp(sqlstate, cond->sqlstate) == 0 && if (strcmp(sqlstate, cond->sqlstate) == 0 &&
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::number)) (found < 0 || m_handler[found].cond->type > sp_cond_type_t::state))
found= i; found= i;
break; break;
case sp_cond_type_t::warning: case sp_cond_type_t::warning:
if ((sqlstate[0] == '0' && sqlstate[1] == '1' || if ((sqlstate[0] == '0' && sqlstate[1] == '1' ||
level == MYSQL_ERROR::WARN_LEVEL_WARN) && level == MYSQL_ERROR::WARN_LEVEL_WARN) &&
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state)) found < 0)
found= i; found= i;
break; break;
case sp_cond_type_t::notfound: case sp_cond_type_t::notfound:
if (sqlstate[0] == '0' && sqlstate[1] == '2' && if (sqlstate[0] == '0' && sqlstate[1] == '2' &&
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state)) found < 0)
found= i; found= i;
break; break;
case sp_cond_type_t::exception: case sp_cond_type_t::exception:
if ((sqlstate[0] != '0' || sqlstate[1] > '2' || if ((sqlstate[0] != '0' || sqlstate[1] > '2') &&
level == MYSQL_ERROR::WARN_LEVEL_ERROR) && level == MYSQL_ERROR::WARN_LEVEL_ERROR &&
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state)) found < 0)
found= i; found= i;
break; break;
} }
......
...@@ -525,8 +525,11 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) ...@@ -525,8 +525,11 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name)
tables.table_name= tables.alias= (char*) "func"; tables.table_name= tables.alias= (char*) "func";
if (!(table = open_ltable(thd,&tables,TL_WRITE))) if (!(table = open_ltable(thd,&tables,TL_WRITE)))
goto err; goto err;
if (!table->file->index_read_idx(table->record[0],0,(byte*) udf_name->str, table->field[0]->store(udf_name->str, udf_name->length, system_charset_info);
(uint) udf_name->length, table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
if (!table->file->index_read_idx(table->record[0], 0,
(byte*) table->field[0]->ptr,
table->key_info[0].key_length,
HA_READ_KEY_EXACT)) HA_READ_KEY_EXACT))
{ {
int error; int error;
......
...@@ -1774,19 +1774,43 @@ sp_hcond_list: ...@@ -1774,19 +1774,43 @@ sp_hcond_list:
{ {
LEX *lex= Lex; LEX *lex= Lex;
sp_head *sp= lex->sphead; sp_head *sp= lex->sphead;
sp_instr_hpush_jump *i= (sp_instr_hpush_jump *)sp->last_instruction(); sp_pcontext *ctx= lex->spcont;
i->add_condition($1); if (ctx->find_handler($1))
$$= 1; {
my_message(ER_SP_DUP_HANDLER, ER(ER_SP_DUP_HANDLER), MYF(0));
YYABORT;
}
else
{
sp_instr_hpush_jump *i=
(sp_instr_hpush_jump *)sp->last_instruction();
i->add_condition($1);
ctx->push_handler($1);
$$= 1;
}
} }
| sp_hcond_list ',' sp_hcond | sp_hcond_list ',' sp_hcond
{ {
LEX *lex= Lex; LEX *lex= Lex;
sp_head *sp= lex->sphead; sp_head *sp= lex->sphead;
sp_instr_hpush_jump *i= (sp_instr_hpush_jump *)sp->last_instruction(); sp_pcontext *ctx= lex->spcont;
i->add_condition($3); if (ctx->find_handler($3))
$$= $1 + 1; {
my_message(ER_SP_DUP_HANDLER, ER(ER_SP_DUP_HANDLER), MYF(0));
YYABORT;
}
else
{
sp_instr_hpush_jump *i=
(sp_instr_hpush_jump *)sp->last_instruction();
i->add_condition($3);
ctx->push_handler($3);
$$= $1 + 1;
}
} }
; ;
......
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