• Andres Freund's avatar
    Fix bug around assignment expressions containing indirections. · c1ca3a19
    Andres Freund authored
    Handling of assigned-to expressions with indirection (e.g. set f1[1] =
    3) was broken for ON CONFLICT DO UPDATE.  The problem was that
    ParseState was consulted to determine if an INSERT-appropriate or
    UPDATE-appropriate behavior should be used when transforming expressions
    with indirections. When the wrong path was taken the old row was
    substituted with NULL, leading to wrong results..
    
    To fix remove p_is_update and only use p_is_insert to decide how to
    transform the assignment expression, and uset p_is_insert while parsing
    the on conflict statement. This isn't particularly pretty, but it's not
    any worse than before.
    
    Author: Peter Geoghegan, slightly edited by me
    Discussion: CAM3SWZS8RPvA=KFxADZWw3wAHnnbxMxDzkEC6fNaFc7zSm411w@mail.gmail.com
    Backpatch: 9.5, where the feature was introduced
    c1ca3a19
parse_node.h 10.1 KB