¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

�� 47�ϼ�³������ϥ�ɥ�κ���

���ߤΥ���ѥ��������"�С������ 1"���󥿥ե������ʳ��Τ������Ǻ������줿�ؿ��θƤӽФ��Ϥ��٤ơ�����θ����Ѥ��ƤӽФ��ϥ�ɥ����ͳ���ޤ��� (����ˤϡ��桼�������³������Ǻ������줿�ؿ���SQL�Ǻ������줿�ؿ�������ѥ�������ѥС������0���󥿥ե���������Ѥ����ؿ����ޤޤ�ޤ���) �󶡤��줿�������ƥ����Ȥ��᤹��ʤɤˤ�äơ��ؿ��μ¹Ԥ��̣�Τ�����ˡ�ǹԤʤ����Ȥϡ��ƤӽФ��ϥ�ɥ����Ǥ�Ǥ��� ���ξϤǤϡ��ɤΤ褦�˿�������³������θƤӽФ��ϥ�ɥ������Ǥ��뤫�ˤĤ��Ƴ��פ򼨤��ޤ���

��³�������ѤθƤӽФ��ϥ�ɥ��"�̾�"�δؿ��ǡ�C�ʤɤΥ���ѥ������Ǻ��������С������1���󥿥ե���������Ѥ���������Ȥ餺��language_handler���֤���ΤȤ���PostgreSQL����Ͽ���ʤ���Фʤ�ޤ��� �����ü�ʲ��۷��ϡ����δؿ����ƤӽФ��ϥ�ɥ�Ȥ��Ƽ��̤���SQL���ޥ�����ľ�ܤ��δؿ����ƤӽФ���뤳�Ȥ��ɻߤ��ޤ���

�ƤӽФ��ϥ�ɥ�ϡ�¾�δؿ���Ʊ����ˡ�ǸƤӽФ���ޤ��� �����ͤȸƤӽФ��줿�ؿ��ˤĤ��Ƥξ����ޤ�FunctionCallInfoData struct�Υݥ��󥿤����ꡢDatum���η�̤��֤����(�����ơ�SQL��NULL�Ȥ�����̤��֤����Ȥ�����ˡ�FunctionCallInfoData ��¤�Τ�isnull�ե�����ɤ����ꤹ�뤫�⤷��ʤ����)�����ꤵ��Ƥ��ޤ��� �ƤӽФ��ϥ�ɥ���̾�θƤӽФ����ؿ��Ȥΰ㤤�ϡ� FunctionCallInfoData��¤�Τ�flinfo->fn_oid�ˡ��ƤӽФ��ϥ�ɥ鼫�ȤǤϤʤ����ºݤ˸ƤӽФ����ؿ���OID���ޤޤ��Ȥ������Ǥ��� �ƤӽФ��ϥ�ɥ�Ϥ��Υե�����ɤ���Ѥ��ơ��ɤδؿ���ƤӽФ��Τ�����ꤷ�ʤ���Фʤ�ޤ��� �ޤ����Ϥ��줿�����ꥹ�Ȥϡ��ƤӽФ��ϥ�ɥ������ǤϤʤ�����Ū�Ȥ���ؿ�������˽����褦���ꤵ��Ƥ��ޤ���

pg_proc �����ƥ�ơ��֥뤫��ؿ��Υ���ȥ����Ф����ƤӽФ����ؿ��ΰ���������ͤη�����Ϥ���ޤǤ�ƤӽФ��ϥ�ɥ餬�Ԥʤ��ޤ��� �ؿ���CREATE FUNCTION��AS��ϡ�pg_proc�ιԤ�prosrc��ˤ���ޤ��� �����(PL/Tcl�ʤɤ�)��³�����켫�ΤǺ������줿�������ƥ����Ȥξ��䡢�ե�����ؤΥѥ�̾�ξ��䡢���餫�θƤӽФ��ϥ�ɥ�˾ܺ٤˲��򤹤٤��������Τ����Τξ�礬����ޤ���

