Phiên bản được hỗ trợ:16 / 15 / 14 / 13
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
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 cách đọc kèo bóng đá trang chohiện tạiPhiên bản hoặc cách đọc kèo bóng đá trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

64.3. cách đọc kèo bóng đá

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ó được cách đọc kèo bóng đáGinPhương pháp 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, cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá và truy vấn có thể lập chỉ cách đọc kèo bóng đá. Tóm lại,GinKết hợp độ cách đọc kèo bóng đá với tính tổng quát, tái sử dụng mã và giao diện sạch.

Có hai phương pháp mà cách đọc kèo bóng đá lớp toán tử choGinPhải cung cấp:

9747_9817

Trả về một mảng palloc'd gồm các phím được cung cấp một cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá. 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 cách đọc kèo bóng đá mảng*NKEYS boolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt các cờ null này khi cần.*nullflagscó thể để lạinull(giá trị ban đầu của nó) nếu tất cả các khóa không phải là null. Giá trị trả về có thể lànullNếu cách đọc kèo bóng đá không chứa khóa.

10493_10633

Trả về cách đọc kèo bóng đá mảng palloc'd gồm các khóa được cung cấp cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá có phía bên trái là cột được lập chỉ cách đọc kèo bóng đá.nlà số chiến lược của toán tử trong lớp toán tử (xemPhần 37.14.2). Thường,Trích xuấtSẽ 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 các 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 cách đọc kèo bóng đá mảng*NKEYS boolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt các cờ null này khi cần thiết.*nullflagsCó thể để lạinull(giá trị ban đầu của nó) nếu tất cả các 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 đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 cách đọc kèo bóng đá chứa ít nhất một phím phù hợp, các cách đọc kèo bóng đá không chứa 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 cách đọc kèo bóng đá không null trong chỉ cách đọc kèo bóng đá đượ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à cách đọc kèo bóng đá đối số đầu ra để sử dụng khi hỗ trợ kết hợp cách đọc kèo bóng đá phần. Để sử dụng nó,Trích xuấtPhải phân bổ cách đọc kèo bóng đá 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 cách đọc kèo bóng đá phần, sai nếu không.*pmatchđược đặt thànhnullSau đó, Gin giả định rằng không cần kết hợp cách đọc kèo bóng đá 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 các lớp toán tử không hỗ trợ khớp cách đọc kèo bóng đá phần.

Extra_Datalà đối số đầu ra cho phépTrích xuấtĐể truyền dữ liệu bổ sung chonhất quánSo sánhpartialPhương pháp. Để sử dụng nó,Trích xuấtPhải phân bổ cách đọc kèo bóng đá 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 các 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 các 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 chonhất quánPhương thức và phần tử thích hợp choCompanPartialPhương pháp.

Một lớp toán tử cũng phải cung cấp một chức cách đọc kèo bóng đá để kiểm tra xem một mục được lập chỉ mục có phù hợp với truy vấn không. Nó có hai hương vị, một booleannhất quánHàm và cách đọc kèo bóng đá ternaryTriconsistentchức cách đọc kèo bóng đá.TriconsistentBao gồm chức cách đọc kèo bóng đá của cả hai, vì vậy cung cấpTriconsistentcách đọc kèo bóng đá 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.

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 cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá 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 cách đọc kèo bó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, vìGinKhông lưu trữ các cách đọc kèo bóng đá 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 cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá nhất định.Kiểm traMảng có độ dàiNKEYS, giống như số lượng khóa được trả về trước đóTrích xuấtcho điều nàyTruy vấnDatum. Mỗi yếu tố củaKiểm traMảng là đúng nếu cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá 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ấtMảng kết quả có mặt trong cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá. Bản gốcTruy vấnDatum được truyền trong trường 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_datalà mảng dữ liệu thêm được trả về bởiTrích xuấthoặcnullNếu không.

KhiTrích xuấtTrả về phím null trongTruy vấn [], tương ứngKiểm tra []Phần tử là đúng nếu cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá 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ánHàm có thể kiểm tra tương ứngnullflags []Phần tử nếu nó cần cho biết sự khác biệt giữa phù hợp giá trị thông thường và khớp null.

Thành công,*Rechecknên được đặt thành true nếu tple heap cần được kiểm tra lại đối với toán tử truy vấn hoặc sai nếu kiểm tra chỉ cách đọc kèo bóng đá là chính xác. Đó là, một giá trị trả về sai đảm bảo rằng Tuple Heap không khớp với truy vấn;*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 với cách đọc kèo bóng đá được lập chỉ cách đọc kèo bóng đá ban đầu.

18512_18671

Triconsistenttương tự nhưnhấ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_Falsegin_maybe. gin_falsegin_trueCó ý nghĩa tương tự như các 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 cách đọc kèo bóng đá chắc chắn khớp với việc cách đọc kèo bóng đá chỉ cách đọc kèo bóng đá 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ứaGin_MaybeKhóa. Nếu kết quả phụ thuộc vàogin_maybecách đọc kèo bóng đá 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, hàm 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ánchức cách đọc kèo bóng đá.

Ngoài ra, Gin phải có cách sắp xếp các giá trị chính được lưu trữ trong chỉ cách đọc kèo bóng đá. Lớp toán tử có thể xác định thứ tự sắp xếp bằng cách chỉ định phương thức so sánh:

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 bằng hoặc lớn hơn thứ hai hay không. Các phím null không bao giờ được truyền cho chức cách đọc kèo bóng đá này.

Ngoài ra, nếu lớp toán tử không cung cấpso sánhPhương thức, Gin sẽ tra cứu lớp toán tử Btree mặc định cho kiểu dữ liệu khóa chỉ mục và sử dụng chức cách đọc kèo bóng đá so sánh của nó. Bạn nên chỉ định chức cách đọc kèo bóng đá so sánh trong lớp toán tử GIN chỉ dành cho một kiểu dữ liệu, vì việc tìm kiếm lớp toán tử Btree có giá một vài chu kỳ.Array_ops) Thông thường không thể chỉ định cách đọc kèo bóng đá hàm so sánh duy nhất.

Tùy chọn, cách đọc kèo bóng đá lớp toán tử choGinCó thể cung cấp phương pháp sau:

21584_21672

So sánh khóa truy vấn khớp một phần với khóa chỉ cách đọc kèo bóng đá. Trả về một số nguyên có dấu cho biết kết quả: nhỏ hơn 0 có nghĩa là khóa chỉ cách đọc kèo bóng đá không khớp với truy vấn, nhưng việc quét chỉ cách đọc kèo bóng đá sẽ tiếp tục;ncủa toán tử tạo truy vấn kết hợp cách đọc kèo bóng đá 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ấthoặcnullNếu không có. Các phím null không bao giờ được truyền cho chức cách đọc kèo bóng đá này.

Để hỗ trợHồiKết hợp cách đọc kèo bóng đá phầnTruy vấn, lớp toán tử phải cung cấpso sánhspartialPhương pháp và nóTrích xuấtPhương thức phải đặtpmatchtham số khi gặp truy vấn cách đọc kèo bóng đá phần. Nhìn thấyPhần 64.4.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 toán tử. Các giá trị cách đọc kèo bóng đá được truyền đếnExtractValueluôn thuộc loại đầu vào của lớp vận hành 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ất, nhất quán​​vàTriconsistentlà bất cứ thứ gì 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ống như loại được lập chỉ cách đọc kèo bóng đá, miễn là các giá trị chính của loại chính xác có thể được trích xuất từ ​​nó.Truy 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ử.