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

Commitf5b78fa

Browse files
committed
Fix AfterTriggerExecute() to pass tg_trigtuple and tg_newtuple as NULLs
rather than pointers to garbage, when calling AFTER STATEMENT triggers.Michael Fuhr
1 parentbc8ac3c commitf5b78fa

File tree

1 file changed

+19
-26
lines changed

1 file changed

+19
-26
lines changed

‎src/backend/commands/trigger.c

Lines changed: 19 additions & 26 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.205 2006/07/31 20:09:00 tgl Exp $
10+
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.206 2006/08/03 16:04:41 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -2090,52 +2090,45 @@ AfterTriggerExecute(AfterTriggerEvent event,
20902090
/*
20912091
* Fetch the required OLD and NEW tuples.
20922092
*/
2093+
LocTriggerData.tg_trigtuple=NULL;
2094+
LocTriggerData.tg_newtuple=NULL;
2095+
LocTriggerData.tg_trigtuplebuf=InvalidBuffer;
2096+
LocTriggerData.tg_newtuplebuf=InvalidBuffer;
2097+
20932098
if (ItemPointerIsValid(&(event->ate_oldctid)))
20942099
{
20952100
ItemPointerCopy(&(event->ate_oldctid),&(oldtuple.t_self));
20962101
if (!heap_fetch(rel,SnapshotAny,&oldtuple,&oldbuffer, false,NULL))
20972102
elog(ERROR,"failed to fetch old tuple for AFTER trigger");
2103+
LocTriggerData.tg_trigtuple=&oldtuple;
2104+
LocTriggerData.tg_trigtuplebuf=oldbuffer;
20982105
}
20992106

21002107
if (ItemPointerIsValid(&(event->ate_newctid)))
21012108
{
21022109
ItemPointerCopy(&(event->ate_newctid),&(newtuple.t_self));
21032110
if (!heap_fetch(rel,SnapshotAny,&newtuple,&newbuffer, false,NULL))
21042111
elog(ERROR,"failed to fetch new tuple for AFTER trigger");
2112+
if (LocTriggerData.tg_trigtuple!=NULL)
2113+
{
2114+
LocTriggerData.tg_newtuple=&newtuple;
2115+
LocTriggerData.tg_newtuplebuf=newbuffer;
2116+
}
2117+
else
2118+
{
2119+
LocTriggerData.tg_trigtuple=&newtuple;
2120+
LocTriggerData.tg_trigtuplebuf=newbuffer;
2121+
}
21052122
}
21062123

21072124
/*
2108-
* Setup the trigger information
2125+
* Setup theremainingtrigger information
21092126
*/
21102127
LocTriggerData.type=T_TriggerData;
21112128
LocTriggerData.tg_event=
21122129
event->ate_event& (TRIGGER_EVENT_OPMASK |TRIGGER_EVENT_ROW);
21132130
LocTriggerData.tg_relation=rel;
21142131

2115-
switch (event->ate_event&TRIGGER_EVENT_OPMASK)
2116-
{
2117-
caseTRIGGER_EVENT_INSERT:
2118-
LocTriggerData.tg_trigtuple=&newtuple;
2119-
LocTriggerData.tg_newtuple=NULL;
2120-
LocTriggerData.tg_trigtuplebuf=newbuffer;
2121-
LocTriggerData.tg_newtuplebuf=InvalidBuffer;
2122-
break;
2123-
2124-
caseTRIGGER_EVENT_UPDATE:
2125-
LocTriggerData.tg_trigtuple=&oldtuple;
2126-
LocTriggerData.tg_newtuple=&newtuple;
2127-
LocTriggerData.tg_trigtuplebuf=oldbuffer;
2128-
LocTriggerData.tg_newtuplebuf=newbuffer;
2129-
break;
2130-
2131-
caseTRIGGER_EVENT_DELETE:
2132-
LocTriggerData.tg_trigtuple=&oldtuple;
2133-
LocTriggerData.tg_newtuple=NULL;
2134-
LocTriggerData.tg_trigtuplebuf=oldbuffer;
2135-
LocTriggerData.tg_newtuplebuf=InvalidBuffer;
2136-
break;
2137-
}
2138-
21392132
MemoryContextReset(per_tuple_context);
21402133

21412134
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp