mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +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:
18
sql/field.h
18
sql/field.h
@ -130,7 +130,19 @@ public:
|
||||
null_bit == field->null_bit);
|
||||
}
|
||||
virtual bool eq_def(Field *field);
|
||||
|
||||
/*
|
||||
pack_length() returns size (in bytes) used to store field data in memory
|
||||
(i.e. it returns the maximum size of the field in a row of the table,
|
||||
which is located in RAM).
|
||||
*/
|
||||
virtual uint32 pack_length() const { return (uint32) field_length; }
|
||||
|
||||
/*
|
||||
pack_length_in_rec() returns size (in bytes) used to store field data on
|
||||
storage (i.e. it returns the maximal size of the field in a row of the
|
||||
table, which is located on disk).
|
||||
*/
|
||||
virtual uint32 pack_length_in_rec() const { return pack_length(); }
|
||||
virtual uint32 sort_length() const { return pack_length(); }
|
||||
virtual void reset(void) { bzero(ptr,pack_length()); }
|
||||
@ -1395,6 +1407,12 @@ public:
|
||||
void init_for_tmp_table(enum_field_types sql_type_arg,
|
||||
uint32 max_length, uint32 decimals,
|
||||
bool maybe_null, bool is_unsigned);
|
||||
|
||||
bool init(THD *thd, char *field_name, enum_field_types type, char *length,
|
||||
char *decimals, uint type_modifier, Item *default_value,
|
||||
Item *on_update_value, LEX_STRING *comment, char *change,
|
||||
List<String> *interval_list, CHARSET_INFO *cs,
|
||||
uint uint_geom_type);
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user