1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-02 04:21:28 +03:00

Adjust grammar for plpgsql's OPEN command so that a cursor can be

OPENed on non-SELECT commands such as EXPLAIN or SHOW (anything that
returns tuples is allowed).  This flexibility already existed for
bound cursors, but OPEN was artificially restricting what it would
take.  Per a gripe some months back.
This commit is contained in:
Tom Lane
2005-04-05 18:05:46 +00:00
parent fd97cf4df0
commit 726220fb9f
2 changed files with 18 additions and 30 deletions

View File

@@ -4,7 +4,7 @@
* procedural language
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.67 2005/04/05 06:22:16 tgl Exp $
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.68 2005/04/05 18:05:46 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -1276,7 +1276,6 @@ stmt_open : K_OPEN lno cursor_varptr
if ($3->cursor_explicit_expr == NULL)
{
tok = yylex();
if (tok != K_FOR)
{
plpgsql_error_lineno = $2;
@@ -1288,26 +1287,15 @@ stmt_open : K_OPEN lno cursor_varptr
}
tok = yylex();
switch (tok)
if (tok == K_EXECUTE)
{
case K_SELECT:
case '(':
plpgsql_push_back_token(tok);
new->query = read_sql_stmt("");
break;
case K_EXECUTE:
new->dynquery = read_sql_stmt("SELECT ");
break;
default:
plpgsql_error_lineno = $2;
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("syntax error at \"%s\"",
yytext)));
new->dynquery = read_sql_stmt("SELECT ");
}
else
{
plpgsql_push_back_token(tok);
new->query = read_sql_stmt("");
}
}
else
{
@@ -1316,7 +1304,6 @@ stmt_open : K_OPEN lno cursor_varptr
char *cp;
tok = yylex();
if (tok != '(')
{
plpgsql_error_lineno = plpgsql_scanner_lineno();
@@ -1369,7 +1356,6 @@ stmt_open : K_OPEN lno cursor_varptr
else
{
tok = yylex();
if (tok == '(')
{
plpgsql_error_lineno = plpgsql_scanner_lineno();