Am Mittwoch, 24. Mai 2006 20:42 schrieb Tom Lane:
> Peter Eisentraut <[EMAIL PROTECTED]> writes:
> > I have spent some time figuring out how to resolve the parsing conflicts
> > in Bernd Helmle's updatable views patch.  The problem has now been
> > reduced to specifically this situation:
>
> Could we see the proposed patches for gram.y?

Here it is.

$ make -W gram.y gram.c
bison -y -d  gram.y
conflicts: 4 shift/reduce

These are basically for instances of the same problem.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/
--- /home/pei/devel/pg82/pgsql/src/backend/parser/gram.y	2006-05-22 09:05:13.000000000 +0200
+++ gram.y	2006-05-26 09:41:21.000000000 +0200
@@ -339,7 +339,8 @@
 %type <list>	constraints_set_list
 %type <boolean> constraints_set_mode
 %type <str>		OptTableSpace OptConsTableSpace OptTableSpaceOwner
-
+%type <list>    opt_check_option
+%type <node>    opt_check_mode
 
 /*
  * If you make any token changes, update the keyword table in
@@ -356,7 +357,7 @@
 	BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
 	BOOLEAN_P BOTH BY
 
-	CACHE CALLED CASCADE CASE CAST CHAIN CHAR_P
+	CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P
 	CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
 	CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
 	COMMITTED CONNECTION CONSTRAINT CONSTRAINTS CONVERSION_P CONVERT COPY CREATE CREATEDB
@@ -4618,12 +4619,12 @@
 /*****************************************************************************
  *
  *	QUERY:
- *		CREATE [ OR REPLACE ] [ TEMP ] VIEW <viewname> '('target-list ')' AS <query>
+ *		CREATE [ OR REPLACE ] [ TEMP ] VIEW <viewname> '('target-list ')' AS <query> [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
  *
  *****************************************************************************/
 
 ViewStmt: CREATE OptTemp VIEW qualified_name opt_column_list
-				AS SelectStmt
+				AS SelectStmt opt_check_option
 				{
 					ViewStmt *n = makeNode(ViewStmt);
 					n->replace = false;
@@ -4631,10 +4632,11 @@
 					n->view->istemp = $2;
 					n->aliases = $5;
 					n->query = (Query *) $7;
+					n->options = (List *) $8;
 					$$ = (Node *) n;
 				}
 		| CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list
-				AS SelectStmt
+				AS SelectStmt opt_check_option
 				{
 					ViewStmt *n = makeNode(ViewStmt);
 					n->replace = true;
@@ -4642,10 +4644,25 @@
 					n->view->istemp = $4;
 					n->aliases = $7;
 					n->query = (Query *) $9;
+					n->options = (List *) $10;
 					$$ = (Node *) n;
 				}
 		;
 
+opt_check_option:
+        WITH opt_check_mode CHECK OPTION 
+        		{ 
+					$$ = list_make1( $2 );
+                }
+		| /* EMPTY */ { $$ = NIL; }
+        ;
+
+opt_check_mode:
+        CASCADED { $$ = (Node *)makeString("cascaded"); }
+        | LOCAL { $$ = (Node *)makeString("local"); }
+        | /* EMPTY */ { $$ = (Node *)makeString("cascaded"); }
+		;
+
 /*****************************************************************************
  *
  *		QUERY:
@@ -8500,7 +8517,6 @@
 			| VARYING
 			| VIEW
 			| VOLATILE
-			| WITH
 			| WITHOUT
 			| WORK
 			| WRITE
@@ -8551,8 +8567,6 @@
 			| SETOF
 			| SMALLINT
 			| SUBSTRING
-			| TIME
-			| TIMESTAMP
 			| TREAT
 			| TRIM
 			| VARCHAR
@@ -8608,6 +8622,7 @@
 			| ASC
 			| ASYMMETRIC
 			| BOTH
+			| CASCADED
 			| CASE
 			| CAST
 			| CHECK
@@ -8662,6 +8677,8 @@
 			| SYMMETRIC
 			| TABLE
 			| THEN
+			| TIME
+			| TIMESTAMP
 			| TO
 			| TRAILING
 			| TRUE_P
@@ -8671,6 +8688,7 @@
 			| USING
 			| WHEN
 			| WHERE
+			| WITH
 		;
 
 
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to