때CustomScan이 실행되면 실행 상태는 다음과 같이 표시됩니다.CustomScanState, 다음과 같이 선언됩니다.
typedef 구조체 CustomScanState
스캔스테이트 SS;
uint32 플래그;
const CustomExecMethods *메소드;
CustomScanState;
ss젠 토토이 기본 관계가 아닌 조인에 대한 경우를 제외하고는 다른 젠 토토 상태와 마찬가지로 초기화됩니다.ss.ss_currentRelationNULL로 남습니다.플래그은(는) 와 같은 의미를 지닌 비트 마스크입니다.사용자 정의 경로그리고CustomScan. 메소드은 필수 사용자 정의 스캔 상태 메소드를 구현하는(일반적으로 정적으로 할당된) 객체를 가리켜야 합니다. 이에 대해서는 아래에서 자세히 설명합니다. 일반적으로 aCustomScanState, 지원이 필요하지 않음copyObject은 실제로 위 항목을 첫 번째 멤버로 포함하는 더 큰 구조가 됩니다.
void (*BeginCustomScan) (CustomScanState *노드,
부동산 *부동산,
int 플래그);
제공된 초기화 완료CustomScanState. 표준 필드는 다음에 의해 초기화되었습니다.ExecInitCustomScan, 그러나 모든 비공개 필드는 여기에서 초기화되어야 합니다.
TupleTableSlot *(*ExecCustomScan) (CustomScanState *노드);
다음 스캔 튜플을 가져옵니다. 튜플이 남아 있으면 채워져야 합니다.ps_ResultTupleSlot현재 스캔 방향의 다음 튜플을 사용하고 튜플 슬롯을 반환합니다. 그렇지 않다면,NULL또는 빈 슬롯이 반환되어야 합니다.
void (*EndCustomScan) (CustomScanState *노드);
다음과 관련된 모든 개인 데이터를 정리하십시오.CustomScanState. 이 방법은 필수이지만 관련 데이터가 없거나 자동으로 정리되는 경우에는 아무것도 할 필요가 없습니다.
void (*ReScanCustomScan) (CustomScanState *노드);
현재 스캔을 처음으로 되감고 관계를 다시 스캔할 준비를 하십시오.
void (*MarkPosCustomScan) (CustomScanState *노드);
현재 스캔 위치를 저장하여 나중에 복원할 수 있도록RestrPosCustomScan콜백. 이 콜백은 선택 사항이며 다음과 같은 경우에만 제공되어야 합니다.CUSTOMPATH_SUPPORT_MARK_RESTORE플래그가 설정되었습니다.
void (*RestrPosCustomScan) (CustomScanState *노드);
다음에 의해 저장된 이전 스캔 위치를 복원MarkPosCustomScan콜백. 이 콜백은 선택 사항이며 다음과 같은 경우에만 제공되어야 합니다.CUSTOMPATH_SUPPORT_MARK_RESTORE플래그가 설정되었습니다.
크기(*EstimateDSMCustomScan) (CustomScanState *노드,
ParallelContext *pcxt);
병렬 작업에 필요한 동적 공유 메모리의 양을 추정합니다. 이는 실제 사용되는 금액보다 높을 수 있지만, 낮아져서는 안 됩니다. 반환 값은 바이트 단위입니다. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*InitializeDSMCustomScan) (CustomScanState *노드,
ParallelContext *pcxt,
무효 *좌표);
병렬 작업에 필요한 동적 공유 메모리를 초기화합니다.좌표반환 값과 동일한 크기의 공유 메모리 영역을 가리킵니다.EstimateDSMCustomScan. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*ReInitializeDSMCustomScan) (CustomScanState *노드,
ParallelContext *pcxt,
무효 *좌표);
사용자 정의 스캔 계획 노드가 다시 스캔되려고 할 때 병렬 작업에 필요한 동적 공유 메모리를 다시 초기화합니다. 이 콜백은 선택 사항이며 이 사용자 지정 검색 공급자가 병렬 실행을 지원하는 경우에만 제공해야 합니다. 권장되는 방법은 이 콜백이 공유 상태만 재설정하는 반면,ReScanCustomScan콜백은 로컬 상태만 재설정합니다. 현재 이 콜백은 이전에 호출됩니다.ReScanCustomScan, 하지만 그 순서에 의존하지 않는 것이 가장 좋습니다.
void (*InitializeWorkerCustomScan) (CustomScanState *노드,
shm_toc *toc,
무효 *좌표);
리더가 설정한 공유 상태를 기반으로 병렬 작업자의 로컬 상태를 초기화합니다.DSMCustomScan 초기화. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*ShutdownCustomScan) (CustomScanState *노드);
노드 실행이 완료되지 않을 것으로 예상되면 리소스를 해제하십시오. 모든 경우에 호출되는 것은 아닙니다. 가끔,EndCustomScan이 함수가 먼저 호출되지 않은 상태에서 호출될 수 있습니다. 병렬 쿼리에 사용되는 DSM 세그먼트는 이 콜백이 호출된 직후 삭제되므로 DSM 세그먼트가 사라지기 전에 몇 가지 조치를 취하려는 맞춤 젠 토토 제공자는 이 메서드를 구현해야 합니다.
void (*ExplainCustomScan) (CustomScanState *노드,
*조상 목록,
explainState *es);
다음에 대한 추가 정보 출력설명커스텀 젠 토토 계획 노드의. 이 콜백은 선택사항입니다. 에 저장된 공통 데이터젠 토토상태(예: 대상 목록 및 검색 관계)은 이 콜백 없이도 표시되지만 콜백을 사용하면 추가 비공개 상태를 표시할 수 있습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.