PostgreSQL: kèo bóng đá hôm nay và ngày mai liệu: 9.6: | |||
---|---|---|---|
prev | UP | Chương 63. Chỉ số Gin | Tiếp theo |
TheGinGiao diện có mức độ trừu tượng cao, yêu cầu người thực hiện phương thức truy cập chỉ để thực hiện ngữ nghĩa của kiểu dữ liệu được truy cập. TheGinBản thân lớp chăm sóc sự đồng thời, ghi nhật ký và tìm kiếm cấu trúc cây.
Tất cả những gì cần thiết để có đượcGinPhương thức truy cập làm việc là thực hiện một vài phương pháp do người dùng xác định, xác định hành vi của các khóa trong cây và mối quan hệ giữa các khóa, kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay và truy vấn có thể lập chỉ kèo tỷ số bóng đá euro hôm nay. Tóm lại,GinKết hợp độ kèo tỷ số bóng đá euro hôm nay với tính tổng quát, tái sử dụng mã và giao diện sạch.
Có ba phương thức mà một lớp toán tử choGinphải cung cấp:
int so sánh (Datum A, Datum 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, cho biết phím thứ nhất có nhỏ hơn, hoặc lớn hơn hoặc lớn hơn thứ hai. Các phím null không bao giờ được truyền cho chức kèo tỷ số bóng đá euro hôm nay này.
Datum *ExtractValue (Datum ItemValue, Int32 *NKEYS,
Trả về một mảng palloc'd gồm các khóa được cung cấp một kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay. Số lượng khóa trả về phải được lưu trữ thành*NKEYS. Nếu bất kỳ phím nào có thể là null, cũng palloc một mảng*NKEYS boolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt kèo tỷ số bóng đá euro hôm nay cờ null này khi cần.*nullflagscó thể để lạinull(giá trị ban đầu của nó) nếu tất cả kèo tỷ số bóng đá euro hôm nay khóa không phải là null. Giá trị trả về có thể lànullNếu kèo tỷ số bóng đá euro hôm nay không chứa khóa.
10584_10724
Trả về một mảng palloc'd gồm kèo tỷ số bóng đá euro hôm nay khóa được cung cấp một giá trị được truy vấn; đó là,Truy vấnlà giá trị ở phía bên phải của toán tử có thể lập chỉ kèo tỷ số bóng đá euro hôm nay có phía bên trái là cột được lập chỉ kèo tỷ số bóng đá euro hôm nay.nlà số chiến lược của toán tử trong lớp toán tử (xemPhần 36.14.2). Thường,Trích xuất
Sẽ cần tham khảo ý kiếnnĐể xác định loại dữ liệu củaTruy vấnvà phương pháp nên sử dụng để trích xuất kèo tỷ số bóng đá euro hôm nay giá trị khóa. Số lượng khóa trả về phải được lưu trữ thành*NKEYS. Nếu bất kỳ phím nào có thể là null, cũng palloc một mảng*NKEYS boolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt kèo tỷ số bóng đá euro hôm nay cờ null này khi cần.*nullflagscó thể để lạinull(giá trị ban đầu của nó) nếu tất cả kèo tỷ số bóng đá euro hôm nay khóa không phải là null. Giá trị trả về có thể lànullNếuTruy vấnKhông chứa khóa.
SearchModelà đối số đầu ra cho phépTrích xuất
Để chỉ định chi tiết về cách tìm kiếm sẽ được thực hiện. Nếu như*SearchModeđược đặt thànhGin_Search_Mode_Default(là giá trị mà nó được khởi tạo trước khi gọi), chỉ các kèo tỷ số bóng đá euro hôm nay phù hợp với ít nhất một trong các khóa trả về được coi là phù hợp ứng cử viên. Nếu như*SearchModeđược đặt thànhGIN_SEARCH_MODE_INCLUDE_EMPTY, sau đó ngoài các kèo tỷ số bóng đá euro hôm nay chứa ít nhất một phím phù hợp, các kèo tỷ số bóng đá euro hôm nay không có khóa nào được coi là phù hợp ứng cử viên. (Ví dụ: Chế độ này rất hữu ích để triển khai các toán tử là bộ phận của các toán tử.) Nếu*SearchModeđược đặt thànhgin_search_mode_all, thì tất cả các kèo tỷ số bóng đá euro hôm nay không null trong chỉ kèo tỷ số bóng đá euro hôm nay được coi là phù hợp với ứng cử viên, cho dù chúng có khớp với bất kỳ khóa nào được trả về hay không. .access/gin.h.
pmatchlà đối số đầu ra để sử dụng khi hỗ trợ kết hợp một phần. Để sử dụng nó,Trích xuất
Phải phân bổ một mảng*NKEYSBooleans và lưu trữ địa chỉ của nó tại*pmatch. Mỗi phần tử của mảng phải được đặt thành true nếu khóa tương ứng yêu cầu khớp một phần, sai nếu không. Nếu như*pmatchđược đặt thànhnullSau đó, Gin giả định rằng không cần phải kết hợp một phần. Biến được khởi tạo thànhnullTrước khi gọi, vì vậy đối số này có thể bị bỏ qua bởi kèo tỷ số bóng đá euro hôm nay lớp toán tử không hỗ trợ kết hợp một phần.
Extra_Datalà đối số đầu ra cho phépTrích xuất
Để truyền dữ liệu bổ sung chonhất quán
và14078_14094
Phương pháp. Để sử dụng nó,Trích xuất
Phải phân bổ một mảng*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 kèo tỷ số bóng đá euro hôm nay con trỏ riêng lẻ. Biến được khởi tạo thànhnullTrước khi gọi, vì vậy đối số này có thể đơn giản bị bỏ qua bởi kèo tỷ số bóng đá euro hôm nay lớp toán tử không yêu cầu thêm dữ liệu. Nếu như*Extra_datađược đặt, toàn bộ mảng được chuyển cho14623_14635
Phương thức và phần tử thích hợp choso sánhspartial
Phương pháp.
14763_14894nhất quán
Hàm và một ternaryTriconsistent
chức kèo tỷ số bóng đá euro hôm nay.Triconsistent
Bao gồm chức kèo tỷ số bóng đá euro hôm nay của cả hai, vì vậy cung cấpTriconsistent
Một mình là đủ. Tuy nhiên, nếu biến thể Boolean rẻ hơn đáng kể để tính toán, thì có thể thuận lợi để cung cấp cả hai. Nếu chỉ có biến thể Boolean được cung cấp, một số tối ưu hóa phụ thuộc vào các kèo tỷ số bóng đá euro hôm nay chỉ kèo tỷ số bóng đá euro hôm nay từ chối trước khi tìm nạp tất cả các khóa bị vô hiệu hóa.
Bool nhất quán (kiểm tra bool [], StrategyNumber N, Datum Truy vấn, Int32 NKEYS, Con trỏ thêm_data [], Bool *Recheck, Datum Querykeys [], Bool Nullflags [])
Trả về đúng nếu một kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay thỏa mãn toán tử truy vấn 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). Chức kèo tỷ số bóng đá euro hôm nay 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, vìGinKhông lưu trữ các kèo tỷ số bóng đá euro hôm nay một cách rõ ràng. Thay vào đó, những gì có sẵn là kiến thức về giá trị khóa nào được trích xuất từ truy vấn xuất hiện trong một kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay nhất định. TheKiểm tramảng có độ dàiNKEYS, giống như số lượng khóa được trả về trước đóTrích xuất
cho điều nàyTruy vấnDatum. Mỗi yếu tố củaKiểm traMảng là đúng nếu kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay chứa khóa truy vấn tương ứng, tức là, nếu (kiểm tra [i] == true) phím thứ i củaTrích xuất
Mảng kết quả có mặt trong kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay. Bản gốc16616_16623Datum được truyền trong trường hợpnhất quán
Phương pháp cần tham khảo nó, và cũng vậyQuerykeys []vànullflags []mảng được trả về trước đóTrích xuất
. Extra_datalà mảng dữ liệu thêm được trả về bởiTrích xuất
hoặcnullnếu không.
KhiTrích xuất
Trả về phím null trongTruy vấn [], tương ứngKiểm tra []Phần tử là đúng nếu kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay chứa khóa null; đó là ngữ nghĩa củaKiểm tra []giống nhưkhông khác biệt với. Thenhất quán
Hàm có thể kiểm tra tương ứngnullflags []Phần tử nếu nó cần nói sự khác biệt giữa khớp giá trị thông thường và khớp null.
Khi thành công,*Recheck17650_17892*RecheckĐặt thành sự bảo đảm sai rằng Tuple Heap không khớp với truy vấn; và giá trị trả về thực sự với*RecheckĐặt thành True có nghĩa là Tuple Heap có thể khớp với truy vấn, do đó, nó cần được tìm nạp và kiểm tra lại bằng cách đánh giá toán tử truy vấn trực tiếp đối với kèo tỷ số bóng đá euro hôm nay được lập chỉ kèo tỷ số bóng đá euro hôm nay ban đầu.
18270_18429
Triconsistent
giống vớinhất quán
, nhưng thay vì booleans trongKiểm traVector, có ba giá trị có thể cho mỗi khóa:Gin_True, Gin_FalsevàGin_Maybe. Gin_FalsevàGin_TrueCó ý nghĩa tương tự như kèo tỷ số bóng đá euro hôm nay giá trị boolean thông thường, trong khigin_maybecó nghĩa là sự hiện diện của khóa đó không được biết đến. Khigin_maybeGiá trị có mặt, hàm chỉ nên trả vềGin_TrueNếu kèo tỷ số bóng đá euro hôm nay chắc chắn khớp với việc kèo tỷ số bóng đá euro hôm nay chỉ kèo tỷ số bóng đá euro hôm nay có chứa các khóa truy vấn tương ứng hay không. Tương tự như vậy, hàm phải trả vềGin_FalseChỉ khi vật phẩm chắc chắn không khớp, dù nó có chứa hay khôngGin_MaybeKhóa. Nếu kết quả phụ thuộc vàogin_maybeMục nhập, tức là, trận đấu không thể được xác nhận hoặc bác bỏ dựa trên các khóa truy vấn đã biết, chức kèo tỷ số bóng đá euro hôm nay phải trả vềgin_maybe.
Khi không cóGin_MaybeGiá trị trongKiểm traVector, Agin_maybeGiá trị trả về tương đương với việc cài đặtRecheckcờ trong booleannhất quán
chức kèo tỷ số bóng đá euro hôm nay.
Tùy chọn, một lớp toán tử choGinCó thể cung cấp phương pháp sau:
20104_20192
20211_20583ncủa toán tử tạo truy vấn kết hợp một phần được cung cấp, trong trường hợp ngữ nghĩa của nó là cần thiết để xác định khi nào nên kết thúc quá trình quét. Cũng,Extra_Datalà phần tử tương ứng của mảng dữ liệu phụ được thực hiện bởiTrích xuất
hoặcnullNếu không có. Các phím null không bao giờ được truyền cho chức kèo tỷ số bóng đá euro hôm nay này.
Để hỗ trợ"Kết hợp một phần"Truy vấn, lớp toán tử phải cung cấpCompanPartial
Phương pháp và nóTrích xuất
Phương thức phải đặtpmatchtham số khi gặp truy vấn một phần. Nhìn thấyPhần 63.4.2Để biết chi tiết.
kèo tỷ số bóng đá euro hôm nay loại dữ liệu thực tế của kèo tỷ số bóng đá euro hôm nay loại khác nhauDatumCác giá trị được đề cập ở trên thay đổi tùy thuộc vào lớp toán tử. Các giá trị kèo tỷ số bóng đá euro hôm nay được truyền đếnExtractValue
luôn thuộc loại đầu vào của lớp toán tử và tất cả kèo tỷ số bóng đá euro hôm nay 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ất
, nhất quán
vàTriconsistent
21929_22282Truy vấnĐối số, mặc dù loại thực tế có thể là thứ khác tùy thuộc vào toán tử.