mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Patch for WL#2894: Make stored routine variables work
according to the standard. The idea is to use Field-classes to implement stored routines variables. Also, we should provide facade to Item-hierarchy by Item_field class (it is necessary, since SRVs take part in expressions). The patch fixes the following bugs: - BUG#8702: Stored Procedures: No Error/Warning shown for inappropriate data type matching; - BUG#8768: Functions: For any unsigned data type, -ve values can be passed and returned; - BUG#8769: Functions: For Int datatypes, out of range values can be passed and returned; - BUG#9078: STORED PROCDURE: Decimal digits are not displayed when we use DECIMAL datatype; - BUG#9572: Stored procedures: variable type declarations ignored; - BUG#12903: upper function does not work inside a function; - BUG#13705: parameters to stored procedures are not verified; - BUG#13808: ENUM type stored procedure parameter accepts non-enumerated data; - BUG#13909: Varchar Stored Procedure Parameter always BINARY string (ignores CHARACTER SET); - BUG#14161: Stored procedure cannot retrieve bigint unsigned; - BUG#14188: BINARY variables have no 0x00 padding; - BUG#15148: Stored procedure variables accept non-scalar values;
This commit is contained in:
@ -1503,10 +1503,10 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
|
||||
my_var *mv= gl++;
|
||||
if (mv->local)
|
||||
{
|
||||
Item_splocal *var;
|
||||
(void)local_vars.push_back(var= new Item_splocal(mv->s, mv->offset));
|
||||
Item_splocal *var= new Item_splocal(mv->s, mv->offset, mv->type);
|
||||
(void)local_vars.push_back(var);
|
||||
#ifndef DBUG_OFF
|
||||
var->owner= mv->owner;
|
||||
var->m_sp= mv->sp;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
@ -1779,8 +1779,8 @@ bool select_dumpvar::send_data(List<Item> &items)
|
||||
{
|
||||
if ((yy=var_li++))
|
||||
{
|
||||
if (thd->spcont->set_item_eval(current_thd,
|
||||
yy->get_offset(), it.ref(), zz->type))
|
||||
if (thd->spcont->set_variable(current_thd, yy->get_var_idx(),
|
||||
*it.ref()))
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user