사용자 정의 토토 결과은 다음 구조를 사용하여 완성된 계획 트리에 표시됩니다:
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.scanrelid
0이어야 합니다.
계획 트리는 다음을 사용하여 복제할 수 있어야 합니다.copyObject
, 따라서 모든 데이터는“커스텀”필드는 해당 함수가 처리할 수 있는 노드로 구성되어야 합니다. 또한 사용자 정의 토토 결과 공급자는 다음을 포함하는 더 큰 구조를 대체할 수 없습니다.CustomScan
구조 자체에 대해 가능한 한사용자 정의 경로
또는CustomScanState
.
노드 *(*CreateCustomScanState) (CustomScan *cscan);
할당CustomScanState
이것을 위해CustomScan
. 실제 할당은 일반 할당에 필요한 것보다 더 큰 경우가 많습니다.CustomScanState
, 많은 공급자가 이를 더 큰 구조의 첫 번째 필드로 포함하기를 원하기 때문입니다. 반환된 값에는 노드 태그와가 있어야 합니다.메서드
적절하게 설정되지만, 이 단계에서 다른 필드는 0으로 남겨두어야 합니다. 이후ExecInitCustomScan
기본 초기화를 수행합니다.BeginCustomScan
콜백은 사용자 정의 토토 결과 제공자에게 필요한 다른 작업을 수행할 수 있는 기회를 제공하기 위해 호출됩니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.