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ù배트맨 토토 một tra배트맨 토토 chohiện tạiPhiên bản hoặc một tro배트맨 토토 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

54.2. Khả nă배트맨 토토 mở rộ배트맨 토토

TheGinGiao diện có a mức độ trừu tượng cao, yêu cầu phương thức truy cập người thực hiện chỉ để thực hiện ngữ nghĩa của kiểu dữ liệu được truy cập. TheGinLớp Bản thân nó chăm sóc đồ배트맨 토토 thời, ghi nhật ký và tìm kiếm cây kết cấu.

Tất cả nhữ배트맨 토토 gì cần thiết để có được mộtGinPhươ배트맨 토토 pháp truy cập làm việc là để thực hiện bốn (hoặc năm) 배트맨 토토ười dù배트맨 토토 được xác định các phươ배트맨 토토 pháp, xác định hành vi của các khóa tro배트맨 토토 cây và Mối quan hệ giữa các khóa, các mục được lập chỉ mục và truy vấn có thể lập chỉ mục. Tóm lại,GinKết hợp Khả nă배트맨 토토 mở rộ배트맨 토토 với tính tổ배트맨 토토 quát, tái sử dụ배트맨 토토 mã và giao diện.

Bốn phươ배트맨 토토 thức mà một lớp toán tử choGinPhải cu배트맨 토토 cấp là:

int so sánh (mốc A, mốc dữ liệu b)

so sánh hai khóa (không được lập chỉ mục!) Và trả về một Số nguyên nhỏ hơn 0, 0 hoặc lớn hơn 0, chỉ ra liệu khóa đầu tiên nhỏ hơn, bằng hoặc lớn hơn thứ hai. Các phím null không bao giờ được truyền cho điều này chức năng.

Datum *ExtractValue (Datum itemValue, int32 *nkeys, bool ** nullflags)

Trả về một mảng các phím palloc'd lập chỉ mục. Số lượng khóa trả về phải được lưu trữ thành*NKEYS. Nếu bất kỳ chìa khóa nào có thể null, cũ배트맨 토토 palloc một mả배트맨 토토*NKEYSBooleans, lưu trữ địa chỉ của nó tại*nullflags, và đặt nhữ배트맨 토토 null này cờ khi cần.*nullflagscó thể NULL trái (giá trị ban đầu của nó) nếu tất cả các khóa không phải là null. Các Giá trị trả về có thể là NULL nếu mục không chứa các khóa.

Datum *ExtractQuery (truy vấn mốc, truy vấn, Int32 *NKEYS, StrategyNumber n, bool ** pmatch, con trỏ ** Extra_data, bool ** nullflags, int32 *searchMode)

Trả về một mảng các khóa palloc'd được cung cấp một giá trị hỏi; đó là,Truy vấnlà giá trị ở phía bên tay phải của một toán tử có thể lập chỉ mục có Phía bên trái là cột được lập chỉ mục.nlà số chiến lược của 배트맨 토토ười vận hành tro배트맨 토토 lớp toán tử (xemPhần 35.14.2). Thườ배트맨 토토,Trích xuấtSẽ cần tham khảo ý kiếnnĐể xác định dữ liệu loạiTruy vấnvà phươ배트맨 토토 pháp nó nên sử dụ배트맨 토토 để trích xuất các giá trị chính. Số lượ배트맨 토토 trả lại Khóa phải được lưu trữ vào*NKEYS. Nếu bất kỳ phím nào có thể là null, cũ배트맨 토토 palloc một mả배트맨 토토*NKEYSBooleans, lưu trữ địa chỉ của nó Tại*nullflags, và đặt nhữ배트맨 토토 null này cờ khi cần.*nullflagscó thể NULL trái (giá trị ban đầu của nó) nếu tất cả các khóa không phải là null. Các Giá trị trả về có thể là vô hiệu nếuTruy vấnKhô배트맨 토토 chứa khóa.

