The following methods:
Item_func_plus::fix_length_and_dec()
|
Item_func_minus::fix_length_and_dec()
|
Item_func_mul::fix_length_and_dec()
|
Item_func_div::fix_length_and_dec()
|
Item_func_mod::fix_length_and_dec()
|
use methods cmp_type() and result_type() of their arguments.
This is not friendly to pluggable data types, as only covers the built-in data types.
Under term of this task we'll split implementations of these methods into new methods in Type_handler:
virtual bool Item_func_plus_fix_length_and_dec(Item_func_plus *) const;
|
virtual bool Item_func_minus_fix_length_and_dec(Item_func_minus *) const;
|
virtual bool Item_func_mul_fix_length_and_dec(Item_func_mul *) const;
|
virtual bool Item_func_div_fix_length_and_dec(Item_func_div *) const;
|
virtual bool Item_func_mod_fix_length_and_dec(Item_func_mod *) const;
|
Pluggable data types should be able to define their own fix_length_and_dec() logic.
We'll also make the server return an error when a GOMETRY type expression appears as an argument of the affected operations.