From 316815f44e37812ab694229917e898acca1471a7 Mon Sep 17 00:00:00 2001 From: "igor@rurik.mysql.com" <> Date: Wed, 15 Jun 2005 08:27:33 -0700 Subject: cast.result, cast.test: Added test case for bug #11283. field.h, field.cc: Fixed bug #11283: wrong conversion from varchar to decimal. Added methods Field_string::val_decimal, Field_varstring::val_decimal, Field_blob::val_decimal. They are not inherited from the base class Field_longstr anymore. --- sql/field.cc | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'sql/field.cc') diff --git a/sql/field.cc b/sql/field.cc index 89ef25475ff..62de41e9bb2 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5956,14 +5956,6 @@ longlong Field_string::val_int(void) } -my_decimal *Field_longstr::val_decimal(my_decimal *decimal_value) -{ - str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(), - decimal_value); - return decimal_value; -} - - String *Field_string::val_str(String *val_buffer __attribute__((unused)), String *val_ptr) { @@ -5975,6 +5967,14 @@ String *Field_string::val_str(String *val_buffer __attribute__((unused)), } +my_decimal *Field_string::val_decimal(my_decimal *decimal_value) +{ + str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(), + decimal_value); + return decimal_value; +} + + int Field_string::cmp(const char *a_ptr, const char *b_ptr) { uint a_len, b_len; @@ -6288,6 +6288,15 @@ String *Field_varstring::val_str(String *val_buffer __attribute__((unused)), } +my_decimal *Field_varstring::val_decimal(my_decimal *decimal_value) +{ + uint length= length_bytes == 1 ? (uint) (uchar) *ptr : uint2korr(ptr); + str2my_decimal(E_DEC_FATAL_ERROR, ptr+length_bytes, length, charset(), + decimal_value); + return decimal_value; +} + + int Field_varstring::cmp(const char *a_ptr, const char *b_ptr) { uint a_length, b_length; @@ -6906,6 +6915,18 @@ String *Field_blob::val_str(String *val_buffer __attribute__((unused)), } +my_decimal *Field_blob::val_decimal(my_decimal *decimal_value) +{ + char *blob; + memcpy_fixed(&blob, ptr+packlength, sizeof(char*)); + if (!blob) + blob= ""; + str2my_decimal(E_DEC_FATAL_ERROR, blob, get_length(ptr), charset(), + decimal_value); + return decimal_value; +} + + int Field_blob::cmp(const char *a,uint32 a_length, const char *b, uint32 b_length) { -- cgit v1.2.1