Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

58.2. Tạo gói tỷ lệ kèo bóng đá

tỷ lệ kèo bóng đá được biểu diễn trong cây kế hoạch hoàn thành bằng cấu trúc sau:

Typedef Struct CustomScan

    tỷ lệ kèo bóng đá tỷ lệ kèo bóng đá;
    Cờ Uint32;
    Danh sách *Custom_plans;
    Danh sách *Custom_exprs;
    Danh sách *Custom_Private;
    Danh sách *Custom_scan_tlist;
    Bitmapset *Custom_Relids;
    Phương thức CustomScanMethods *;
 CustomScan;

Scanphải được khởi tạo như đối với bất kỳ lần tỷ lệ kèo bóng đá nào khác, bao gồm chi phí ước tính, danh sách mục tiêu, trình độ, v.v.Cờlà một chút mặt nạ có cùng ý nghĩa như trongCustomPath. Custom_planscó thể được sử dụng để lưu trữ conkế hoạchnút.Custom_exprsnên được sử dụng để lưu trữ các cây biểu thức sẽ cần được sửa lên bởisetrefs.cSUMSELECT.C, trong khicustom_privatenên được sử dụng để lưu trữ dữ liệu riêng tư khác chỉ được sử dụng bởi chính nhà cung cấp tỷ lệ kèo bóng đá.Custom_scan_tlistcó thể là không khi quét mối quan hệ cơ sở, cho biết rằng tỷ lệ kèo bóng đá trả về các bộ dữ liệu khớp phù hợp với loại hàng của quan hệ cơ sở. Nếu không thì đó là danh sách đích mô tả các bộ dữ liệu quét thực tế.custom_scan_tlistPhải được cung cấp cho các lần nối và có thể được cung cấp cho quét nếu nhà cung cấp tỷ lệ kèo bóng đá có thể tính toán một số biểu thức không var.custom_relidsđược đặt bởi mã lõi thành tập hợp các mối quan hệ (chỉ mục bảng phạm vi) mà xử lý nút tỷ lệ kèo bóng đá này; Ngoại trừ khi lần tỷ lệ kèo bóng đá này thay thế tham gia, nó sẽ chỉ có một thành viên.Phương phápPhải trỏ đến đối tượng (thường được phân bổ tĩnh) Thực hiện các phương thức tỷ lệ kèo bóng đá cần thiết, được chi tiết hơn dưới đây.

Khi ACustomScantỷ lệ kèo bóng đá một quan hệ duy nhất,Scan.scanrelidPhải là chỉ mục bảng phạm vi của bảng được tỷ lệ kèo bóng đá. Khi nó thay thế một lần tham gia,Scan.scanrelidnên bằng không.

Cây kế hoạch phải có thể được nhân đôi bằng cách sử dụngCopyObject, vì vậy tất cả các dữ liệu được lưu trữ trongtỷ lệ kèo bóng đá11381_11530CustomScanĐối với chính cấu trúc, theo khả năng củaCustomPathhoặc11695_11712.

58.2.1. Cuộc gọi lại kế hoạch tỷ lệ kèo bóng đá

Node *( *createCustomScanState) (CustomScan *CSCAN);

Phân bổ ACustomScanstatecho điều nàyCustomScan. Phân bổ thực tế thường sẽ lớn hơn yêu cầu đối với thông thườngCustomScanstate, bởi vì nhiều nhà cung cấp sẽ muốn nhúng đó là trường đầu tiên của một cấu trúc lớn hơn. Giá trị được trả về phải có thẻ nút vàPhương phápĐặt một cách thích hợp, nhưng các trường khác nên được để lại dưới dạng 0 ở giai đoạn này; sau đóExecItCustomScan12582_12620BeginCustomScanCallback sẽ được gọi để cung cấp cho nhà cung cấp tỷ lệ kèo bóng đá cơ hội để làm bất cứ điều gì khác cần thiết.