• Tom Lane's avatar
    Fix bugs in plpgsql's handling of CALL argument lists. · 15c72934
    Tom Lane authored
    exec_stmt_call() tried to extract information out of a CALL statement's
    argument list without using expand_function_arguments(), apparently in
    the hope of saving a few nanoseconds by not processing defaulted
    arguments.  It got that quite wrong though, leading to crashes with
    named arguments, as well as failure to enforce writability of the
    argument for a defaulted INOUT parameter.  Fix and simplify the logic
    by using expand_function_arguments() before examining the list.
    
    Also, move the argument-examination to just after producing the CALL
    command's plan, before invoking the called procedure.  This ensures
    that we'll track possible changes in the procedure's argument list
    correctly, and avoids a hazard of the plan cache being flushed while
    the procedure executes.
    
    Also fix assorted falsehoods and omissions in associated documentation.
    
    Per bug #15477 from Alexey Stepanov.
    
    Patch by me, with some help from Pavel Stehule.  Back-patch to v11.
    
    Discussion: https://postgr.es/m/15477-86075b1d1d319e0a@postgresql.org
    Discussion: https://postgr.es/m/CAFj8pRA6UsujpTs9Sdwmk-R6yQykPx46wgjj+YZ7zxm4onrDyw@mail.gmail.com
    15c72934
plpgsql.sgml 214 KB