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