60.2. 사용자 정의 토토 결과 계획 생성#

사용자 정의 토토 결과은 다음 구조를 사용하여 완성된 계획 트리에 표시됩니다:

typedef 구조체 CustomScan

    토토 결과 토토 결과;
    uint32 플래그;
    *custom_plans 나열;
    *custom_exprs 나열;
    *custom_private 나열;
    *custom_scan_tlist 나열;
    비트맵세트 *custom_relids;
    const CustomScanMethods *메서드;
 커스텀토토 결과;

토토 결과예상 비용, 대상 목록, 자격 등을 포함하여 다른 토토 결과과 마찬가지로 초기화되어야 합니다.플래그은(는) 와 같은 의미를 지닌 비트 마스크입니다.사용자 정의 경로. custom_plans자식을 저장하는 데 사용할 수 있습니다.계획노드.custom_exprs다음에 의해 수정되어야 하는 표현식 트리를 저장하는 데 사용되어야 합니다.setrefs.c그리고subselect.c, 그동안custom_private사용자 정의 토토 결과 제공자 자체에서만 사용되는 기타 개인 데이터를 저장하는 데 사용해야 합니다.custom_scan_tlist은 기본 관계를 토토 결과할 때 NIL일 수 있으며, 이는 사용자 정의 토토 결과이 기본 관계의 행 유형과 일치하는 토토 결과 튜플을 반환함을 나타냅니다. 그렇지 않으면 실제 토토 결과 튜플을 설명하는 대상 목록입니다.custom_scan_tlist조인을 위해 제공되어야 하며, 사용자 정의 토토 결과 제공자가 Var가 아닌 일부 표현식을 계산할 수 있는 경우 토토 결과을 위해 제공될 수 있습니다.custom_relids은 핵심 코드에 의해 이 토토 결과 노드가 처리하는 관계 세트(범위 테이블 인덱스)로 설정됩니다. 단, 이 토토 결과이 조인을 대체하는 경우에는 구성원이 하나만 있습니다.메서드필수 사용자 정의 검색 방법을 구현하는 (일반적으로 정적으로 할당된) 개체를 가리켜야 합니다. 이에 대해서는 아래에서 자세히 설명합니다.

CustomScan단일 관계를 토토 결과합니다.scan.scanrelid토토 결과할 테이블의 범위 테이블 인덱스여야 합니다. 조인을 대체하는 경우,scan.scanrelid0이어야 합니다.

계획 트리는 다음을 사용하여 복제할 수 있어야 합니다.copyObject, 따라서 모든 데이터는커스텀필드는 해당 함수가 처리할 수 있는 노드로 구성되어야 합니다. 또한 사용자 정의 토토 결과 공급자는 다음을 포함하는 더 큰 구조를 대체할 수 없습니다.CustomScan구조 자체에 대해 가능한 한사용자 정의 경로또는CustomScanState.

60.2.1. 사용자 정의 토토 결과 계획 콜백#

노드 *(*CreateCustomScanState) (CustomScan *cscan);

할당CustomScanState이것을 위해CustomScan. 실제 할당은 일반 할당에 필요한 것보다 더 큰 경우가 많습니다.CustomScanState, 많은 공급자가 이를 더 큰 구조의 첫 번째 필드로 포함하기를 원하기 때문입니다. 반환된 값에는 노드 태그와가 있어야 합니다.메서드적절하게 설정되지만, 이 단계에서 다른 필드는 0으로 남겨두어야 합니다. 이후ExecInitCustomScan기본 초기화를 수행합니다.BeginCustomScan콜백은 사용자 정의 토토 결과 제공자에게 필요한 다른 작업을 수행할 수 있는 기회를 제공하기 위해 호출됩니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.