diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0e8cd30326e15fc89f14e188e07ed3cbe45c746b..383008fc56f9ad45adec2adecd1142d9d5e47843 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10851,10 +10851,15 @@ func_expr: func_name '(' ')' over_clause * of type-input conversion functions. (As of PG 7.3 * that is actually possible, but not clear that we want * to rely on it.) + * + * The token location is attached to the run-time + * typecast, not to the Const, for the convenience of + * pg_stat_statements (which doesn't want these constructs + * to appear to be replaceable constants). */ Node *n; - n = makeStringConstCast("now", @1, SystemTypeName("text")); - $$ = makeTypeCast(n, SystemTypeName("date"), -1); + n = makeStringConstCast("now", -1, SystemTypeName("text")); + $$ = makeTypeCast(n, SystemTypeName("date"), @1); } | CURRENT_TIME { @@ -10863,8 +10868,8 @@ func_expr: func_name '(' ')' over_clause * See comments for CURRENT_DATE. */ Node *n; - n = makeStringConstCast("now", @1, SystemTypeName("text")); - $$ = makeTypeCast(n, SystemTypeName("timetz"), -1); + n = makeStringConstCast("now", -1, SystemTypeName("text")); + $$ = makeTypeCast(n, SystemTypeName("timetz"), @1); } | CURRENT_TIME '(' Iconst ')' { @@ -10874,10 +10879,10 @@ func_expr: func_name '(' ')' over_clause */ Node *n; TypeName *d; - n = makeStringConstCast("now", @1, SystemTypeName("text")); + n = makeStringConstCast("now", -1, SystemTypeName("text")); d = SystemTypeName("timetz"); d->typmods = list_make1(makeIntConst($3, @3)); - $$ = makeTypeCast(n, d, -1); + $$ = makeTypeCast(n, d, @1); } | CURRENT_TIMESTAMP { @@ -10904,10 +10909,10 @@ func_expr: func_name '(' ')' over_clause */ Node *n; TypeName *d; - n = makeStringConstCast("now", @1, SystemTypeName("text")); + n = makeStringConstCast("now", -1, SystemTypeName("text")); d = SystemTypeName("timestamptz"); d->typmods = list_make1(makeIntConst($3, @3)); - $$ = makeTypeCast(n, d, -1); + $$ = makeTypeCast(n, d, @1); } | LOCALTIME { @@ -10916,8 +10921,8 @@ func_expr: func_name '(' ')' over_clause * See comments for CURRENT_DATE. */ Node *n; - n = makeStringConstCast("now", @1, SystemTypeName("text")); - $$ = makeTypeCast((Node *)n, SystemTypeName("time"), -1); + n = makeStringConstCast("now", -1, SystemTypeName("text")); + $$ = makeTypeCast((Node *)n, SystemTypeName("time"), @1); } | LOCALTIME '(' Iconst ')' { @@ -10927,10 +10932,10 @@ func_expr: func_name '(' ')' over_clause */ Node *n; TypeName *d; - n = makeStringConstCast("now", @1, SystemTypeName("text")); + n = makeStringConstCast("now", -1, SystemTypeName("text")); d = SystemTypeName("time"); d->typmods = list_make1(makeIntConst($3, @3)); - $$ = makeTypeCast((Node *)n, d, -1); + $$ = makeTypeCast((Node *)n, d, @1); } | LOCALTIMESTAMP { @@ -10939,8 +10944,8 @@ func_expr: func_name '(' ')' over_clause * See comments for CURRENT_DATE. */ Node *n; - n = makeStringConstCast("now", @1, SystemTypeName("text")); - $$ = makeTypeCast(n, SystemTypeName("timestamp"), -1); + n = makeStringConstCast("now", -1, SystemTypeName("text")); + $$ = makeTypeCast(n, SystemTypeName("timestamp"), @1); } | LOCALTIMESTAMP '(' Iconst ')' { @@ -10950,10 +10955,10 @@ func_expr: func_name '(' ')' over_clause */ Node *n; TypeName *d; - n = makeStringConstCast("now", @1, SystemTypeName("text")); + n = makeStringConstCast("now", -1, SystemTypeName("text")); d = SystemTypeName("timestamp"); d->typmods = list_make1(makeIntConst($3, @3)); - $$ = makeTypeCast(n, d, -1); + $$ = makeTypeCast(n, d, @1); } | CURRENT_ROLE {