이 섹션에서는 인터페이스의 하위 수준 세부정보를 설명합니다. 롤 토토 기능으로. 이 정보는 다음 경우에만 필요합니다. C로 롤 토토 함수를 작성합니다. 더 높은 수준의 언어를 사용하는 경우 언어를 사용하면 이러한 세부정보가 자동으로 처리됩니다. 대부분의 경우 글을 쓰기 전에 절차적 언어 사용을 고려해야 합니다. C의 롤 토토. 각 절차적 언어의 문서 해당 언어로 롤 토토를 작성하는 방법을 설명합니다.
롤 토토 기능은 다음을 사용해야 합니다."버전 1"함수 관리자 인터페이스.
롤 토토 관리자가 함수를 호출하면 함수가 호출되지 않습니다. 일반 인수를 전달했지만 a가 전달되었습니다."컨텍스트"a를 가리키는 포인터롤 토토데이터구조. C 함수는 확인할 수 있습니다 롤 토토 관리자로부터 호출되었는지 여부 매크로 실행:
CALLED_AS_TRIGGER(fcinfo)
다음으로 확장:
((fcinfo)-컨텍스트 != NULL && IsA((fcinfo)-컨텍스트, TriggerData))
이것이 true를 반환하면 전송하는 것이 안전합니다.fcinfo-컨텍스트입력하려면롤 토토데이터 *그리고 가리키는 것을 활용롤 토토데이터구조. 기능 필수아님변경롤 토토데이터구조 또는 다음 중 하나 그것이 가리키는 데이터입니다.
구조 TriggerData다음에 정의됨명령/trigger.h:
typedef 구조체 TriggerData
NodeTag 유형;
TriggerEvent tg_event;
관계 tg_relation;
힙튜플 tg_trigtuple;
힙튜플 tg_newtuple;
롤 토토 *tg_trigger;
버퍼 tg_trigtuplebuf;
버퍼 tg_newtuplebuf;
TriggerData;
여기서 구성원은 다음과 같이 정의됩니다:
항상T_TriggerData.
함수가 호출되는 이벤트를 설명합니다. 다음 매크로를 사용하여 조사할 수 있습니다.tg_event:
롤 토토가 실행되기 전에 실행되면 참을 반환합니다. 작동합니다.
다음에 롤 토토가 실행되면 참을 반환합니다. 작동합니다.
행 수준에 대해 롤 토토가 실행되면 true를 반환합니다. 이벤트.
롤 토토가 다음에 대해 실행되면 true를 반환합니다. 명령문 수준 이벤트입니다.
롤 토토가 다음에 의해 실행된 경우 참을 반환합니다.삽입명령.
롤 토토가 다음에 의해 실행된 경우 참을 반환합니다.업데이트명령.
롤 토토가 다음에 의해 실행된 경우 참을 반환합니다.삭제명령.
롤 토토가 다음에 의해 실행된 경우 참을 반환합니다.잘라내기명령.
관계를 설명하는 구조에 대한 포인터 방아쇠가 발사되었습니다. 보세요utils/rel.h이에 대한 자세한 내용은 구조. 가장 흥미로운 점은 다음과 같습니다.tg_relation-rd_att(설명자 관계 튜플) 및tg_relation-rd_rel-relname(관계 이름; 유형이 아닙니다.문자*하지만이름데이터; 사용SPI_getrelname(tg_relation)을 얻으려면문자*사본이 필요한 경우 이름).
롤 토토가 실행된 행에 대한 포인터입니다. 삽입, 업데이트 또는 삭제되는 행입니다. 만약에 이 롤 토토는 다음에 대해 실행되었습니다.삽입또는삭제다음은 다음과 같은 경우 함수에서 반환해야 하는 것입니다. 행을 다른 행으로 바꾸고 싶지 않습니다( 의 경우삽입) 또는 건너뛰기 작동합니다.
롤 토토가 있는 경우 행의 새 버전에 대한 포인터 해고당했습니다.업데이트및NULL만일 그것이라면삽입또는삭제. 이것이 다음과 같은 경우 함수에서 반환해야 하는 것입니다. 이벤트는업데이트그리고 당신은 그렇지 않아요 이 행을 다른 행으로 바꾸거나 건너뛰고 싶습니다. 작동합니다.
유형의 구조에 대한 포인터롤 토토, 정의됨utils/rel.h:
typedef 구조체 롤 토토
이드 tgoid;
char *tgname;
Oid tgfoid;
int16 tgtype;
차트 활성화;
bool tgisinternal;
Oid tgconstrrelid;
Oid tgconstrindid;
Oid tg제약;
bool tgdeferrable;
bool tginitdeferred;
int16 tgnars;
int16 tgnattr;
int16 *tgattr;
char **tgargs;
char *tgqual;
롤 토토;
어디에서tgname이것은 롤 토토 이름,tgnars이것은 인수 수tgargs, 그리고tgargs은 다음의 배열입니다. 에 지정된 인수에 대한 포인터롤 토토 생성문장. 다른 멤버들 내부용으로만 사용됩니다.
다음을 포함하는 버퍼tg_trigttuple또는잘못된 버퍼그러한 튜플이 없거나 디스크 버퍼에 저장되지 않습니다.
다음을 포함하는 버퍼tg_newtuple또는잘못된 버퍼그러한 튜플이 없거나 디스크 버퍼에 저장되지 않습니다.
롤 토토 함수는 다음 중 하나를 반환해야 합니다.힙튜플포인터 또는 aNULL포인터 (아님SQL null 값, 즉 설정되지 않음isNull참). 주의하세요 둘 중 하나를 반환tg_trigttuple또는tg_newtuple, 적절하다면 작업 중인 행을 수정하고 싶지 않습니다.