Field_str in an abstract class with this hierarchy:
[*] marks classes that their own virtual is_equal() implementation.
Most Field_str descendants completeley override is_equal() and do not share the implementation on the Field_str level.
Only Field_string and Field_null share Field_str::is_equal().
If we take a look inside Field_str::is_equal(), it actually implements behavior for CHAR.
Under term of this task we'll:
- Move the code from Field_str::is_equal() to Field_string::is_equal()
- Override Field_null::is_equal() to a simple implementation. The current shared implementation is too exsessive for Field_null, and is going to be even more complex under terms of
MDEV-17301. It can be simplified to something like this:
- Remove the default unused implementation Field::is_equal() and define it as a zero pointer: