diff options
| author | Tom Lane | 2025-03-03 23:00:05 +0000 |
|---|---|---|
| committer | Tom Lane | 2025-03-03 23:00:13 +0000 |
| commit | 246dedc5d028800b393920184e5e6319c6805253 (patch) | |
| tree | 0339ce27b43220e3eb7f18adbbb417d61b5bc935 /src/pl | |
| parent | b6904afae40d94c2f34bc3c94aee1cdbe0bcfbe9 (diff) | |
Allow => syntax for named cursor arguments in plpgsql.
We've traditionally accepted "name := value" syntax for
cursor arguments in plpgsql. But it turns out that the
equivalent statements in Oracle use "name => value".
Since we accept both forms of punctuation for function
arguments, it makes sense to do the same here.
Author: Pavel Stehule <pavel.stehule@gmail.com>
Reviewed-by: Gilles Darold <gilles@darold.net>
Discussion: https://postgr.es/m/CAFj8pRA3d0ARQEMbABa1n6q25AUdNmyO8aGs56XNf9pD4sRMjQ@mail.gmail.com
Diffstat (limited to 'src/pl')
| -rw-r--r-- | src/pl/plpgsql/src/pl_gram.y | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 8048e040f81..5612e66d023 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -3955,9 +3955,12 @@ read_cursor_args(PLpgSQL_var *cursor, int until, YYSTYPE *yylvalp, YYLTYPE *yyll tok2; int arglocation; - /* Check if it's a named parameter: "param := value" */ + /* + * Check if it's a named parameter: "param := value" + * or "param => value" + */ plpgsql_peek2(&tok1, &tok2, &arglocation, NULL, yyscanner); - if (tok1 == IDENT && tok2 == COLON_EQUALS) + if (tok1 == IDENT && (tok2 == COLON_EQUALS || tok2 == EQUALS_GREATER)) { char *argname; IdentifierLookup save_IdentifierLookup; @@ -3983,11 +3986,11 @@ read_cursor_args(PLpgSQL_var *cursor, int until, YYSTYPE *yylvalp, YYLTYPE *yyll parser_errposition(*yyllocp))); /* - * Eat the ":=". We already peeked, so the error should never - * happen. + * Eat the ":=" or "=>". We already peeked, so the error should + * never happen. */ tok2 = yylex(yylvalp, yyllocp, yyscanner); - if (tok2 != COLON_EQUALS) + if (tok2 != COLON_EQUALS && tok2 != EQUALS_GREATER) yyerror(yyllocp, NULL, yyscanner, "syntax error"); any_named = true; |
