롤 토토 : 문서 : 9.5 : 롤 토토 9 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.5 : 사용자 정의 스캔 배트맨 토토 만들기 | PostgreSQL : 문서 : 9.5 : 사용자 정의 토토 꽁 머니 제공자 작성 | 56 장. 사용자 정의 토토 캔 제공자 쓰기 | PostgreSQL : 문서 : 9.5 : 사용자 정의 스포츠 토토 결과 실행 |
맞춤형 토토 캔은 다음 구조를 사용하여 완성 된 계획 트리에 표시됩니다.
typedef struct customscan 토토 캔 토토 캔; UINT32 플래그; List *Custom_Plans; list *custom_exprs; list *custom_private; list *custom_scan_tlist; BitMapset *custom_relids; const customscanmethods *methods; customscan;
토토 캔추정 비용, 목표 목록, 자격 등을 포함하여 다른 토토 캔과 같이 초기화되어야합니다.플래그|CustomPath. custom_plans아동을 저장하는 데 사용할 수 있습니다plan노드.custom_exprs|setrefs.candsubSelect.c, whilecustom_private사용자 정의 토토 캔 제공자 자체에서만 사용되는 다른 개인 데이터를 저장하는 데 사용해야합니다.custom_scan_tlist기본 관계를 토토 캔 할 때는 NIL 일 수 있습니다. 이는 사용자 정의 토토 캔이 기본 관계의 행 유형과 일치하는 토토 캔 튜플을 반환합니다. 그렇지 않으면 실제 토토 캔 튜플을 설명하는 대상 목록입니다.custom_scan_tlist조인을 위해 제공되어야하며 사용자 정의 토토 캔 제공자가 비 VAR 표현식을 계산할 수있는 경우 토토 캔을 위해 제공 될 수 있습니다.custom_relids이 토토 캔 노드 처리의 관계 세트 (범위 테이블 인덱스)에 대한 핵심 코드에 의해 설정됩니다. 이 토토 캔이 Join을 교체하는 경우를 제외하고는 회원이 한 명뿐입니다.방법필요한 사용자 정의 토토 캔 방법을 구현하는 (일반적으로 정적으로 할당 된) 객체를 가리려면 아래에 자세히 설명되어 있어야합니다.
언제CustomScan단일 관계를 토토 캔합니다.scanrelid토토 캔 할 테이블의 범위 테이블 인덱스 여야합니다. 조인을 대체 할 때Scan.scanrelid0이어야합니다.
플랜 트리는 사용하여 복제 할 수 있어야합니다CopyObject
, 그래서 모든 데이터는"Custom"필드는 해당 함수가 처리 할 수있는 노드로 구성되어야합니다. 또한 사용자 정의 토토 캔 제공자는 A를 포함시키는 더 큰 구조를 대체 할 수 없습니다.CustomScan구조 자체의 경우 ACustomPath또는CustomScanstate.
노드 *( *CreateCustomScanstate) (CustomCSCAN *CSCAN);
할당 aCustomScanstate이것CustomScan. 실제 할당은 종종 평범한 것에 필요한 것보다 클 것입니다CustomScanstate, 많은 공급자가 더 큰 구조의 첫 번째 필드로 포함시키기를 원하기 때문입니다. 반환 된 값에는 노드 태그와가 있어야합니다.Methods적절하게 설정했지만 다른 필드는이 단계에서 0으로 남겨 져야합니다. 후에execinitCustomScan
기본 초기화 수행,BegincustomScan
콜백이 호출되어 사용자 정의 토토 캔 제공 업체가 필요한 모든 것을 할 수있는 기회를 제공합니다.
void (*TeptoutCustomScan) (StringInfo str, const customscan *노드);
추가 출력 생성Nodetostring
이 사용자 지정 계획 노드에서 호출됩니다. 이 콜백은 선택 사항입니다. 부터Nodetostring
|"Custom"필드, 일반적 으로이 콜백이 크게 필요하지 않습니다.