diff options
author | anozdrin@mysql.com <> | 2005-12-07 17:01:17 +0300 |
---|---|---|
committer | anozdrin@mysql.com <> | 2005-12-07 17:01:17 +0300 |
commit | 0ff8f60b45552c7c78221f3e47219feafa63eb62 (patch) | |
tree | 82814a574624a8e813cc8dfad8c31d3fa4adf898 /sql/sql_class.cc | |
parent | c6fc5d35ccfbfe2319d962e20d51b4b1db4a92ea (diff) | |
download | mariadb-git-0ff8f60b45552c7c78221f3e47219feafa63eb62.tar.gz |
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;
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r-- | sql/sql_class.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 989b8142202..f24d8ed4e50 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -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); } } |