1�Ĥ�SQLʸ���Ф��ơ�Ʊ���ؿ��������ƤӽФ���뤳�Ȥ��褯����ޤ��� �ƤӽФ��ϥ�ɥ�ϡ�flinfo->fn_extra�ե�����ɤ���Ѥ��ơ��ƤӽФ��ؿ��˴ؤ��������֤��������뤳�Ȥ��ɤ����Ȥ��Ǥ��ޤ��� ����Ͻ�����֤Ǥ�NULL�Ǥ������ƤӽФ��ϥ�ɥ�ˤ�äƸƤӽФ��ؿ��ξ����ؤ��褦�����ꤹ�뤳�Ȥ�Ǥ��ޤ��� ���θ�θƤӽФ��Ǥϡ�flinfo->fn_extra����NULL�Ǥ���С��������Ѥ��ơ����󸡺����ʳ����ά���뤳�Ȥ��Ǥ��ޤ��� �ƤӽФ��ϥ�ɥ��flinfo->fn_extra�����ʤ��Ȥ⸽�ߤ��䤤��碌�ν�λ�ޤ�ͭ���ʥ����ؤ��Ƥ��뤫�ɤ������ǧ���ʤ���Фʤ�ޤ��� FmgrInfo�ǡ�����¤�Τ�Ĺ���ݻ�������ǽ�������뤫��Ǥ��� ������ˡ��1�ĤȤ��ơ� flinfo->fn_mcxt�ǻ��ꤵ�줿���ꥳ��ƥ��������;ʬ�ʥǡ����������Ƥ뤳�ȤǤ��� ���Υǡ������̾�FmgrInfo ���Ȥ�Ʊ����ͭ���Ǥ��� ���������ϥ�ɥ�Ϥޤ���Ĺ���֥��ꥳ��ƥ����Ȥˤ����Τ���Ѥ��뤫�ɤ��������֤��Ȥ�Ǥ��ޤ��� ����ˤ�ꡢ�䤤��碌��٤ä����ؿ��������򥭥�å��夹�뤳�Ȥ��Ǥ��ޤ���

��³������ؿ����ȥꥬ�Ȥ��ƸƤӽФ��줿��硢�������̾����ˡ�Ǥ��Ϥ��줺��FunctionCallInfoData��context�ե�����ɤ������̤δؿ��ƤӽФ��Τ褦��NULL�ˤϤʤ餺�ˡ�TriggerData��¤�Τ�ؤ��Ƥ��ޤ��� �ƤӽФ��ϥ�ɥ�ϡ���³��������Ф��ȥꥬ�������Ф��������󶡤��ޤ���

�ʲ��ϡ�C�Ǻ���������³������ϥ�ɥ�ο����Ǥ���

#include "postgres.h"
#include "executor/spi.h"
#include "commands/trigger.h"
#include "fmgr.h"
#include "access/heapam.h"
#include "utils/syscache.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"

PG_FUNCTION_INFO_V1(plsample_call_handler);

Datum
plsample_call_handler(PG_FUNCTION_ARGS)
{
    Datum          retval;

    if (CALLED_AS_TRIGGER(fcinfo))
    {
        /*
         * �ȥꥬ�ؿ��Ȥ��ƸƤӽФ��줿
         */
        TriggerData    *trigdata = (TriggerData *) fcinfo->context;

        retval = ...
    }
    else
    {
        /*
         * �ؿ��Ȥ��ƸƤӽФ��줿
         */

        retval = ...
    }

    return retval;
}

����ԤΥ����ɤ��ΥɥåȤ�������ɲä�������ǡ��ƤӽФ��ϥ�ɥ�������뤳�Ȥ��Ǥ��ޤ���

�ϥ�ɥ�ؿ���ưŪ�ɤ߹��߲�ǽ�ʥ⥸�塼��˥���ѥ��뤷���塢�ʲ��Υ��ޥ�ɤǥ���ץ�μ�³���������Ͽ���뤳�Ȥ��Ǥ��ޤ���(��33.7.6�򻲾Ȥ��Ʋ�������)

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS 'filename'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;