����Ǥϥȥꥬ�ؿ��ȤΥ��ե������ˤĤ������٥�ʾܺ٤��������ޤ��� ���ξ����C����ǥȥꥬ�ؿ������������ˤΤ�ɬ�פǤ��� ���٥�ʸ���Ǻ�������С����������ܺ٤�����˰��äƤ�館�ޤ��� �����Ƥ��ξ�硢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 tgnattr; int16 *tgattr; char **tgargs; } Trigger;
�����ǡ�tgname���ȥꥬ��̾����tgnargs��tgargs��ΰ����ο���tgargs��CREATE TRIGGERʸ�ǻ��ꤵ�줿�����ؤΥݥ�������Ǥ��� ¾�Υ��Ф������ǤΤ��Ѥ���ޤ���
tg_trigtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���
tg_newtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���
�ȥꥬ�ؿ���HeapTuple�ݥ��⤷����NULL�ݥ���SQL��NULL�Ǥ�����ޤ�����
�������äơ�isNull
�Ͽ��ˤϤʤ�ޤ���ˤΤɤ��餫���֤��ʤ���Фʤ�ޤ���
����оݤιԤ��ѹ��������ʤ����ϡ����դ��ơ�tg_trigtuple��tg_newtuple��Ŭ�ڤ������֤��Ƥ���������