Manual merge
sql/field.cc: Auto merged
This commit is contained in:
commit
24de70926e
@ -344,6 +344,14 @@ select cast(s1 as decimal(7,2)) from t1;
|
||||
cast(s1 as decimal(7,2))
|
||||
111111.00
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (v varchar(10), tt tinytext, t text,
|
||||
mt mediumtext, lt longtext);
|
||||
INSERT INTO t1 VALUES ('1.01', '2.02', '3.03', '4.04', '5.05');
|
||||
SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
|
||||
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
|
||||
CAST(v AS DECIMAL) CAST(tt AS DECIMAL) CAST(t AS DECIMAL) CAST(mt AS DECIMAL) CAST(lt AS DECIMAL)
|
||||
1.01 2.02 3.03 4.04 5.05
|
||||
DROP TABLE t1;
|
||||
select cast(NULL as decimal(6)) as t1;
|
||||
t1
|
||||
NULL
|
||||
|
@ -170,6 +170,17 @@ select cast(s1 as decimal(7,2)) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for bug #11283: field conversion from varchar, and text types to decimal
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (v varchar(10), tt tinytext, t text,
|
||||
mt mediumtext, lt longtext);
|
||||
INSERT INTO t1 VALUES ('1.01', '2.02', '3.03', '4.04', '5.05');
|
||||
|
||||
SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
|
||||
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
# Bug @10237 (CAST(NULL DECIMAL) crashes server)
|
||||
#
|
||||
select cast(NULL as decimal(6)) as t1;
|
||||
|
37
sql/field.cc
37
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)
|
||||
{
|
||||
|
@ -381,7 +381,6 @@ public:
|
||||
field_name_arg, table_arg, charset)
|
||||
{}
|
||||
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
int store_decimal(const my_decimal *d);
|
||||
};
|
||||
|
||||
@ -993,6 +992,7 @@ public:
|
||||
double val_real(void);
|
||||
longlong val_int(void);
|
||||
String *val_str(String*,String *);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
int cmp(const char *,const char*);
|
||||
void sort_string(char *buff,uint length);
|
||||
void sql_type(String &str) const;
|
||||
@ -1051,6 +1051,7 @@ public:
|
||||
double val_real(void);
|
||||
longlong val_int(void);
|
||||
String *val_str(String*,String *);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
int cmp(const char *,const char*);
|
||||
void sort_string(char *buff,uint length);
|
||||
void get_key_image(char *buff,uint length, imagetype type);
|
||||
@ -1106,6 +1107,7 @@ public:
|
||||
double val_real(void);
|
||||
longlong val_int(void);
|
||||
String *val_str(String*,String *);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
int cmp(const char *,const char*);
|
||||
int cmp(const char *a, uint32 a_length, const char *b, uint32 b_length);
|
||||
int cmp_binary(const char *a,const char *b, uint32 max_length=~0L);
|
||||
|
Loading…
x
Reference in New Issue
Block a user