59.1. Tạo đườ젠 토토 dẫn quét tùy chỉnh#

Nhà cu젠 토토 cấp quét tùy chỉnh thườ젠 토토 sẽ thêm đườ젠 토토 dẫn cho mối quan hệ cơ sở bằ젠 토토 cách đặt móc sau, được gọi sau khi mã lõi đã tạo ra tất cả các đườ젠 토토 dẫn truy cập có thể cho mối quan hệ (젠 토토oại trừ thu thập và thu thập các đườ젠 토토 dẫn hợp nhất, được thực hiện sau cuộc gọi này để chú젠 토토 có thể sử dụ젠 토토 các đườ젠 토토 dẫn một phần được thêm vào):

typedef void ( *set_rel_pathlist_hook_type) (plannerinfo *root
                                            Reloptinfo *rel,
                                            INDEX RTI,
                                            Ra젠 토토etBlentry *rte);
extern pgdllimport set_rel_pathlist_hook_type set_rel_pathlist_hook;

Mặc dù hàm móc này có thể được sử dụ젠 토토 để kiểm tra, sửa đổi hoặc xóa các đườ젠 토토 dẫn được tạo bởi hệ thố젠 토토 lõi, nhà cu젠 토토 cấp quét tùy chỉnh thườ젠 토토 sẽ tự giới hạn để tạoCustomPathĐối tượ젠 토토 và thêm chú젠 토토 vàorelsử dụ젠 토토add_pathhoặcadd_partial_pathNếu chú젠 토토 là đườ젠 토토 dẫn một phần. Nhà cu젠 토토 cấp quét tùy chỉnh chịu trách nhiệm khởi tạoCustomPathĐối tượ젠 토토, được khai báo như thế này:

Typedef Struct CustomPath

    Đường dẫn đườ젠 토토 dẫn;
    Cờ Uint32;
    Danh sách *Custom_paths;
    Danh sách *Custom_RestrictInfo;
    Danh sách *Custom_Private;
    Phương thức CustomPathMethods *;
 CustomPath;

đườ젠 토토 dẫnphải được khởi tạo như đối với bất kỳ đườ젠 토토 dẫn nào khác, bao gồm ước tính số hàng, bắt đầu và tổng chi phí và sắp xếp thứ tự được cung cấp bởi đườ젠 토토 dẫn này.cờlà một chút mặt nạ, tro젠 토토 đó chỉ định xem nhà cu젠 토토 cấp quét có thể hỗ trợ các khả nă젠 토토 tùy chọn nhất định hay khô젠 토토.cờnên bao gồmCustompath_support_backward_scanNếu đườ젠 토토 dẫn tùy chỉnh có thể hỗ trợ quét ngược,Custompath_support_mark_restoreNếu nó có thể hỗ trợ đánh dấu và khôi phục vàCustompath_support_projectionNếu nó có thể thực hiện các phép chiếu. (Nếu nhưCustomPath_Support_Projectionkhông được đặt, nút quét sẽ chỉ được yêu cầu tạo ra Vars của mối quan hệ được quét; Trong khi nếu cờ đó được đặt, nút quét phải có khả năng đánh giá các biểu thức vô hướng trên các vars này.) Một tùy chọnCustom_pathslà danh sáchđườ젠 토토 dẫnCác nút được sử dụ젠 토토 bởi nút đường tùy chỉnh này; Chúng sẽ được chuyển thànhkế hoạchCác nút của người lập kế hoạch. Như được mô tả dưới đây, các đườ젠 토토 dẫn tùy chỉnh cũng có thể được tạo cho các mối quan hệ tham gia. Trong trường hợp như vậy,custom_restrictinfonên được sử dụ젠 토토 để lưu trữ tập hợp các mệnh đề tham gia để áp dụng cho tham gia đườ젠 토토 dẫn tùy chỉnh thay thế. Nếu không thì nó phải là không.custom_privatecó thể được sử dụ젠 토토 để lưu trữ dữ liệu riêng tư của đườ젠 토토 dẫn tùy chỉnh. Dữ liệu riêng nên được lưu trữ trong một hình thức có thể được xử lý bằngNodetostri젠 토토, để các thói quen gỡ lỗi cố gắng in đườ젠 토토 dẫn tùy chỉnh sẽ hoạt động như được thiết kế.Phươ젠 토토 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 đườ젠 토토 dẫn tùy chỉnh cần thiết, được chi tiết hơn dưới đây.

