Fixed shift/reduce conflict
authorJan Wieck <JanWieck@Yahoo.com>
Thu, 20 May 1999 12:12:55 +0000 (12:12 +0000)
committerJan Wieck <JanWieck@Yahoo.com>
Thu, 20 May 1999 12:12:55 +0000 (12:12 +0000)
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

src/backend/parser/gram.y

index 3f4686888e56e55bc1d0bcbac69c1645a2642a4f..e96bf583f0627d1f1f5f8668a2c1bcb5a42bd4d7 100644 (file)
@@ -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,
                                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,
                                opt_column, event
@@ -2646,7 +2646,7 @@ UpdateStmt:  UPDATE relation_name
  *
  *****************************************************************************/
 /***S*I***/
-CursorStmt:  DECLARE name opt_cursor CURSOR FOR SelectStmt cursor_clause
+CursorStmt:  DECLARE name opt_cursor CURSOR FOR SelectStmt
                                {
                                        SelectStmt *n;
   
@@ -2664,6 +2664,9 @@ CursorStmt:  DECLARE name opt_cursor CURSOR FOR SelectStmt cursor_clause
 
                                        n->portalname = $2;
                                        n->binary = $3;
+                                       if (n->forUpdate != NULL)
+                                                       elog(ERROR,"DECLARE/UPDATE not supported;"
+                                                                               " Cursors must be READ ONLY.");
                                        $$ = (Node *)n;
                                }
                ;
@@ -2675,24 +2678,6 @@ opt_cursor:  BINARY                                              { $$ = TRUE; }
                | /*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:
@@ -3007,6 +2992,7 @@ having_clause:  HAVING a_expr
                ;
 
 for_update_clause:  FOR UPDATE update_list             { $$ = $3; }
+               | FOR READ ONLY                                                 { $$ = NULL; }
                | /* EMPTY */                                                   { $$ = NULL; }
                ;