����Ǥϥȥꥬ�ؿ��ȤΥ��ե������ˤĤ������٥�ʾܺ٤��������ޤ��� ���ξ����C����ǥȥꥬ�ؿ������������ˤΤ�ɬ�פǤ��� ���٥�ʸ���Ǻ�������С����������ܺ٤�����˰��äƤ�館�ޤ��� �Ƽ�³�������ʸ��ǡ����θ������Ѥ����ȥꥬ����κ�����ˡ���������ޤ���
�ȥꥬ�ؿ���"version 1"�ؿ��ޥ͡����㥤�ե�������Ȥ�ʤ��ƤϤ����ޤ���
�ؿ����ȥꥬ�ޥ͡����㤫��ƤӽФ������ϡ��̾�ΰ������Ϥ����ΤǤϤʤ���TriggerData��¤�Τ�ؤ�"context"�ݥ����Ϥ���ޤ��� C�ؿ��ϡ��ȥꥬ�ޥ͡����㤫��ƤӽФ��줿�Τ��ɤ�����ʲ��Υޥ�����¹Ԥ��뤳�ȤǸ������뤳�Ȥ��Ǥ��ޤ���
CALLED_AS_TRIGGER(fcinfo)
����ϰʲ���Ÿ������ޤ���
((fcinfo)->context != NULL && IsA((fcinfo)->context, TriggerData))
�⤷���줬�����֤���硢fcinfo->context��TriggerData *���˥��㥹�Ȥ����ؤ��줿TriggerData��¤�Τ���Ѥ��뤳�Ȥϰ����Ǥ��� ���δؿ��ϡ�TriggerData��¤�Τ䤽�줬�ؤ��ɤΤ褦�ʥǡ������ѹ����Ƥ������ޤ�����
struct TriggerData��commands/trigger.h������������Ƥ��ޤ���
typedef struct TriggerData
{
NodeTag type;
TriggerEvent tg_event;
Relation tg_relation;
HeapTuple tg_trigtuple;
HeapTuple tg_newtuple;
Trigger *tg_trigger;
Buffer tg_trigtuplebuf;
Buffer tg_newtuplebuf;
} TriggerData;���Фϲ����Τ褦���������Ƥ��ޤ���
���T_TriggerData�Ǥ���
���δؿ����ƤӽФ��줿���٥�ȤҤ��ޤ��� tg_event��Ĵ�٤뤿��ˤϲ����Υޥ�����Ȥ����Ȥ��Ǥ��ޤ���
�ȥꥬ��BEFORE��ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��AFTER��ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ���ԥ�٥�Υ��٥�Ȥ�ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��ʸ��٥�Υ��٥�Ȥ�ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��INSERT���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��UPDATE���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��DELETE���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���
�ȥꥬ��ȯ�Ը��Υ�졼�����Ҥ��빽¤�ΤؤΥݥ��Ǥ��� ���ι�¤�ΤˤĤ��Ƥξܺ٤ϡ�utils/rel.h�Ȥ��Ƥ��������� �Ǥⶽ̣�����Τϡ�tg_relation->rd_att(��졼����ץ�ε��һ�)��tg_relation->rd_rel->relname�Ǥ�(��졼�����̾�������char*�ǤϤʤ�NameData�Ǥ��� ̾���Υ��ԡ���ɬ�פʾ��ϡ�char*�����뤿���SPI_getrelname(tg_relation)����Ѥ��Ƥ��������ˡ�
�ȥꥬ��ȯ�Ԥ��줿�ԤؤΥݥ��Ǥ��� �������������롢�������롢���뤤�Ϲ��������ԤǤ��� �⤷INSERT/DELETE�Ǥ��Υȥꥬ��ȯ�Ԥ��줿�������ιԤ��̤Τ�Τ��֤����������ʤ���INSERT�ξ��˾��䡢�����������Ф������ʤ����ϡ�����δؿ������֤��Ƥ���������
�ȥꥬ��UPDATE��ȯ�Ԥ��줿���ϡ��Ԥο������С������ؤΥݥ��Ǥ��� INSERT�⤷����DELETE�ξ��ϡ�NULL�Ǥ��� UPDATE���٥�Ȥλ������ιԤ��̤Τ�Τ��֤����������ʤ������������Ф������ʤ����ϡ�����δؿ������֤��Ƥ���������
�ʲ��Τ褦��utils/rel.h��������줿��Trigger��¤�ΤؤΥݥ��Ǥ���
typedef struct Trigger
{
Oid tgoid;
char *tgname;
Oid tgfoid;
int16 tgtype;
bool tgenabled;
bool tgisconstraint;
Oid tgconstrrelid;
bool tgdeferrable;
bool tginitdeferred;
int16 tgnargs;
int16 tgattr[FUNC_MAX_ARGS];
char **tgargs;
} Trigger;�����ǡ�tgname���ȥꥬ��̾����tgnargs��tgargs��ΰ����ο���tgargs��CREATE TRIGGERʸ�ǻ��ꤵ�줿�����ؤΥݥ�������Ǥ��� ¾�Υ��Ф������ǤΤ��Ѥ���ޤ���
tg_trigtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���
tg_newtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���
�ȥꥬ�ؿ���HeapTuple�ݥ��⤷����NULL�ݥ���SQL��NULL�Ǥ�����ޤ����� ���äơ�isNull�Ͽ��ˤϤʤ�ޤ��ˤΤɤ��餫���֤��ʤ���Фʤ�ޤ��� ����оݤιԤ��ѹ��������ʤ����ϡ����դ��ơ�tg_trigtuple��tg_newtuple��Ŭ�ڤ������֤��Ƥ���������