Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf62901c

Browse files
committed
Minor efficiency improvements in keeping track of trigger deferred
status. In particular, I see no reason for deferredTriggerCheckStateto make an explicit entry to note that a particular trigger has itsdefault state --- that just clutters a list that should normally beempty or very short. I have plans to revise this module much moreheavily, but this is a simple separable improvement.
1 parentb1c4bda commitf62901c

File tree

1 file changed

+28
-37
lines changed

1 file changed

+28
-37
lines changed

‎src/backend/commands/trigger.c

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.170 2004/09/07 21:48:30 tgl Exp $
10+
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.171 2004/09/08 23:47:58 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1772,7 +1772,7 @@ static DeferredTriggerState DeferredTriggerStateAddItem(DeferredTriggerState sta
17721772
staticbool
17731773
deferredTriggerCheckState(Oidtgoid,int32itemstate)
17741774
{
1775-
booltgisdeferred;
1775+
DeferredTriggerStatestate=deferredTriggers->state;
17761776
inti;
17771777

17781778
/*
@@ -1783,32 +1783,24 @@ deferredTriggerCheckState(Oid tgoid, int32 itemstate)
17831783
return false;
17841784

17851785
/*
1786-
*Lookup ifwe know an individual state for this trigger
1786+
*Check ifSET CONSTRAINTS has been executed for thisspecifictrigger.
17871787
*/
1788-
for (i=0;i<deferredTriggers->state->numstates;i++)
1788+
for (i=0;i<state->numstates;i++)
17891789
{
1790-
if (deferredTriggers->state->trigstates[i].dts_tgoid==tgoid)
1791-
returndeferredTriggers->state->trigstates[i].dts_tgisdeferred;
1790+
if (state->trigstates[i].dts_tgoid==tgoid)
1791+
returnstate->trigstates[i].dts_tgisdeferred;
17921792
}
17931793

17941794
/*
1795-
* No individual state known - so if the user issued a SET CONSTRAINT
1796-
* ALL ..., we return that instead of the triggers default state.
1795+
* Check if SET CONSTRAINTS ALL has been executed; if so use that.
17971796
*/
1798-
if (deferredTriggers->state->all_isset)
1799-
returndeferredTriggers->state->all_isdeferred;
1797+
if (state->all_isset)
1798+
returnstate->all_isdeferred;
18001799

18011800
/*
1802-
* No ALL state known either, remember the default state as the
1803-
* current and return that. (XXX why do we bother making a state
1804-
* entry?)
1801+
* Otherwise return the default state for the trigger.
18051802
*/
1806-
tgisdeferred= ((itemstate&TRIGGER_DEFERRED_INITDEFERRED)!=0);
1807-
deferredTriggers->state=
1808-
DeferredTriggerStateAddItem(deferredTriggers->state,
1809-
tgoid,tgisdeferred);
1810-
1811-
returntgisdeferred;
1803+
return ((itemstate&TRIGGER_DEFERRED_INITDEFERRED)!=0);
18121804
}
18131805

18141806

@@ -2486,8 +2478,7 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
24862478
if (stmt->constraints==NIL)
24872479
{
24882480
/*
2489-
* Drop all per-transaction information about individual trigger
2490-
* states.
2481+
* Forget any previous SET CONSTRAINTS commands in this transaction.
24912482
*/
24922483
deferredTriggers->state->numstates=0;
24932484

@@ -2545,23 +2536,22 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
25452536
while (HeapTupleIsValid(htup=systable_getnext(tgscan)))
25462537
{
25472538
Form_pg_triggerpg_trigger= (Form_pg_trigger)GETSTRUCT(htup);
2548-
Oidconstr_oid;
25492539

25502540
/*
25512541
* If we found some, check that they fit the deferrability
25522542
* but skip ON <event> RESTRICT ones, since they are
25532543
* silently never deferrable.
25542544
*/
2555-
if (stmt->deferred&& !pg_trigger->tgdeferrable&&
2556-
pg_trigger->tgfoid!=F_RI_FKEY_RESTRICT_UPD&&
2545+
if (pg_trigger->tgfoid!=F_RI_FKEY_RESTRICT_UPD&&
25572546
pg_trigger->tgfoid!=F_RI_FKEY_RESTRICT_DEL)
2558-
ereport(ERROR,
2559-
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
2560-
errmsg("constraint \"%s\" is not deferrable",
2561-
cname)));
2562-
2563-
constr_oid=HeapTupleGetOid(htup);
2564-
oidlist=lappend_oid(oidlist,constr_oid);
2547+
{
2548+
if (stmt->deferred&& !pg_trigger->tgdeferrable)
2549+
ereport(ERROR,
2550+
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
2551+
errmsg("constraint \"%s\" is not deferrable",
2552+
cname)));
2553+
oidlist=lappend_oid(oidlist,HeapTupleGetOid(htup));
2554+
}
25652555
found= true;
25662556
}
25672557

@@ -2573,7 +2563,8 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
25732563
if (!found)
25742564
ereport(ERROR,
25752565
(errcode(ERRCODE_UNDEFINED_OBJECT),
2576-
errmsg("constraint \"%s\" does not exist",cname)));
2566+
errmsg("constraint \"%s\" does not exist",
2567+
cname)));
25772568
}
25782569
heap_close(tgrel,AccessShareLock);
25792570

@@ -2584,23 +2575,23 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
25842575
foreach(l,oidlist)
25852576
{
25862577
Oidtgoid=lfirst_oid(l);
2578+
DeferredTriggerStatestate=deferredTriggers->state;
25872579
boolfound= false;
25882580
inti;
25892581

2590-
for (i=0;i<deferredTriggers->state->numstates;i++)
2582+
for (i=0;i<state->numstates;i++)
25912583
{
2592-
if (deferredTriggers->state->trigstates[i].dts_tgoid==tgoid)
2584+
if (state->trigstates[i].dts_tgoid==tgoid)
25932585
{
2594-
deferredTriggers->state->trigstates[i].dts_tgisdeferred=stmt->deferred;
2586+
state->trigstates[i].dts_tgisdeferred=stmt->deferred;
25952587
found= true;
25962588
break;
25972589
}
25982590
}
25992591
if (!found)
26002592
{
26012593
deferredTriggers->state=
2602-
DeferredTriggerStateAddItem(deferredTriggers->state,
2603-
tgoid,stmt->deferred);
2594+
DeferredTriggerStateAddItem(state,tgoid,stmt->deferred);
26042595
}
26052596
}
26062597
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp