mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Merge gvanderkelen@bk-internal.mysql.com:/home/bk/mysql-5.0
into kriem.kemuri.org:/home/geert/MySQL/mysql-5.0
This commit is contained in:
commit
2c36f4c821
19 changed files with 416 additions and 16 deletions
|
|
@ -9,6 +9,7 @@ Sinisa@sinisa.nasamreza.org
|
|||
WAX@sergbook.mysql.com
|
||||
acurtis@ltantony.rdg.cyberkinetica.homeunix.net
|
||||
acurtis@pcgem.rdg.cyberkinetica.com
|
||||
acurtis@xiphis.org
|
||||
administrador@light.hegel.local
|
||||
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
|
||||
akishkin@work.mysql.com
|
||||
|
|
|
|||
|
|
@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-extra.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
@ -155,6 +159,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-extra.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -139,6 +139,10 @@ SOURCE="..\strings\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
@ -147,6 +151,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-extra.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -138,6 +138,10 @@ SOURCE="..\strings\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
@ -146,6 +150,10 @@ SOURCE="..\strings\ctype-euc_kr.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\strings\ctype-extra.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -113,10 +113,18 @@ SOURCE=".\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-euc_kr.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -112,6 +112,10 @@ SOURCE=".\ctype-bin.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-cp932.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-czech.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
@ -120,6 +124,10 @@ SOURCE=".\ctype-euc_kr.c"
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-eucjpms.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=".\ctype-extra.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
|||
|
|
@ -378,6 +378,7 @@ inline double ulonglong2double(ulonglong value)
|
|||
/* #undef HAVE_CHARSET_armscii8 */
|
||||
/* #undef HAVE_CHARSET_ascii */
|
||||
#define HAVE_CHARSET_big5 1
|
||||
#define HAVE_CHARSET_cp932
|
||||
#define HAVE_CHARSET_cp1250 1
|
||||
/* #undef HAVE_CHARSET_cp1251 */
|
||||
/* #undef HAVE_CHARSET_cp1256 */
|
||||
|
|
@ -386,6 +387,7 @@ inline double ulonglong2double(ulonglong value)
|
|||
/* #undef HAVE_CHARSET_cp852 */
|
||||
/* #undef HAVE_CHARSET_cp866 */
|
||||
/* #undef HAVE_CHARSET_dec8 */
|
||||
#define HAVE_CHARSET_eucjpms 1
|
||||
#define HAVE_CHARSET_euckr 1
|
||||
#define HAVE_CHARSET_gb2312 1
|
||||
#define HAVE_CHARSET_gbk 1
|
||||
|
|
|
|||
|
|
@ -513,4 +513,58 @@ call bug9566()|
|
|||
ERROR HY000: Table 'proc' was not locked with LOCK TABLES
|
||||
unlock tables|
|
||||
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|
|
||||
|
|
|
|||
|
|
@ -2779,4 +2779,69 @@ a
|
|||
3.2000
|
||||
drop procedure bug8937|
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -720,6 +720,78 @@ unlock tables|
|
|||
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
|
||||
#
|
||||
|
|
|
|||
|
|
@ -3398,6 +3398,89 @@ drop procedure bug8937|
|
|||
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
|
||||
#
|
||||
|
|
|
|||
|
|
@ -4107,7 +4107,7 @@ ulonglong ha_ndbcluster::get_auto_increment()
|
|||
DBUG_ENTER("get_auto_increment");
|
||||
DBUG_PRINT("enter", ("m_tabname: %s", m_tabname));
|
||||
Ndb *ndb= get_ndb();
|
||||
|
||||
|
||||
if (m_rows_inserted > m_rows_to_insert)
|
||||
/* We guessed too low */
|
||||
m_rows_to_insert+= m_autoincrement_prefetch;
|
||||
|
|
|
|||
|
|
@ -5338,4 +5338,5 @@ ER_WRONG_VALUE_FOR_TYPE
|
|||
eng "Incorrect %-.32s value: '%-.128s' for function %-.32s"
|
||||
ER_TABLE_DEF_CHANGED
|
||||
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)
|
|||
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_cursor, sizeof(LEX_STRING), 16, 8));
|
||||
VOID(my_init_dynamic_array(&m_handler, sizeof(sp_cond_type_t *), 16, 8));
|
||||
m_label.empty();
|
||||
m_children.empty();
|
||||
if (!prev)
|
||||
|
|
@ -82,6 +83,7 @@ sp_pcontext::destroy()
|
|||
delete_dynamic(&m_pvar);
|
||||
delete_dynamic(&m_cond);
|
||||
delete_dynamic(&m_cursor);
|
||||
delete_dynamic(&m_handler);
|
||||
}
|
||||
|
||||
sp_pcontext *
|
||||
|
|
@ -258,6 +260,41 @@ sp_pcontext::find_cond(LEX_STRING *name, my_bool scoped)
|
|||
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
|
||||
sp_pcontext::push_cursor(LEX_STRING *name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -241,6 +241,15 @@ class sp_pcontext : public Sql_alloc
|
|||
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
|
||||
max_handlers()
|
||||
{
|
||||
|
|
@ -293,6 +302,7 @@ private:
|
|||
DYNAMIC_ARRAY m_pvar; // Parameters/variables
|
||||
DYNAMIC_ARRAY m_cond; // Conditions
|
||||
DYNAMIC_ARRAY m_cursor; // Cursors
|
||||
DYNAMIC_ARRAY m_handler; // Handlers, for checking of duplicates
|
||||
|
||||
List<sp_label_t> m_label; // The label list
|
||||
|
||||
|
|
|
|||
|
|
@ -80,24 +80,24 @@ sp_rcontext::find_handler(uint sql_errno,
|
|||
break;
|
||||
case sp_cond_type_t::state:
|
||||
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;
|
||||
break;
|
||||
case sp_cond_type_t::warning:
|
||||
if ((sqlstate[0] == '0' && sqlstate[1] == '1' ||
|
||||
level == MYSQL_ERROR::WARN_LEVEL_WARN) &&
|
||||
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state))
|
||||
found < 0)
|
||||
found= i;
|
||||
break;
|
||||
case sp_cond_type_t::notfound:
|
||||
if (sqlstate[0] == '0' && sqlstate[1] == '2' &&
|
||||
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state))
|
||||
found < 0)
|
||||
found= i;
|
||||
break;
|
||||
case sp_cond_type_t::exception:
|
||||
if ((sqlstate[0] != '0' || sqlstate[1] > '2' ||
|
||||
level == MYSQL_ERROR::WARN_LEVEL_ERROR) &&
|
||||
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state))
|
||||
if ((sqlstate[0] != '0' || sqlstate[1] > '2') &&
|
||||
level == MYSQL_ERROR::WARN_LEVEL_ERROR &&
|
||||
found < 0)
|
||||
found= i;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -525,8 +525,11 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name)
|
|||
tables.table_name= tables.alias= (char*) "func";
|
||||
if (!(table = open_ltable(thd,&tables,TL_WRITE)))
|
||||
goto err;
|
||||
if (!table->file->index_read_idx(table->record[0],0,(byte*) udf_name->str,
|
||||
(uint) udf_name->length,
|
||||
table->field[0]->store(udf_name->str, udf_name->length, system_charset_info);
|
||||
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))
|
||||
{
|
||||
int error;
|
||||
|
|
|
|||
|
|
@ -1774,19 +1774,43 @@ sp_hcond_list:
|
|||
{
|
||||
LEX *lex= Lex;
|
||||
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);
|
||||
$$= 1;
|
||||
if (ctx->find_handler($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
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
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);
|
||||
$$= $1 + 1;
|
||||
if (ctx->find_handler($3))
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue