• Tom Lane's avatar
    Tweak parse location assignment for CURRENT_DATE and related constructs. · 69c7a983
    Tom Lane authored
    All these constructs generate parse trees consisting of a Const and
    a run-time type coercion (perhaps a FuncExpr or a CoerceViaIO).  Modify
    the raw parse output so that we end up with the original token's location
    attached to the type coercion node while the Const has location -1;
    before, it was the other way around.  This makes no difference in terms
    of what exprLocation() will say about the parse tree as a whole, so it
    should not have any user-visible impact.  The point of changing it is that
    we do not want contrib/pg_stat_statements to treat these constructs as
    replaceable constants.  It will do the right thing if the Const has
    location -1 rather than a valid location.
    
    This is a pretty ugly hack, but then this code is ugly already; we should
    someday replace this translation with special-purpose parse node(s) that
    would allow ruleutils.c to reconstruct the original query text.
    
    (See also commit 5d3fcc4c, which also
    hacked location assignment rules for the benefit of pg_stat_statements.)
    
    Back-patch to 9.2 where pg_stat_statements grew the ability to recognize
    replaceable constants.
    
    Kyotaro Horiguchi
    69c7a983
gram.y 365 KB