This task will add a new virtual method in Type_handler:
virtual bool Item_hybrid_func_fix_attributes(THD *thd, Item_hybrid_func *func,
|
Item **items,
|
uint nitems) const;
|
and split this code in Item_hybrid_func::fix_attributes into the new method implementation in the relevant type handler implementations:
switch (Item_hybrid_func::result_type()) {
|
case STRING_RESULT:
|
..
|
case DECIMAL_RESULT:
|
..
|
case REAL_RESULT:
|
..
|
case INT_RESULT:
|
..
|
case ROW_RESULT:
|
case TIME_RESULT:
|
..
|
}
|
and also remove a special STRING_RESULT condition in Item_func_case::fix_length_and_dec(), to make the code symmetric across the data types.
Note, the THD* parameter to Type_handler::Item_hybrid_func_fix_attributes is not needed right now, but it will be needed soon:
- for MDEV-10575
- to get rid of current_thd calls inside count_string_length(), as it was planned to get rid of most current_thd calls in 10.3.