[MDEV-11330] Split Item_func_hybrid_field_type::val_xxx() into methods in Type_handler Created: 2016-11-22  Updated: 2017-04-07  Resolved: 2016-12-05

Status: Closed
Project: MariaDB Server
Component/s: OTHER
Fix Version/s: 10.3.0

Type: Task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: datatype

Issue Links:
Blocks
blocks MDEV-4912 Data type plugin API version 1 Closed

 Description   

Under term of this tasks we'll remove switch(cmp_type()) in Item_func_hybrid_field_type::val_xxx() and Item_func_hybrid_field_type::get_date() and introduce instead new methods in Type_handler, e.g.:

class Type_handler
{
  ...
  virtual
  String *Item_func_hybrid_field_type_val_str(Item_func_hybrid_field_type *,
                                                String *) const= 0;};
}

The methods Item_func_hybrid_field_type::val_xxx() and Item_func_hybrid_field_type::get_date() will call the corresponding new methods in Type_handler:

class Item_func_hybrid_field_type: public Item_hybrid_func
{
  ...
  String *val_str(String*str)
  {
    return Item_func_hybrid_field_type::type_handler()->
               Item_func_hybrid_field_type_val_str(this, str);
  }
  ...
}

For performance purposes, the change should try not to introduce new virtual calls.
One virtual call in switch(cmp_type()) should be replaced to one virtual call in Type_handler.
Calls inside the new methods in Type_handler should be done statically.



 Comments   
Comment by Vicențiu Ciorbaru [ 2016-12-05 ]

I've also reviewed MDEV-10811 in the process of reviewing this patch. After discussing not to use casts that lead to undefined behaviour, we've agreed on an implementation.

Generated at Thu Feb 08 07:49:06 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.