aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-02-15 14:44:00 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2017-02-15 14:44:00 -0500
commit2b47e29f2081f7b2bbe99d240bdd08f63438357e (patch)
tree6487c97c262e499e6c05da3abc9dd391669692e9
parent660e457f5b1c4647ad2d41496840f793c87d9208 (diff)
downloadpostgresql-2b47e29f2081f7b2bbe99d240bdd08f63438357e.tar.gz
postgresql-2b47e29f2081f7b2bbe99d240bdd08f63438357e.zip
Fix YA unwanted behavioral difference with operator_precedence_warning.
Jeff Janes noted that the error cursor position shown for some errors would vary when operator_precedence_warning is turned on. We'd prefer that option to have no undocumented effects, so this isn't desirable. To fix, make sure that an AEXPR_PAREN node has the same exprLocation as its child node. (Note: it would be a little cheaper to use @2 here instead of an exprLocation call, but there are cases where that wouldn't produce the identical answer, so don't do it like that.) Back-patch to 9.5 where this feature was introduced. Discussion: https://postgr.es/m/CAMkU=1ykK+VhhcQ4Ky8KBo9FoaUJH3f3rDQB8TkTXi-ZsBRUkQ@mail.gmail.com
-rw-r--r--src/backend/parser/gram.y8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 3f1620b574a..411dbe2a6d2 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11958,7 +11958,10 @@ c_expr: columnref { $$ = $1; }
* AEXPR_PAREN nodes wrapping all explicitly
* parenthesized subexpressions; this prevents bogus
* warnings from being issued when the ordering has
- * been forced by parentheses.
+ * been forced by parentheses. Take care that an
+ * AEXPR_PAREN node has the same exprLocation as its
+ * child, so as not to cause surprising changes in
+ * error cursor positioning.
*
* In principle we should not be relying on a GUC to
* decide whether to insert AEXPR_PAREN nodes.
@@ -11967,7 +11970,8 @@ c_expr: columnref { $$ = $1; }
* we'd just as soon not waste cycles on dummy parse
* nodes if we don't have to.
*/
- $$ = (Node *) makeA_Expr(AEXPR_PAREN, NIL, $2, NULL, @1);
+ $$ = (Node *) makeA_Expr(AEXPR_PAREN, NIL, $2, NULL,
+ exprLocation($2));
}
else
$$ = $2;