• Alexander Barkov's avatar
    MDEV-16309 Split ::create_tmp_field() into virtual methods in Item · 637af783
    Alexander Barkov authored
    Detailed: changes:
    1. Moving Field specific code into new methods on Field:
       - Field *Field::create_tmp_field(...)
       - virtual void init_for_tmp_table(...)
    
    2. Removing virtual Item::create_tmp_field().
       Adding instead a new virtual method Item::create_tmp_field_ex().
    
       Note, a virtual create_tmp_field() still exists, but only for Item_sum.
       This resembles 10.0 code structure. Perhaps create_tmp_field() should
       be removed from Item_sum and Item_sum descendants should override
       create_tmp_field_ex() directly. This can be done in a separate commit.
    
    3. Adding helper classes Tmp_field_src and Tmp_field_param,
       to make the API for Item::create_tmp_field_ex() smaller
       and easier to extend in the future.
    
    4. Decomposing the public function create_tmp_field() into
       virtual implementations for Item and a number of its descendants:
       - Item_basic_value
       - Item_sp_variable
       - Item_name_const
       - Item_result_field
       - Item_field
       - Item_ref
       - Item_type_holder
       - Item_row
       - Item_func_sp
       - Item_func_user_var
       - Item_sum
       - Item_sum_field
       - Item_proc
    
    5. Adding DBUG_ASSERT-only virtual implementations for
       Item types that should not appear in create_tmp_table_ex(),
       for easier debugging:
       - Item_nodeset_func
       - Item_nodeset_to_const_comparator
       - Item_null_result
       - Item_copy
       - Item_ident_for_show
       - Item_user_var_as_out_param
    
    6. Moving public function create_tmp_field_from_field()
       as a method to Item_field.
    
    7. Removing Item::set_result_field(). It's not needed any more.
    
    8. Cleanup: Removing the enum value "EXPR_CACHE_ITEM",
       as it's not used for a very long time.
    637af783
item_row.h 4.76 KB