Commit 4233b284 authored by Alexander Barkov's avatar Alexander Barkov

MDEV-19283 Move the code from Field_str::is_equal() to Field_string::is_equal()

parent 878ca5ca
...@@ -2436,6 +2436,15 @@ void Field_null::sql_type(String &res) const ...@@ -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 Field_row, e.g. for ROW-type SP variables
****************************************************************************/ ****************************************************************************/
...@@ -7069,14 +7078,10 @@ int Field_str::store(double nr) ...@@ -7069,14 +7078,10 @@ int Field_str::store(double nr)
return store(buff, (uint)length, &my_charset_numeric); 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()) if (new_field->type_handler() != type_handler())
return IS_EQUAL_NO; return IS_EQUAL_NO;
if (new_field->length < max_display_length()) if (new_field->length < max_display_length())
......
...@@ -1504,7 +1504,7 @@ class Field: public Value_source ...@@ -1504,7 +1504,7 @@ class Field: public Value_source
of a table is compatible with the old definition so that it can of a table is compatible with the old definition so that it can
determine if data needs to be copied over (table data change). 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 */ /* convert decimal to longlong with overflow check */
longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag, longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag,
int *err); int *err);
...@@ -1868,7 +1868,6 @@ class Field_str :public Field { ...@@ -1868,7 +1868,6 @@ class Field_str :public Field {
my_decimal *val_decimal(my_decimal *); my_decimal *val_decimal(my_decimal *);
bool val_bool() { return val_real() != 0e0; } bool val_bool() { return val_real() != 0e0; }
virtual bool str_needs_quotes() { return TRUE; } 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); } bool eq_cmp_as_binary() { return MY_TEST(flags & BINARY_FLAG); }
virtual uint length_size() { return 0; } virtual uint length_size() { return 0; }
double pos_in_interval(Field *min, Field *max) double pos_in_interval(Field *min, Field *max)
...@@ -2640,6 +2639,7 @@ class Field_null :public Field_str { ...@@ -2640,6 +2639,7 @@ class Field_null :public Field_str {
my_decimal *val_decimal(my_decimal *) { return 0; } my_decimal *val_decimal(my_decimal *) { return 0; }
String *val_str(String *value,String *value2) String *val_str(String *value,String *value2)
{ value2->length(0); return value2;} { value2->length(0); return value2;}
uint is_equal(Create_field *new_field);
int cmp(const uchar *a, const uchar *b) { return 0;} int cmp(const uchar *a, const uchar *b) { return 0;}
void sort_string(uchar *buff, uint length) {} void sort_string(uchar *buff, uint length) {}
uint32 pack_length() const { return 0; } uint32 pack_length() const { return 0; }
...@@ -3563,6 +3563,7 @@ class Field_string :public Field_longstr { ...@@ -3563,6 +3563,7 @@ class Field_string :public Field_longstr {
int cmp(const uchar *,const uchar *); int cmp(const uchar *,const uchar *);
void sort_string(uchar *buff,uint length); void sort_string(uchar *buff,uint length);
void sql_type(String &str) const; void sql_type(String &str) const;
uint is_equal(Create_field *new_field);
virtual uchar *pack(uchar *to, const uchar *from, virtual uchar *pack(uchar *to, const uchar *from,
uint max_length); uint max_length);
virtual const uchar *unpack(uchar* to, const uchar *from, virtual const uchar *unpack(uchar* to, const uchar *from,
......
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