PostgreSQL 9.1.5ʸ�� | ||||
---|---|---|---|---|
前のページ | 巻戻し | 第 50章�����ǡ�����åѤκ��� | 早送り | 次のページ |
FDW�ϥ�ɥ�ؿ��ϡ��ʲ��Υ�����Хå��ؿ��ؤΥݥ���ޤࡢpalloc���줿FdwRoutine��¤�Τ��֤��ޤ���
FdwPlan * PlanForeignScan (Oid foreigntableid, PlannerInfo *root, RelOptInfo *baserel);
�����ơ��֥�ؤΥ������μ¹Էײ��������ޤ���
���δؿ��ϥ�����μ¹Էײ���������Ȥ��˸ƤӽФ���ޤ���
foreigntableid�Ϥ��γ����ơ��֥��pg_class��OID�Ǥ���
root�Ϥ��Υ�����˴ؤ���ץ��ʤΥ������Х����ǡ�baserel�Ϥ��Υơ��֥�˴ؤ���ץ��ʤξ���Ǥ���
���δؿ��ϡ������Ȥθ��Ѥ��˲ä��ơ���dz����ơ��֥륹������¹Ԥ���Τ�ɬ�פ�FDW�Υץ饤�١��Ⱦ����ޤࡢpalloc���줿��¤�Τ��֤��ʤ���Фʤ�ޤ���
(�ץ饤�١��Ⱦ����copyObject
�����ԡ���ˡ���ΤäƤ��������ɽ������Ƥ��ʤ���Фʤ�ʤ����Ȥ����դ��Ƥ���������)
root��baserel�˴ޤޤ�����ϡ������ơ��֥뤫����Ф�����餹�����(��̤Ȥ��ƥ����ȸ��Ѥ��餹���Ȥ�)�Ȥ����Ȥ��Ǥ��ޤ��� baserel->baserestrictinfo�ϡ����Ф��Ԥ����̤���Τ˻��ѤǤ���������(WHERE��)��ޤ�Ǥ��ꡢ�ä˶�̣������ΤǤ��� (�ǽ�Ū�ʼ¹Էײ�Ǥ����������٥����å�����Τǡ�FDW�Ǥ����ξ���Ŭ�Ѥ��ʤ���Фʤ�ʤ��櫓�ǤϤ���ޤ���) baserel->reltargetlist�ϼ��Ф�ɬ�פ����륫������ꤹ��Τ˻��ѤǤ��ޤ���
���δؿ��ϡ������ȸ��Ѥ����֤��Τ˲ä��ơ�������ˤ��ե��륿����θ���������Υ��������֤��������Կ���baserel->rows�����٤��Ǥ��� baserel->rows�ν���ͤ�ñ�ʤ�ǥե���Ȥθ��Ѥ��Ǥ��ꡢ��ǽ�Ǥ�����֤���������٤���ΤǤ��� ʿ�ѹ�Ĺ�Τ���ɤ����Ѥ��ФǤ���ΤǤ���С����δؿ���baserel->width�����뤳�Ȥ����뤳�Ȥ�Ǥ��ޤ���
void ExplainForeignScan (ForeignScanState *node, ExplainState *es);
�����ơ��֥륹�������ɲä�EXPLAIN���Ϥ�ɽ�����ޤ���
����ɽ������ɬ�פ��ʤ��ΤǤ���С�ñ�˥���뤳�Ȥ�Ǥ��ޤ���
�⤷���ϡ�EXPLAIN���Ϥ˥ե�����ɤ��ɲä��뤿���ExplainPropertyText
���Ϣ����ؿ���ƤӽФ��٤��Ǥ���
es����Υե饰�ե�����ɤϲ���ɽ�����뤫�����Τ˻��ѤǤ��ޤ����ޤ���EXPLAIN ANALYZE�ξ��ˤϡ��¹Ի�����������뤿���ForeignScanState�Ρ��ɤξ��֤�Ĵ�٤뤳�Ȥ��Ǥ��ޤ���
void BeginForeignScan (ForeignScanState *node, int eflags);
�����ơ��֥륹�����μ¹ԤϤ��ޤ���
���δؿ��ϥ��������塼���Υ������ȥ��å���˸ƤӽФ���ޤ���
�������ϤǤ���褦�ˤʤ����ˡ�������ɬ�פʽ������¹Ԥ���٤��Ǥ������ºݤΥ������μ¹Ԥ�Ϥ��٤��ǤϤ���ޤ���(����Ϻǽ��IterateForeignScan
�ƤӽФ��ˤ����ƹԤ���٤��Ǥ�)��
ForeignScanState�Ρ��ɤϺ�������Ƥ��ޤ���������fdw_state�ե�����ɤ�NULL�ΤޤޤǤ���
�������ơ��֥�ξ���ϡ�ForeignScanState�Ρ���(�ºݤˤϤ�����ˤ��롢PlanForeignScan
�����֤��줿FdwPlan��¤�ΤؤΥݥ���ޤࡢForeignScan�ץ��Ρ���)���̤��ƥ���������ǽ�Ǥ���
(eflags & EXEC_FLAG_EXPLAIN_ONLY)�����ξ�硢���δؿ��ϳ����˸����륢�����������٤��ǤϤʤ����Ȥ����դ��Ƥ���������
ExplainForeignScan
��EndForeignScan
�Ѥ˥Ρ��ɾ��֤�ͭ���ˤ���Τ�ɬ�פȤ����Ǿ��¤Τ��Ȥ����٤��Ǥ���
TupleTableSlot * IterateForeignScan (ForeignScanState *node);
���������������Ԥ���Ф��ơ�����ץ�ơ��֥륹���åȤ�������֤��ޤ�(�������ӤˤϥΡ��ɤ�ScanTupleSlot��Ȥ��٤��Ǥ�)��
���Ѳ�ǽ�ʹԤ��ʤ����ϡ�NULL���֤��ޤ���
���ץ�ơ��֥륹���åȵ�����Ȥ��ȡ�ʪ�����ץ�Ȳ��ۥ��ץ�Τɤ���Ǥ��֤��ޤ���
�ۤȤ�ɤξ�硢�ѥե����ޥδ��������Ԥ����֤Τ��ɤ��Ǥ��礦��
���δؿ��ϡ��ƽФ����Ȥ˥ꥻ�åȤ����û̿�ʥ��ꥳ��ƥ�������ǸƤӽФ���뤳�Ȥ����դ��Ƥ���������
���Ĺ̿�ʥ��ȥ졼����ɬ�פʾ��ϡ�BeginForeignScan
�ǥ��ꥳ��ƥ����Ȥ�������뤫���Ρ��ɤ�EState�˴ޤޤ��es_query_cxt����Ѥ��Ƥ���������
�֤����Ԥϥ������Ƥ��볰���ơ��֥�Υ���ॷ���ͥ���Ȱ��פ��ʤ���Фʤ�ޤ��� ���פʥ�������Ф��ʤ��褦�˺�Ŭ�����뤳�Ȥ����֤ʤ顢�����Υ������֤�NULL�������٤��Ǥ���
PostgreSQL�Υ��������塼�����֤��줿�Ԥ������ơ��֥�����������줿NOT NULL����˰�ȿ���Ƥ��뤫�ɤ����ϵ��ˤ��ޤ����ץ��ʤϤ���˴ؿ��������NULL�ͤ�ޤޤʤ���������줿���NULL�ͤ����줿���������ʥ������Ŭ���Ƥ��ޤ���礬���뤳�Ȥ����դ��Ƥ��������� �桼�������äƤϤʤ�ʤ�����������Τ�NULL�ͤ�������������(�ǡ����������פ��ʤ��ä����ˤ���ɬ�פ�����Τ�Ʊ�ͤ�)���顼��ȯ��������Τ�Ŭ�ڤǤ��礦��
void ReScanForeignScan (ForeignScanState *node);
��Ƭ���饹������Ƴ����ޤ��� �������¸���뤤���줫�Υѥ������ͤ��ѹ����Ƥ��뤫�⤷��ʤ��Τǡ��������������ɬ�����⸷̩��Ʊ���Ԥ��֤��Ȥϸ¤�ʤ����Ȥ����դ��Ƥ���������
void EndForeignScan (ForeignScanState *node);
��������λ���������������ޤ��� �̾palloc���줿�����������뤳�ȤϽ��פǤϤ���ޤ����������ե�������⡼�ȥ����Фؤ���³�ʤɤϥ���åפ���٤��Ǥ���
FdwRoutine��FdwPlan�ι�¤�η���src/include/foreign/fdwapi.h���������Ƥ���Τǡ�����ʤ�ܺ٤Ϥ�����Ʋ�������