postgres.git / summary / log / commit / refs

commit    2b47e29f2081f7b2bbe99d240bdd08f63438357e
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Feb 15 19:44:00 2017 +0000

    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


src/backend/parser/gram.y | 8 ++++++-- 1 file 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; [parent: 660e457f5b1c]