• Tom Lane's avatar
    Replace uses of SPI_modifytuple that intend to allocate in current context. · 9257f078
    Tom Lane authored
    Invent a new function heap_modify_tuple_by_cols() that is functionally
    equivalent to SPI_modifytuple except that it always allocates its result
    by simple palloc.  I chose however to make the API details a bit more
    like heap_modify_tuple: pass a tupdesc rather than a Relation, and use
    bool convention for the isnull array.
    
    Use this function in place of SPI_modifytuple at all call sites where the
    intended behavior is to allocate in current context.  (There actually are
    only two call sites left that depend on the old behavior, which makes me
    wonder if we should just drop this function rather than keep it.)
    
    This new function is easier to use than heap_modify_tuple() for purposes
    of replacing a single column (or, really, any fixed number of columns).
    There are a number of places where it would simplify the code to change
    over, but I resisted that temptation for the moment ... everywhere except
    in plpgsql's exec_assign_value(); changing that might offer some small
    performance benefit, so I did it.
    
    This is on the way to removing SPI_push/SPI_pop, but it seems like
    good code cleanup in its own right.
    
    Discussion: <9633.1478552022@sss.pgh.pa.us>
    9257f078
tsvector_op.c 52.4 KB