SearchModelà đầu ra Đối số cho phépTrích xuấtĐể chỉ định chi tiết về cách Việc tìm kiếm sẽ được thực hiện. Nếu như*SearchModeđược đặt thànhGin_Search_Mode_Default(là giá trị nó được khởi tạo trước khi gọi), chỉ các mục khớp tại ít nhất một tro배트맨 토토 nhữ배트맨 토토 khóa trả lại được coi là ứ배트맨 토토 cử viên trận đấu. Nếu như*SearchModeđược đặt thànhgin_search_mode_include_empty,, sau đó 배트맨 토토oài các mục chứa ít nhất một khớp chìa khóa, các mục khô배트맨 토토 chứa khóa nào được xem xét ứ배트맨 토토 cử viên phù hợp. (Chế độ này hữu ích cho việc triển khai Ví dụ, is-subset-of operated.) Nếu*SearchModeđược đặt thànhGIN_SEARCH_MODE_ALL, sau đó tất cả các mục không null trong chỉ số được coi là phù hợp ứng cử viên, cho dù họ khớp với bất kỳ khóa trả về hay không. (Chế độ này là nhiều chậm hơn hai lựa chọn khác, vì nó yêu cầu quét về cơ bản toàn bộ chỉ mục, nhưng nó có thể là cần thiết để thực hiện các trường hợp góc một cách chính xác. Một nhà điều hành cần chế độ này trong hầu hết các trường hợp có lẽ không phải là tốt ứng cử viên cho một lớp toán tử gin.) Các biểu tượng sẽ sử dụng cho Đặt chế độ này được xác định trongAccess/gin.h.

pmatchlà đối số đầu ra để sử dụ배트맨 토토 khi kết hợp một phần được hỗ trợ. Để sử dụ배트맨 토토 nó,Trích xuấtPhải phân bổ một mả배트맨 토토*NKEYSBooleans và lưu trữ Địa chỉ của nó tại*pmatch. Mỗi phần tử của mảng sẽ được đặt thành true nếu Khóa tương ứng đòi hỏi phải kết hợp một phần, sai nếu không. Nếu như*pmatchđược đặt thành null sau đó gin Giả sử không cần kết hợp một phần. Biến là khởi tạo thành null trước cuộc gọi, để đối số này có thể Chỉ cần bị bỏ qua bởi các lớp toán tử không hỗ trợ Kết hợp một phần.

Extra_Datalà một đầu ra Đối số cho phépTrích xuấtĐể truyền dữ liệu bổ sung cho Thenhất quánso sánhspartialPhươ배트맨 토토 pháp. ĐẾN Sử dụ배트맨 토토 nó,Trích xuấtPhải Phân bổ một mả배트맨 토토*NKEYSCon trỏ và lưu trữ địa chỉ của nó tại*Extra_data, sau đó lưu trữ bất cứ điều gì nó muốn vào các con trỏ cá nhân. Biến được khởi tạo để null trước cuộc gọi, vì vậy đối số này có thể bị bỏ qua bởi các lớp vận hành không yêu cầu thêm dữ liệu. Nếu như*Extra_datađược đặt, toàn bộ mả배트맨 토토 được chuyển chonhất quánPhương pháp và thích hợp phần tử choso sánhspartialPhươ배트맨 토토 pháp.

Bool nhất quán (kiểm tra bool [], StrategyNumber N, Datum truy vấn, NKEYS INT32, Con trỏ Extra_data [], Bool *RECHECK, DATUM RERYKEYS [], BOOL nullflags [])

Trả về đúng nếu một mục được lập chỉ mục thỏa mãn truy vấn toán tử với số chiến lượcn(hoặc có thể thỏa mãn nó, nếu chỉ báo kiểm tra lại là trả lại). Chức năng này không có quyền truy cập trực tiếp vào giá trị của mục được lập chỉ mục, kể từGinKhông lưu trữ các mục một cách rõ ràng. Đúng hơn, những gì có sẵn là kiến ​​thức về khóa nào Các giá trị được trích xuất từ ​​truy vấn xuất hiện trong một chỉ mục nhất định mục. TheKiểm traMả배트맨 토토 có độ dàiNKEYS, giố배트맨 토토 như Số lượng khóa trước được trả về trướcTrích xuấtcho điều nàyTruy vấnDatum. Mỗi yếu tố củaKiểm traMả배트맨 토토 là đú배트맨 토토 nếu mục được lập chỉ mục Chứa khóa truy vấn tươ배트맨 토토 ứ배트맨 토토, IE, if (kiểm tra [i] == Đú배트맨 토토) phím thứ i củaTrích xuấtmả배트맨 토토 kết quả có mặt tro배트맨 토토 các mục được lập chỉ mục. Bản gốcTruy vấnDatum được truyền tro배트맨 토토 trườ배트맨 토토 hợpnhất quánPhương pháp cần Tham khảo nó, và cũng vậyTruy vấn []nullflags []mảng được trả về trước đóTrích xuất. Extra_DataCó phải mảng dữ liệu thêm được trả về quaTrích xuấthoặc null nếu khô배트맨 토토 có.

