위에서 언급한 바와 같이 윈 토토에 의해 함수가 호출될 때 관리자, 구조 TriggerData *CurrentTriggerData는 NULL이 아니며 초기화되었습니다. 따라서 CurrentTriggerData를 확인하는 것이 좋습니다. 처음에는 NULL이고 가져온 직후에 NULL로 설정됩니다. 다른 곳에서 윈 토토 함수를 호출하는 것을 방지하기 위한 정보 윈 토토 관리자.
구조 TriggerData는 다음에 정의되어 있습니다. src/include/commands/trigger.h:
typedef 구조체 TriggerData
TriggerEvent tg_event;
관계 tg_relation;
힙튜플 tg_trigtuple;
힙튜플 tg_newtuple;
윈 토토 *tg_trigger;
TriggerData;여기서 구성원은 다음과 같이 정의됩니다:함수가 호출되는 이벤트를 설명합니다. 당신 다음 매크로를 사용하여 검사할 수 있습니다.tg_event:
이전에 윈 토토가 실행되면 TRUE를 반환합니다.
이후에 윈 토토가 실행되면 TRUE를 반환합니다.
ROW 수준 이벤트에 대해 윈 토토가 실행되면 TRUE를 반환합니다.
STATEMENT 수준에 대해 윈 토토가 실행되면 TRUE를 반환합니다. 이벤트.
INSERT에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
DELETE에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
업데이트에 의해 윈 토토가 실행되면 TRUE를 반환합니다.
은 윈 토토된 관계를 설명하는 구조에 대한 포인터입니다. 이에 대한 자세한 내용은 src/include/utils/rel.h를 참조하세요. 구조. 가장 흥미로운 것은 tg_relation-rd_att입니다. (관계 튜플의 설명자) 및 tg_relation-rd_rel-relname (관계 이름. 이것은 char*가 아니라 NameData입니다. SPI_getrelname(tg_relation)을 사용하여 가져옵니다. 이름 사본이 필요한 경우 char*).
은 윈 토토가 실행되는 튜플에 대한 포인터입니다. 이는 삽입되는(INSERT인 경우) 튜플이고, 삭제되는(인 경우) DELETE) 또는 업데이트되었습니다(업데이트된 경우). INSERT/DELETE인 경우에는 다음과 같습니다. 교체하고 싶지 않은 경우 Executor에 반환할 내용 다른 것으로 튜플하거나(INSERT) 작업을 건너뜁니다.
업데이트 및 NULL인 경우 새 버전의 튜플에 대한 포인터입니다. INSERT 또는 DELETE용인 경우. 이것이 당신이 할 일입니다 업데이트하고 이를 교체하고 싶지 않은 경우 Executor로 돌아갑니다. 다른 것과 튜플하거나 작업을 건너뜁니다.
는 다음에 정의된 Trigger 구조에 대한 포인터입니다. src/include/utils/rel.h:
typedef 구조체 윈 토토
이드 tgoid;
char *tgname;
Oid tgfoid;
FmgrInfo tgfunc;
int16 tgtype;
bool tg활성화됨;
bool tgisconstraint;
bool tgdeferrable;
bool tginitdeferred;
int16 tgnars;
int16 tgattr[FUNC_MAX_ARGS];
char **tgargs;
방아쇠;여기서 tgname은 윈 토토의 이름이고, tgnargs는 윈 토토의 수입니다.
tgargs의 인수, tgargs는 tgargs에 대한 포인터 배열입니다.
CREATE TRIGGER 문에 지정된 인수입니다. 다른 회원
내부용으로만 사용됩니다.