postgres.git / summary / log / commit / refs
commit b70b78656b352cb4d00655b5ad653353e7d95e55
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat Jul 20 19:55:38 2002 +0000
Tweak CreateTrigger() so that the OID used in the name of an
RI_ConstraintTrigger is the same OID assigned to the pg_trigger row.
This reduces consumption of OIDs and may ease debugging.
src/backend/commands/trigger.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index 4c2ee626fe0..353d684d903 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.122 2002/07/20 05:16:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.123 2002/07/20 19:55:38 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -50,6 +50,14 @@ static void DeferredTriggerExecute(DeferredTriggerEvent event, int itemno,
MemoryContext per_tuple_context);
+/*
+ * Create a trigger. Returns the OID of the created trigger.
+ *
+ * forConstraint, if true, says that this trigger is being created to
+ * implement a constraint. The caller will then be expected to make
+ * a pg_depend entry linking the trigger to that constraint (and thereby
+ * to the owning relation(s)).
+ */
Oid
CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
{
@@ -94,6 +102,12 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
if (aclresult != ACLCHECK_OK)
aclcheck_error(aclresult, RelationGetRelationName(rel));
+ /*
+ * Generate the trigger's OID now, so that we can use it in the name
+ * if needed.
+ */
+ trigoid = newoid();
+
/*
* If trigger is an RI constraint, use specified trigger name as
* constraint name and build a unique trigger name instead.
@@ -103,7 +117,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
if (stmt->isconstraint)
{
snprintf(constrtrigname, sizeof(constrtrigname),
- "RI_ConstraintTrigger_%u", newoid());
+ "RI_ConstraintTrigger_%u", trigoid);
trigname = constrtrigname;
constrname = stmt->trigname;
}
@@ -279,10 +293,14 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
tuple = heap_formtuple(tgrel->rd_att, values, nulls);
+ /* force tuple to have the desired OID */
+ AssertTupleDescHasOid(tgrel->rd_att);
+ HeapTupleSetOid(tuple, trigoid);
+
/*
* Insert tuple into pg_trigger.
*/
- trigoid = simple_heap_insert(tgrel, tuple);
+ simple_heap_insert(tgrel, tuple);
CatalogOpenIndices(Num_pg_trigger_indices, Name_pg_trigger_indices, idescs);
CatalogIndexInsert(idescs, Num_pg_trigger_indices, tgrel, tuple);
[parent: 17b28503d0d6]