Commit 24de7092 authored by unknown's avatar unknown
Browse files

Manual merge


sql/field.cc:
  Auto merged
parents 2ec50db8 1575df00
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
+11 −0
Original line number Diff line number Diff line
@@ -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;
+29 −8
Original line number Diff line number Diff line
@@ -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)
{
+3 −1
Original line number Diff line number Diff line
@@ -381,7 +381,6 @@ class Field_longstr :public Field_str
               field_name_arg, table_arg, charset)
    {}

  my_decimal *val_decimal(my_decimal *);
  int store_decimal(const my_decimal *d);
};

@@ -993,6 +992,7 @@ class Field_string :public Field_longstr {
  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 @@ class Field_varstring :public Field_longstr {
  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 @@ class Field_blob :public Field_longstr {
  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);