| 롤 토토 : 문서 : 9.5 : 롤 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.5 : 사용자 정의 토토 꽁 머니 제공자 작성 | PostgreSQL : 문서 : 9.5 : 사용자 정의 토토 꽁 머니 제공자 작성 | 56장. 사용자 정의 스캔 공급자 작성 | PostgreSQL : 문서 : 9.5 : 사용자 지정 토토 캔 계획 만들기 |
사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 배트맨 토토를 추가합니다. 이 후크는 핵심 코드가 관계에 대한 완전하고 올바른 액세스 배트맨 토토 세트라고 생각되는 것을 생성한 후에 호출됩니다.
typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root,
RelOptInfo *rel,
인덱스 rti,
RangeTblEntry *rte);
extern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;
이 후크 기능을 사용하여 핵심 시스템에서 생성된 배트맨 토토를 검사, 수정 또는 제거할 수 있지만 사용자 정의 스캔 공급자는 일반적으로 배트맨 토토 생성에만 국한됩니다.사용자 정의 배트맨 토토객체 및 추가rel사용 중추가_배트맨 토토. 사용자 정의 스캔 제공자는 초기화를 담당합니다.사용자 정의 배트맨 토토객체는 다음과 같이 선언됩니다:
typedef 구조체 CustomPath
배트맨 토토 배트맨 토토;
uint32 플래그;
*custom_paths를 나열하십시오.
*custom_private 나열;
const CustomPathMethods *메소드;
사용자 정의 배트맨 토토;
배트맨 토토행 개수 추정, 시작 및 총 비용, 이 배트맨 토토에서 제공하는 정렬 순서를 포함하여 다른 배트맨 토토와 마찬가지로 초기화되어야 합니다.플래그다음을 포함해야 하는 비트 마스크입니다.CUSTOMPATH_SUPPORT_BACKWARD_SCAN사용자 정의 배트맨 토토가 역방향 스캔을 지원할 수 있는 경우CUSTOMPATH_SUPPORT_MARK_RESTORE표시 및 복원을 지원할 수 있는 경우. 두 기능 모두 선택 사항입니다. 선택 사항custom_paths다음 목록입니다배트맨 토토이 사용자 정의 배트맨 토토 노드에서 사용되는 노드; 이것들은 다음과 같이 변환될 것입니다.계획플래너별 노드.custom_private사용자 정의 배트맨 토토의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는 다음에서 처리할 수 있는 형식으로 저장되어야 합니다.nodeToString, 맞춤 배트맨 토토를 인쇄하려고 시도하는 디버깅 루틴이 설계된 대로 작동하도록 합니다.메소드필수 사용자 정의 배트맨 토토 메소드를 구현하는 (일반적으로 정적으로 할당된) 객체를 가리켜야 합니다. 아래에 자세히 설명되어 있듯이 현재는 2개만 있습니다.
사용자 정의 스캔 제공자는 조인 배트맨 토토도 제공할 수 있습니다. 기본 관계와 마찬가지로 이러한 배트맨 토토는 대체하는 조인에 의해 일반적으로 생성되는 것과 동일한 출력을 생성해야 합니다. 이렇게 하려면 조인 공급자가 다음 후크를 설정한 다음 후크 함수 내에서 create맞춤 배트맨 토토조인 관계에 대한 배트맨 토토.
typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root,
RelOptInfo *joinrel,
RelOptInfo *외부,
RelOptInfo *innerrel,
JoinType 조인 유형,
JoinPathExtraData *추가);
extern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;
이 후크는 내부 및 외부 관계의 다양한 조합으로 동일한 조인 관계에 대해 반복적으로 호출됩니다. 중복된 작업을 최소화하는 것은 후크의 책임입니다.
계획 *(*PlanCustomPath) (PlannerInfo *루트,
RelOptInfo *rel,
사용자 정의 배트맨 토토 *best_path,
목록 *tlist,
*절 나열,
*custom_plans 나열);
사용자 정의 배트맨 토토를 완성된 계획으로 변환합니다. 반환 값은 일반적으로 다음과 같습니다.CustomScan콜백이 할당하고 초기화해야 하는 객체입니다. 참조PostgreSQL : 문서 : 9.5 : 사용자 지정 토토 캔 계획 만들기자세한 내용은.
void (*TextOutCustomPath) (StringInfo str,
const CustomPath *node);
다음 경우에 추가 출력을 생성nodeToString이 사용자 정의 배트맨 토토에서 호출됩니다. 이 콜백은 선택사항입니다. 부터nodeToString다음을 포함하여 볼 수 있는 구조의 모든 필드를 자동으로 덤프합니다.custom_private, 이는 다음과 같은 경우에만 유용합니다.CustomPath실제로는 추가 필드를 포함하는 더 큰 구조체에 포함되어 있습니다.