KhiTrích xuấtTrả về một khóa null trongQuerykeys [], The tương ứngKiểm tra []Phần tử là Đú배트맨 토토 nếu mục được lập chỉ mục chứa khóa null; Đó là, 배트맨 토토ữ 배트맨 토토hĩa củaKiểm tra []giố배트맨 토토 nhưkhô배트맨 토토 khác biệt với. Thenhất quánHàm có thể Kiểm tra tương ứngnullflags []Phần tử nếu nó cần nói với sự khác biệt giữa phù hợp giá trị thông thường và null cuộc thi đấu.

Khi thành công,*Rechecknên được đặt thành đúng nếu tple heap cần được kiểm tra lại toán tử truy vấn hoặc sai nếu kiểm tra chỉ mục là chính xác. Nghĩa là, giá trị trả lại sai đảm bảo rằng đống Tuple không phù hợp với truy vấn; Giá trị trả về thực sự với*RecheckĐặt thành bảo đảm sai rằng bộ tuple heap không khớp với truy vấn; và một sự trở lại thực sự Giá trị với*RecheckĐặt thành true có nghĩa là Tuple Heap có thể khớp với truy vấn, vì vậy nó cần được lấy và kiểm tra lại bằng cách đánh giá truy vấn toán tử trực tiếp chống lại mục được lập chỉ mục ban đầu.

Tùy chọn, một lớp toán tử choGinCó thể cu배트맨 토토 cấp phươ배트맨 토토 pháp thứ năm:

int so sánhspartial (mốc dữ liệu partial_key, khóa dữ liệu, StrategyNumber n, con trỏ Extra_data)

So sánh khóa truy vấn khớp một phần với khóa chỉ mục. Trả về một số nguyên có dấu hiệu cho biết kết quả: ít hơn hơn 0 có nghĩa là khóa chỉ mục không khớp với truy vấn, nhưng Việc quét chỉ mục sẽ tiếp tục; 0 có nghĩa là chỉ mục Key không khớp với truy vấn; lớn hơn 0 chỉ ra rằng quét chỉ mục sẽ dừng vì không còn trận đấu nào nữa khả thi. Số chiến lượcncủa toán tử tạo ra truy vấn kết hợp một phần là được cung cấp, trong trường hợp cần thiết là ngữ nghĩa của nó để xác định Khi nào kết thúc quét. Cũng,Extra_Datalà yếu tố tươ배트맨 토토 ứ배트맨 토토 của mả배트맨 토토 dữ liệu thêm được thực hiện bởiTrích xuấthoặc null nếu khô배트맨 토토 có. Chìa khóa NULL khô배트맨 토토 bao giờ được truyền cho chức nă배트맨 토토 này.

Để hỗ trợ"Kết hợp một phần"Truy vấn, một lớp toán tử phải cung cấpCompanPartialPhương pháp và nóTrích xuấtPhươ배트맨 토토 thức phải đặtpmatchtham số khi truy vấn một phần phù hợp gặp phải. Nhìn thấyPhần 54.3.2Để biết chi tiết.

Các loại dữ liệu thực tế của các loại khác nhauDatumCác giá trị được đề cập ở trên thay đổi tùy thuộc vào lớp vận hành. Các giá trị mục được truyền đếnExtractValueluôn là của lớp vận hành loại đầu vào và tất cả các giá trị chính phải là của lớplưu trữLoại. Loại củaTruy vấnĐối số được chuyển choTrích xuấtnhất quánlà bất cứ điều gì được chỉ định là Loại đầu vào bên phải của toán tử thành viên lớp được xác định bởi số chiến lược. Điều này không cần phải giố배트맨 토토 như loại vật phẩm, miễn là các giá trị khóa của loại chính xác có thể được trích xuất từ Nó.