]> granicus.if.org Git - postgresql/commit
Tweak parse location assignment for CURRENT_DATE and related constructs.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 21 Jan 2014 21:34:35 +0000 (16:34 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 21 Jan 2014 21:34:35 +0000 (16:34 -0500)
commit27ab1eb7e72924bc464d3fd1fd6c380e8ea34ac2
treecf34f88eec59d0785a17456205c4cc5f3406af1d
parent1fe06595ab9124e47a6d7935e1796e7c31c03c1f
Tweak parse location assignment for CURRENT_DATE and related constructs.

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 5d3fcc4c2e137417ef470d604fee5e452b22f6a7, 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
src/backend/parser/gram.y