• Tom Lane's avatar
    Add a debugging option to stress-test outfuncs.c and readfuncs.c. · d0cfc3d6
    Tom Lane authored
    In the normal course of operation, query trees will be serialized only if
    they are stored as views or rules; and plan trees will be serialized only
    if they get passed to parallel-query workers.  This leaves an awful lot of
    opportunity for bugs/oversights to not get detected, as indeed we've just
    been reminded of the hard way.
    
    To improve matters, this patch adds a new compile option
    WRITE_READ_PARSE_PLAN_TREES, which is modeled on the longstanding option
    COPY_PARSE_PLAN_TREES; but instead of passing all parse and plan trees
    through copyObject, it passes them through nodeToString + stringToNode.
    Enabling this option in a buildfarm animal or two will catch problems
    at least for cases that are exercised by the regression tests.
    
    A small problem with this idea is that readfuncs.c historically has
    discarded location fields, on the reasonable grounds that parse
    locations in a retrieved view are not relevant to the current query.
    But doing that in WRITE_READ_PARSE_PLAN_TREES breaks pg_stat_statements,
    and it could cause problems for future improvements that might try to
    report error locations at runtime.  To fix that, provide a variant
    behavior in readfuncs.c that makes it restore location fields when
    told to.
    
    In passing, const-ify the string arguments of stringToNode and its
    subsidiary functions, just because it annoyed me that they weren't
    const already.
    
    Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us
    d0cfc3d6
nodes.h 19.6 KB