diff --git a/sql/field.h b/sql/field.h index c64d6bc..57fd25f 100644 --- a/sql/field.h +++ b/sql/field.h @@ -2488,10 +2488,37 @@ class Field_blob :public Field_longstr { int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0L); int key_cmp(const uchar *,const uchar*); int key_cmp(const uchar *str, uint length); - /* Never update the value of min_val for a blob field */ - bool update_min(Field *min_val, bool force_update) { return FALSE; } - /* Never update the value of max_val for a blob field */ - bool update_max(Field *max_val, bool force_update) { return FALSE; } + bool update_min(Field *min_val, bool force_update) { + bool update_fl; + uchar *min_ptr,*blob; + uint32 min_len = MY_MIN(((Field_blob *) min_val)->get_length(), 255); + uint32 len = MY_MIN(get_length(), 255); + ((Field_blob *) min_val)->get_ptr(&min_ptr); + get_ptr(&blob); + update_fl= force_update || cmp(blob, len, min_ptr, min_len) < 0; + if (update_fl) + { + min_val->set_notnull(); + min_val->store((const char *)blob, len, charset()); + } + return update_fl; + } + bool update_max(Field *max_val, bool force_update) + { + bool update_fl; + uchar *max_ptr,*blob; + uint32 max_len = MY_MIN(((Field_blob *) max_val)->get_length(), 255); + uint32 len = MY_MIN(get_length(), 255); + ((Field_blob *) max_val)->get_ptr(&max_ptr); + get_ptr(&blob); + update_fl= force_update || cmp(blob, len, max_ptr, max_len) > 0; + if (update_fl) + { + max_val->set_notnull(); + max_val->store((const char *)blob, len, charset()); + } + return update_fl; + } uint32 key_length() const { return 0; } void sort_string(uchar *buff,uint length); uint32 pack_length() const