Commit aea2e93b authored by Jorgen Loland's avatar Jorgen Loland

Merge BUG#12997905 from 5.1 to 5.5

parents 63e381e9 523c849d
...@@ -2227,6 +2227,23 @@ public: ...@@ -2227,6 +2227,23 @@ public:
uchar *from_null_ptr,*to_null_ptr; uchar *from_null_ptr,*to_null_ptr;
my_bool *null_row; my_bool *null_row;
uint from_bit,to_bit; uint from_bit,to_bit;
/**
Number of bytes in the fields pointed to by 'from_ptr' and
'to_ptr'. Usually this is the number of bytes that are copied from
'from_ptr' to 'to_ptr'.
For variable-length fields (VARCHAR), the first byte(s) describe
the actual length of the text. For VARCHARs with length
< 256 there is 1 length byte
>= 256 there is 2 length bytes
Thus, if from_field is VARCHAR(10), from_length (and in most cases
to_length) is 11. For VARCHAR(1024), the length is 1026. @see
Field_varstring::length_bytes
Note that for VARCHARs, do_copy() will be do_varstring*() which
only copies the length-bytes (1 or 2) + the actual length of the
text instead of from/to_length bytes. @see get_copy_func()
*/
uint from_length,to_length; uint from_length,to_length;
Field *from_field,*to_field; Field *from_field,*to_field;
String tmp; // For items String tmp; // For items
......
...@@ -709,7 +709,7 @@ Copy_field::get_copy_func(Field *to,Field *from) ...@@ -709,7 +709,7 @@ Copy_field::get_copy_func(Field *to,Field *from)
if (((Field_varstring*) to)->length_bytes != if (((Field_varstring*) to)->length_bytes !=
((Field_varstring*) from)->length_bytes) ((Field_varstring*) from)->length_bytes)
return do_field_string; return do_field_string;
if (to_length != from_length) else
return (((Field_varstring*) to)->length_bytes == 1 ? return (((Field_varstring*) to)->length_bytes == 1 ?
(from->charset()->mbmaxlen == 1 ? do_varstring1 : (from->charset()->mbmaxlen == 1 ? do_varstring1 :
do_varstring1_mb) : do_varstring1_mb) :
......
...@@ -10894,6 +10894,9 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -10894,6 +10894,9 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
if (open_tmp_table(table)) if (open_tmp_table(table))
goto err; goto err;
// Make empty record so random data is not written to disk
empty_record(table);
thd->mem_root= mem_root_save; thd->mem_root= mem_root_save;
DBUG_RETURN(table); DBUG_RETURN(table);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment