summaryrefslogtreecommitdiff
path: root/src/backend/catalog/pg_constraint.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-07-16 05:53:34 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-07-16 05:53:34 +0000
commit30ec31604d56388b7b05ecf48cd8fa56c18f181b (patch)
treebc8ff344e3814846bc71b0693144c2d9e73e0060 /src/backend/catalog/pg_constraint.c
parent1e07ab78cc99520c4c300a3230689521b78f4c16 (diff)
Add code to extract dependencies from an expression tree, and use it
to build dependencies for rules, constraint expressions, and default expressions. Repair some problems in the original design of recursiveDeletion() exposed by more complex dependency sets. Fix regression tests that were deleting things in illegal sequences.
Diffstat (limited to 'src/backend/catalog/pg_constraint.c')
-rw-r--r--src/backend/catalog/pg_constraint.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c
index 47712dde1d6..41580f2c53f 100644
--- a/src/backend/catalog/pg_constraint.c
+++ b/src/backend/catalog/pg_constraint.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_constraint.c,v 1.1 2002/07/12 18:43:15 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_constraint.c,v 1.2 2002/07/16 05:53:33 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -52,6 +52,7 @@ CreateConstraintEntry(const char *constraintName,
char foreignUpdateType,
char foreignDeleteType,
char foreignMatchType,
+ Node *conExpr,
const char *conBin,
const char *conSrc)
{
@@ -227,6 +228,24 @@ CreateConstraintEntry(const char *constraintName,
}
}
+ if (conExpr != NULL)
+ {
+ /*
+ * Register dependencies from constraint to objects mentioned
+ * in CHECK expression. We gin up a rather bogus rangetable
+ * list to handle any Vars in the constraint.
+ */
+ RangeTblEntry rte;
+
+ MemSet(&rte, 0, sizeof(rte));
+ rte.type = T_RangeTblEntry;
+ rte.rtekind = RTE_RELATION;
+ rte.relid = relId;
+
+ recordDependencyOnExpr(&conobject, conExpr, makeList1(&rte),
+ DEPENDENCY_NORMAL);
+ }
+
return conOid;
}