From 4233b28489826ffeebcc828aa6eb171d6f57ccdb Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 19 Apr 2019 07:00:17 +0400 Subject: [PATCH] MDEV-19283 Move the code from Field_str::is_equal() to Field_string::is_equal() --- sql/field.cc | 17 +++++++++++------ sql/field.h | 5 +++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 4a93464b2e8..72dc52143a0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2436,6 +2436,15 @@ void Field_null::sql_type(String &res) const } +uint Field_null::is_equal(Create_field *new_field) +{ + DBUG_ASSERT(!compression_method()); + return new_field->type_handler() == type_handler() && + new_field->charset == field_charset && + new_field->length == max_display_length(); +} + + /**************************************************************************** Field_row, e.g. for ROW-type SP variables ****************************************************************************/ @@ -7069,14 +7078,10 @@ int Field_str::store(double nr) return store(buff, (uint)length, &my_charset_numeric); } -uint Field::is_equal(Create_field *new_field) -{ - return new_field->type_handler() == type_handler(); -} - -uint Field_str::is_equal(Create_field *new_field) +uint Field_string::is_equal(Create_field *new_field) { + DBUG_ASSERT(!compression_method()); if (new_field->type_handler() != type_handler()) return IS_EQUAL_NO; if (new_field->length < max_display_length()) diff --git a/sql/field.h b/sql/field.h index 8bd7343931b..35597d72927 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1504,7 +1504,7 @@ public: of a table is compatible with the old definition so that it can determine if data needs to be copied over (table data change). */ - virtual uint is_equal(Create_field *new_field); + virtual uint is_equal(Create_field *new_field)= 0; /* convert decimal to longlong with overflow check */ longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag, int *err); @@ -1868,7 +1868,6 @@ public: my_decimal *val_decimal(my_decimal *); bool val_bool() { return val_real() != 0e0; } virtual bool str_needs_quotes() { return TRUE; } - uint is_equal(Create_field *new_field); bool eq_cmp_as_binary() { return MY_TEST(flags & BINARY_FLAG); } virtual uint length_size() { return 0; } double pos_in_interval(Field *min, Field *max) @@ -2640,6 +2639,7 @@ public: my_decimal *val_decimal(my_decimal *) { return 0; } String *val_str(String *value,String *value2) { value2->length(0); return value2;} + uint is_equal(Create_field *new_field); int cmp(const uchar *a, const uchar *b) { return 0;} void sort_string(uchar *buff, uint length) {} uint32 pack_length() const { return 0; } @@ -3563,6 +3563,7 @@ public: int cmp(const uchar *,const uchar *); void sort_string(uchar *buff,uint length); void sql_type(String &str) const; + uint is_equal(Create_field *new_field); virtual uchar *pack(uchar *to, const uchar *from, uint max_length); virtual const uchar *unpack(uchar* to, const uchar *from,