Skip to content
Snippets Groups Projects
Commit 443c08a1 authored by Jan Wieck's avatar Jan Wieck
Browse files

Fixed shift/reduce conflict

SelectStmt and CursorStmt tried to parse FOR UPDATE ... / FOR READ ONLY.
Cursor now checks that it is read only by looking at forUpdate of Query.
SelectStmt handles FOR READ ONLY too.

Jan
parent 1f82f1de
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.78 1999/05/19 17:53:10 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.79 1999/05/20 12:12:55 wieck Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -196,7 +196,7 @@ Oid param_type(int t); /* used in parse_expr.c */ ...@@ -196,7 +196,7 @@ Oid param_type(int t); /* used in parse_expr.c */
%type <boolean> opt_inh_star, opt_binary, opt_instead, opt_with_copy, %type <boolean> opt_inh_star, opt_binary, opt_instead, opt_with_copy,
index_opt_unique, opt_verbose, opt_analyze index_opt_unique, opt_verbose, opt_analyze
%type <boolean> cursor_clause, opt_cursor, opt_readonly, opt_of %type <boolean> opt_cursor
%type <ival> copy_dirn, def_type, opt_direction, remove_type, %type <ival> copy_dirn, def_type, opt_direction, remove_type,
opt_column, event opt_column, event
...@@ -2646,7 +2646,7 @@ UpdateStmt: UPDATE relation_name ...@@ -2646,7 +2646,7 @@ UpdateStmt: UPDATE relation_name
* *
*****************************************************************************/ *****************************************************************************/
/***S*I***/ /***S*I***/
CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt cursor_clause CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt
{ {
SelectStmt *n; SelectStmt *n;
...@@ -2664,6 +2664,9 @@ CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt cursor_clause ...@@ -2664,6 +2664,9 @@ CursorStmt: DECLARE name opt_cursor CURSOR FOR SelectStmt cursor_clause
n->portalname = $2; n->portalname = $2;
n->binary = $3; n->binary = $3;
if (n->forUpdate != NULL)
elog(ERROR,"DECLARE/UPDATE not supported;"
" Cursors must be READ ONLY.");
$$ = (Node *)n; $$ = (Node *)n;
} }
; ;
...@@ -2675,24 +2678,6 @@ opt_cursor: BINARY { $$ = TRUE; } ...@@ -2675,24 +2678,6 @@ opt_cursor: BINARY { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; } | /*EMPTY*/ { $$ = FALSE; }
; ;
cursor_clause: FOR opt_readonly { $$ = $2; }
| /*EMPTY*/ { $$ = FALSE; }
;
opt_readonly: READ ONLY { $$ = TRUE; }
| UPDATE opt_of
{
elog(ERROR,"DECLARE/UPDATE not supported;"
" Cursors must be READ ONLY.");
$$ = FALSE;
}
;
opt_of: OF columnList
{
$$ = FALSE;
}
/***************************************************************************** /*****************************************************************************
* *
* QUERY: * QUERY:
...@@ -3007,6 +2992,7 @@ having_clause: HAVING a_expr ...@@ -3007,6 +2992,7 @@ having_clause: HAVING a_expr
; ;
for_update_clause: FOR UPDATE update_list { $$ = $3; } for_update_clause: FOR UPDATE update_list { $$ = $3; }
| FOR READ ONLY { $$ = NULL; }
| /* EMPTY */ { $$ = NULL; } | /* EMPTY */ { $$ = NULL; }
; ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment