롤 토토 : 문서 : 9.5 : 롤 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.5 : 사용자 정의 토토 꽁 머니 제공자 작성 | PostgreSQL : 문서 : 9.5 : 사용자 정의 토토 꽁 머니 제공자 작성 | 56 장. 사용자 정의 스캔 제공자 작성 | PostgreSQL : 문서 : 9.5 : 사용자 지정 토토 캔 계획 만들기 |
사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 배트맨 토토를 추가합니다. 핵심 코드가 관계에 대한 완전하고 올바른 액세스 배트맨 토토 세트라고 믿는 것을 생성 한 후 호출됩니다..
typedef void ( *set_rel_pathlist_hook_type) (plannerInfo *root, reploptinfo *rel, 인덱스 RTI, rangetblentry *rte); extern pgdllimport set_rel_pathlist_hook_type set_rel_pathlist_hook;
이 후크 함수는 핵심 시스템에서 생성 된 배트맨 토토를 검사, 수정 또는 제거하는 데 사용될 수 있지만 사용자 정의 스캔 제공자는 일반적으로 생성에 제한됩니다CustomPath개체 및 추가Rel사용add_path
. 사용자 정의 스캔 제공자는 초기화를 담당합니다.CustomPath객체는 다음과 같이 선언됩니다.
typedef struct custompath 경로 경로; UINT32 플래그; List *Custom_Paths; list *custom_private; Const CustomPathMethods *메소드; custompath;
PATH이 배트맨 토토에서 제공 한로드 카운트 견적, 시작 및 총 비용 및 정렬 주문을 포함한 다른 배트맨 토토와 같이 초기화되어야합니다.플래그비트 마스크입니다.custompath_support_backward_scan사용자 정의 경로가 후진 스캔을 지원할 수있는 경우custompath_support_mark_restore마크 및 복원을 지원할 수있는 경우. 두 기능 모두 선택 사항입니다. 선택 사항custom_paths|PATH이 사용자 지정 경로 노드에서 사용하는 노드; 이것들은로 변형 될 것입니다.planPlanner의 노드.custom_private는 사용자 정의 경로의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는에 의해 처리 할 수있는 양식으로 저장해야합니다.Nodetostring, 사용자 정의 경로를 인쇄하려는 디버깅 루틴이 설계된대로 작동합니다.방법필요한 사용자 정의 경로 메소드를 구현하는 (일반적으로 정적으로 할당 된) 객체를 가리켜야하며, 그 중 2 개만 있으며 아래에 자세히 설명 된대로
사용자 정의 스캔 제공자는 조인 경로를 제공 할 수도 있습니다. 기본 관계의 경우, 그러한 경로는 일반적으로 교체하는 조인에 의해 생성되는 것과 동일한 출력을 생성해야합니다. 이렇게하려면 Join Provider는 다음 후크를 설정 한 다음 후크 함수 내에서 Create를 설정해야합니다.CustomPath조인 관계의 배트맨 토토.
typedef void ( *set_join_pathlist_hook_type) (plannerInfo *root, reploptinfo *joinrel, reploptinfo *outerrel, reploptinfo *내부 렐, 공동 타입 공동 유형, joinpathextradata *extra); extern pgdllimport set_join_pathlist_hook_type set_join_pathlist_hook;
이 후크는 내부 및 외부 관계의 다른 조합과 동일한 결합 관계에 대해 반복적으로 호출됩니다. 복제 된 작업을 최소화하는 것은 후크의 책임입니다.
plan *( *plancustompath) (plannerinfo *root, reploptinfo *rel, custompath *best_path, 목록 *tlist, 목록 *조항, list *custom_plans);
사용자 정의 경로를 완성 된 계획으로 변환합니다. 반환 값은 일반적으로입니다.CustomScan콜백이 할당하고 초기화 해야하는 객체. 보다PostgreSQL : 문서 : 9.5 : 사용자 지정 토토 캔 계획 만들기자세한 내용은
void (*TeptoutCustompath) (StringInfo str, const custompath *노드);
추가 출력 생성Nodetostring
이 사용자 지정 경로에서 호출됩니다. 이 콜백은 선택 사항입니다. 부터Nodetostring
를 포함하여 볼 수있는 구조에 모든 필드를 자동으로 덤프합니다.custom_private, 이것은에만 유용합니다CustomPath실제로 추가 필드를 포함하는 더 큰 구조물에 포함되어 있습니다.