summaryrefslogtreecommitdiff
path: root/src/pl
diff options
context:
space:
mode:
authorTom Lane2025-03-03 23:00:05 +0000
committerTom Lane2025-03-03 23:00:13 +0000
commit246dedc5d028800b393920184e5e6319c6805253 (patch)
tree0339ce27b43220e3eb7f18adbbb417d61b5bc935 /src/pl
parentb6904afae40d94c2f34bc3c94aee1cdbe0bcfbe9 (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.y13
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;