• Alexander Barkov's avatar
    A cleanup for MDEV-13919 sql_mode=ORACLE: Derive length of VARCHAR SP param... · 139441d0
    Alexander Barkov authored
    The intent of this patch is to avoid copying arguments from
    a pair "Item **args, uint arg_count" to List<Item> in
    sp_head::execute_function(). If the number of a stored function parameters
    is huge, such copying can affect performance.
    
    Change:
    1. Adding a new method Row_definition_list::adjust_formal_params_to_actual_params,
       which accepts a pair of "Item **, uint".
    2. Modifying the code to use the new method:
       - the calls for sp_rcontext::retrieve_field_definitions() and
         Row_definition_list::adjust_formal_params_to_actual_params() have
         been moved from sp_rcontext::create() to sp_head::rcontext_create(),
         to handle different argument notations easier (Item** vs List<Item>).
       - sp_rcontext::create() now assumes that the passed Row_definition_list
         is already adjusted to the actual SP parameters, and all "TYPE OF"
         and "ROWTYPE OF" references are resolved.
    3. Removing creation of List<Item> in sp_head::execute_procedure(),
       using the code with "Item**, uint" notation instead.
    4. Improvement of the code for MDEV-10577:
       As a good side effect, this patch gets rid of double security context
       switch inside sp_head::execute_trigger():
       sp_rcontext is created when the context is already switched,
       so the second context switch inside sp_head::rcontext_create() was
       redundant. This is solved by adding a "bool switch_secutiry_ctx" parameter
       to rcontext_create(), so now execute_function() and execute_procedure()
       pass "true", while execute_trigger() passes "false".
    139441d0
sp_rcontext.cc 26.2 KB