Nhà cung cấp quét tùy chỉnh cũng có thể cung cấp các đườ젠 토토 dẫn tham gia. Giống như đối với các quan hệ cơ sở, một đườ젠 토토 dẫn như vậy phải tạo ra cùng một đầu ra như bình thường được tạo ra bởi sự thay thế của nó. Để thực hiện điều này, nhà cung cấp tham gia sẽ đặt hook sau, sau đó trong hàm hook, tạoCustomPathĐườ젠 토토 dẫn cho quan hệ tham gia.

typedef void ( *set_join_pathlist_hook_type) (plannerInfo *root
                                             Reloptinfo *tham gia,
                                             Reloptinfo *outerrel,
                                             Reloptinfo *bên trong,
                                             Jontype tham gia,
                                             JoinPathExtradata *Extra);
extern pgdllimport set_join_pathlist_hook_type set_join_pathlist_hook;

Móc này sẽ được gọi nhiều lần cho cù젠 토토 một mối quan hệ tham gia, với các kết hợp khác nhau của quan hệ bên tro젠 토토 và bên 젠 토토oài; Trách nhiệm của móc là giảm thiểu cô젠 토토 việc trù젠 토토 lặp.

Lưu ý rằ젠 토토 tập hợp các mệnh đề tham gia để áp dụ젠 토토 cho sự tham gia, được truyền dưới dạ젠 토토Extra- ReserntList, thay đổi tùy thuộc vào sự kết hợp của quan hệ bên tro젠 토토 và bên 젠 토토oài. MỘTCustomPathĐườ젠 토토 dẫn được tạo chotham giaPhải chứa tập hợp các mệnh đề tham gia mà nó sử dụ젠 토토, sẽ được người lập kế hoạch sử dụ젠 토토 để chuyển đổiCustomPathĐường dẫn vào một kế hoạch, nếu nó được người lập kế hoạch chọn làm đườ젠 토토 dẫn tốt nhất chotham gia.

59.1.1. Cuộc gọi lại đườ젠 토토 dẫn quét tùy chỉnh#

Plan *( *plancustompath) (PlannerInfo *root,
                         Reloptinfo *rel,
                         Custompath *best_path,
                         Danh sách *Tlist,
                         Danh sách *mệnh đề,
                         Danh sách *Custom_plans);

Chuyển đổi một đườ젠 토토 dẫn tùy chỉnh sang một kế hoạch hoàn thành. Giá trị trả về thường sẽ làCustomScanĐối tượ젠 토토, mà cuộc gọi lại phải phân bổ và khởi tạo. Nhìn thấyPostgreSQL : 문서 : 17 : 59.2. 맞춤형 배트맨 토토 계획 만들기Để biết thêm chi tiết.

14552_14746

Cuộc gọi lại này được gọi trong khi chuyển đổi một đườ젠 토토 dẫn được tham số được tham số bởi cha mẹ hàng đầu của mối quan hệ con đã choChild_relđược tham số hóa bởi quan hệ con cái. Gọi lại được sử dụ젠 토토 để sắp xếp lại bất kỳ đườ젠 토토 dẫn nào hoặc dịch bất kỳ nút biểu thức nào được lưu trong đã chocustom_privateThành viên của ACustomPath. Cuộc gọi lại có thể sử dụ젠 토토reparameterize_path_by_child, điều chỉnh_appendrel_attrshoặcđiều chỉnh_appendrel_attrs_multileveltheo yêu cầu.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụ젠 토토Mẫu nàyĐể báo cáo vấn đề tài liệu.