diff options
author | Stephen Frost <sfrost@snowman.net> | 2013-07-18 17:10:16 -0400 |
---|---|---|
committer | Stephen Frost <sfrost@snowman.net> | 2013-07-18 17:10:16 -0400 |
commit | 4cbe3ac3e86790d05c569de4585e5075a62a9b41 (patch) | |
tree | 8adc929520d4103b4493c0c23bcb7d2b2c2a5a4d /src/include/nodes/parsenodes.h | |
parent | 6f9e39bc9993c18686f0950f9b9657c7c97c7450 (diff) |
WITH CHECK OPTION support for auto-updatable VIEWs
For simple views which are automatically updatable, this patch allows
the user to specify what level of checking should be done on records
being inserted or updated. For 'LOCAL CHECK', new tuples are validated
against the conditionals of the view they are being inserted into, while
for 'CASCADED CHECK' the new tuples are validated against the
conditionals for all views involved (from the top down).
This option is part of the SQL specification.
Dean Rasheed, reviewed by Pavel Stehule
Diffstat (limited to 'src/include/nodes/parsenodes.h')
-rw-r--r-- | src/include/nodes/parsenodes.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 0cefb715055..9415e2c636e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -128,6 +128,8 @@ typedef struct Query List *targetList; /* target list (of TargetEntry) */ + List *withCheckOptions; /* a list of WithCheckOption's */ + List *returningList; /* return-values list (of TargetEntry) */ List *groupClause; /* a list of SortGroupClause's */ @@ -784,6 +786,19 @@ typedef struct RangeTblEntry } RangeTblEntry; /* + * WithCheckOption - + * representation of WITH CHECK OPTION checks to be applied to new tuples + * when inserting/updating an auto-updatable view. + */ +typedef struct WithCheckOption +{ + NodeTag type; + char *viewname; /* name of view that specified the WCO */ + Node *qual; /* constraint qual to check */ + bool cascaded; /* true = WITH CASCADED CHECK OPTION */ +} WithCheckOption; + +/* * SortGroupClause - * representation of ORDER BY, GROUP BY, PARTITION BY, * DISTINCT, DISTINCT ON items @@ -2333,6 +2348,13 @@ typedef struct AlterEnumStmt * Create View Statement * ---------------------- */ +typedef enum ViewCheckOption +{ + NO_CHECK_OPTION, + LOCAL_CHECK_OPTION, + CASCADED_CHECK_OPTION +} ViewCheckOption; + typedef struct ViewStmt { NodeTag type; @@ -2341,6 +2363,7 @@ typedef struct ViewStmt Node *query; /* the SELECT query */ bool replace; /* replace an existing view? */ List *options; /* options from WITH clause */ + ViewCheckOption withCheckOption; /* WITH CHECK OPTION */ } ViewStmt; /* ---------------------- |