• Tom Lane's avatar
    Prevent multicolumn expansion of "foo.*" in an UPDATE source expression. · c5f365f3
    Tom Lane authored
    Because we use transformTargetList() for UPDATE as well as SELECT
    tlists, the code accidentally tried to expand a "*" reference into
    several columns.  This is nonsensical, because the UPDATE syntax
    provides exactly one target column to put the value into.  The
    immediate result was that transformUpdateTargetList() got confused
    and reported "UPDATE target count mismatch --- internal error".
    It seems better to treat such a reference as a plain whole-row
    variable, as it would be in other contexts.  (This could produce
    useful results when the target column is of composite type.)
    
    Fix by tweaking transformTargetList() to perform *-expansion only
    conditionally, depending on its exprKind parameter.
    
    Back-patch to 9.3.  The problem exists further back, but a fix would be
    much more invasive before that, because transformTargetList() wasn't
    told what kind of list it was working on.  Doesn't seem worth the
    trouble given the lack of field reports.  (I only noticed it because
    I was checking the code while trying to improve the documentation about
    how we handle "foo.*".)
    
    Discussion: <4308.1479595330@sss.pgh.pa.us>
    c5f365f3
update.out 5.32 KB