PostgreSQL: soi kèo bóng đá | |||
---|---|---|---|
prev | UP | Chương 56. Viết nhà cung cấp tỷ lệ kèo bóng đá | NEXT |
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
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ạ với cùng ý nghĩa như trongCustomPath. Custom_planscó thể được sử dụng để lưu trữ contỷ lệ kèo bóng đánú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.cvàSUMSELECT.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 tỷ lệ kèo bóng đá 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ữ trong"tỷ lệ kèo bóng đá"Các trường phải bao gồm các nút mà hàm đó có thể xử lý. Hơn nữa, các nhà cung cấp tỷ lệ kèo bóng đá không thể thay thế một cấu trúc lớn hơn nhúngCustomScanĐối với chính cấu trúc, theo khả năng của mộtCustomPathhoặcCustomScanstate.
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 đóExecItCustomScan
Thực hiện khởi tỷ lệ kèo bóng đá cơ bản,BeginCustomScan
Callback 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.
void (*textOutCustomScan) (StringInfo str,
tỷ lệ kèo bóng đá đầu ra bổ sung khiNodetostring
được gọi trên nút gói tỷ lệ kèo bóng đá này. Cuộc gọi lại này là tùy chọn.Nodetostring
Sẽ tự động đổ tất cả các trường trong cấu trúc, bao gồm cả cấu trúc của"tỷ lệ kèo bóng đá"Trường, thường không có nhiều nhu cầu cho cuộc gọi lại này.