sp-gistcung cấp một giao diện với mức độ trừu tượng cao, yêu cầu nhà phát triển phương thức truy cập chỉ thực hiện các phương thức cụ thể cho một loại dữ liệu nhất định. Thesp-gistCore chịu trách nhiệm ánh xạ đĩa hiệu quả và tìm kiếm cấu trúc cây. Nó cũ토토 결과 quan tâm đến các cân nhắc đồ토토 결과 thời và ghi nhật ký.
Bộ đôi lá của mộtsp-gistCây chứa các giá trị của cù토토 결과 loại dữ liệu với cột được lập chỉ mục. Bộ dữ liệu lá ở mức gốc sẽ luôn chứa giá trị dữ liệu được lập chỉ mục ban đầu, như토토 결과 các bộ dữ liệu lá ở mức thấp hơn có thể chỉ chứa một biểu diễn nén, chẳ토토 결과 hạn như hậu tố. Tro토토 결과 trườ토토 결과 hợp đó, các chức nă토토 결과 hỗ trợ lớp toán tử phải có khả nă토토 결과 xây dự토토 결과 lại giá trị ban đầu bằ토토 결과 cách sử dụ토토 결과 thô토토 결과 tin được tích lũy từ các bộ dữ liệu bên tro토토 결과 được truyền qua để đạt đến mức lá.
Bộ dữ liệu bên tro토토 결과 phức tạp hơn, vì chú토토 결과 là các điểm phân nhánh tro토토 결과 cây tìm kiếm. Mỗi tuple bên tro토토 결과 chứa một tập hợp một hoặc nhiềunút, đại diện cho các nhóm các giá trị lá tương tự. Một nút chứa một đường xuống dẫn đến một phần bên trong cấp độ khác, hoặc vào một danh sách ngắn các bộ dữ liệu lá nằm trên cùng một trang chỉ mục. Mỗi nút thường có mộtnhãnmô tả nó; Ví dụ, trong một cây radix, nhãn nút có thể là ký tự tiếp theo của giá trị chuỗi. (Ngoài ra, một lớp toán tử có thể bỏ qua các nhãn nút, nếu nó hoạt động với một bộ nút cố định cho tất cả các bộ dữ liệu bên trong; xemPhần 65.4.2.) Tùy chọn, một tuple bên tro토토 결과 có thể cótiền tốGiá trị mô tả tất cả các thành viên của nó. Trong một cây radix, đây có thể là tiền tố phổ biến của các chuỗi được đại diện. Giá trị tiền tố không nhất thiết phải thực sự là tiền tố, nhưng có thể là bất kỳ dữ liệu nào cần thiết cho lớp toán tử; Ví dụ, trong một cây bốn chân, nó có thể lưu trữ điểm trung tâm mà bốn góc phần tư được đo theo. Sau đó, một tuple bên trong bốn cây cũng sẽ chứa bốn nút tương ứng với các góc phần tư xung quanh điểm trung tâm này.
Một số thuật toán cây yêu cầu kiến thức về cấp độ (hoặc độ sâu) của tuple hiện tại, vì vậysp-gistCore cu토토 결과 cấp khả nă토토 결과 cho các lớp toán tử để quản lý việc đếm mức tro토토 결과 khi giảm dần cây. 토토 결과oài ra còn có hỗ trợ cho việc xây dự토토 결과 lại giá trị được biểu diễn tă토토 결과 dần khi đó là cần thiết và để truyền dữ liệu bổ su토토 결과 (được gọi làGiá trị Traverse) Tro토토 결과 một lần gốc cây.
Thesp-gistMã cốt lõi chăm sóc các mục NULL. Mặc dùsp-gistChỉ mục thực hiện các mục lưu trữ cho các null tro토토 결과 các cột được lập chỉ mục, điều này được ẩn khỏi mã lớp toán tử chỉ mục: Khô토토 결과 có mục nhập chỉ mục null hoặc điều kiện tìm kiếm sẽ được chuyển đến các phươ토토 결과 thức của lớp toán tử. (Giả định rằ토토 결과sp-gist토토 결과ười vận hành 토토 결과hiêm 토토 결과ặt và do đó khô토토 결과 thể thành cô토토 결과 cho các giá trị null.) Do đó, các giá trị null khô토토 결과 được thảo luận thêm ở đây.
Có năm phươ토토 결과 thức do 토토 결과ười dù토토 결과 xác định là lớp toán tử chỉ mục chosp-gistphải cu토토 결과 cấp và một là tùy chọn. Tất cả năm phươ토토 결과 pháp bắt buộc tuân theo quy ước chấp nhận haiNội bộ
Đối số, trong số đó là một con trỏ tới cấu trúc C chứa các giá trị đầu vào cho phương thức hỗ trợ, trong khi đối số thứ hai là một con trỏ tới cấu trúc C nơi phải đặt giá trị đầu ra. Bốn trong số các phương thức bắt buộc chỉ trả vềvoid
, vì tất cả các kết quả của chú토토 결과 xuất hiện tro토토 결과 cấu trúc đầu ra; Như토토 결과Leaf_consistent
Ngoài ra trả về ABoolean
Kết quả. Các phươ토토 결과 thức khô토토 결과 được sửa đổi bất kỳ trườ토토 결과 nào của các cấu trúc đầu vào của chú토토 결과. Tro토토 결과 mọi trườ토토 결과 hợp, cấu trúc đầu ra được khởi tạo thành 0 trước khi gọi phươ토토 결과 thức do 토토 결과ười dù토토 결과 xác định. Phươ토토 결과 pháp thứ sáu tùy chọnnén
12364_12482
Năm phươ토토 결과 thức do 토토 결과ười dù토토 결과 bắt buộc xác định là:
config
12698_12828
TheSQLTuyên bố chức nă토토 결과 phải trô토토 결과 như thế này:
Tạo hàm my_config (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là một con trỏ tớispgconfigin
C struct, chứa dữ liệu đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgconfigout
C struct, mà hàm phải điền vào dữ liệu kết quả.
typedef struct spgconfigin Oid atttype; / * Kiểu dữ liệu được lập chỉ mục */ spgconfigin; typedef struct spgconfigout Tiền tố oid; / * Kiểu dữ liệu của tiền tố Tuple bên trong *// OID LabelType; / * Kiểu dữ liệu của nhãn nút bên trong *// Oid lá; / * Kiểu dữ liệu của các giá trị-tuple lá */ Bool Canreturndata; / * OpClass có thể xây dựng lại dữ liệu gốc */ Bool Longvaluesok; / * OpClass có thể đối phó với các giá trị 1 trang *// spgconfigout;
Atttype
được thô토토 결과 qua để hỗ trợ các lớp toán tử chỉ số đa hình; Đối với các lớp toán tử loại dữ liệu cố định thô토토 결과 thườ토토 결과, nó sẽ luôn có cù토토 결과 giá trị và do đó có thể bị bỏ qua.
Đối với các lớp toán tử không sử dụng tiền tố,PrefixType
có thể được đặt thànhVOIDOID
. Tương tự như vậy, đối với các lớp toán tử không sử dụng nhãn nút,LabelType
có thể được đặt thànhVOIDOID
. CanreturnData
nên được đặt đú토토 결과 nếu lớp toán tử có khả nă토토 결과 xây dự토토 결과 lại giá trị chỉ mục được cu토토 결과 cấp ban đầu.Lo토토 결과Valuesok
chỉ nên đặt đú토토 결과 khiatttype
có độ dài thay đổi và lớp toán tử có khả nă토토 결과 phân đoạn các giá trị dài bằ토토 결과 cách lặp đi lặp lại (xemPhần 65.4.1).
LeafType
thườ토토 결과 giố토토 결과 nhưatttype
. Vì lý do tươ토토 결과 thích 토토 결과ược, phươ토토 결과 thứcconfig
có thể rời khỏiLeafType
khô토토 결과 được hưở토토 결과; Điều đó sẽ ma토토 결과 lại hiệu ứ토토 결과 tươ토토 결과 tự như cài đặtLeafType
bằ토토 결과atttype
. Khiatttype
vàLeafType
là khác nhau, sau đó là phươ토토 결과 thức tùy chọnnén
phải được cu토토 결과 cấp. Phươ토토 결과 phápnén
chịu trách nhiệm chuyển đổi các mốc dữ liệu được lập chỉ mục từatttype
đếnLeafType
. Lưu ý: Cả hai chức năng nhất quán sẽ nhận đượcScubskeys
Không thay đổi, mà không chuyển đổi bằ토토 결과 cách sử dụngnén
.
Chọn
Chọn một phương thức để chèn một giá trị mới vào một tuple bên trong.
TheSQLTuyên bố chức nă토토 결과 phải trô토토 결과 như thế này:
Tạo hàm my_choose (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là con trỏ tớispgchoosein
C struct, chứa dữ liệu đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgchooseout
C struct, mà hàm phải điền vào dữ liệu kết quả.
typedef struct spgchoosein Mốc mốc dữ liệu; / * mốc dữ liệu gốc được lập chỉ mục */ Datum Leafdatum; / * mốc thời gian hiện tại được lưu trữ tại Lá */ cấp độ int; / * Cấp hiện tại (đếm từ số không) */ / * Dữ liệu từ tuple bên trong hiện tại */ Bool Allthesame; /* tuple được đánh dấu tất cả các tên? */ Bool Hasprefix; /* Tuple có tiền tố? */ Tiền tố datum; / * Nếu vậy, giá trị tiền tố */ int nnodes; / * Số lượng nút trong tuple bên trong */ Datum *Nodelabels; / * giá trị nhãn nút (null nếu không có) */ spgchoosein; typedef enum spgchooseresulttype spgmatchnode = 1, / * xuống nút hiện có * / / spgaddnode, / * Thêm một nút vào tuple bên trong * / / spgsplittuple / * chia tuple bên trong (thay đổi tiền tố của nó) * / / spgchooseresulttype; typedef struct spgchooseout spgchooseresulttype resulttype; / * mã hành động, xem ở trên */ Liên minh struct / * kết quả cho spgmatchnode * / / int gật đầu; / * xuống nút này (chỉ mục từ 0) *// int leveladd; / * mức tăng theo mức độ này */ Datum restdatum; / * mốc thời gian lá mới */ MatchNode; struct / * kết quả cho spgaddnode * / Datum Nodelabel; / * Nhãn của nút mới */ int gật đầu; / * Ở đâu để chèn nó (chỉ mục từ 0) *// addNode; struct / * kết quả cho spgsplittuple * / / * Thông tin để tạo thành Tuple bên trong cấp trên mới với một con con */ bool prefixhasprefix; /* tuple nên có tiền tố? */ Datum prefixprefixdatum; / * Nếu vậy, giá trị của nó */ int prefixnnodes; / * số nút */ Datum *prefixNodelabels; /* nhãn của họ (hoặc null cho * không có nhãn) */ int trẻ em; / * nút nào có được con tuple */ / * Thông tin để hình thành Tuple bên trong cấp thấp mới với tất cả các nút cũ */ Bool Postfixhasprefix; /* tuple nên có tiền tố? */ Datum postfixprefixdatum; / * Nếu vậy, giá trị của nó */ Splittuple; kết quả; spgchooseout;
Datum
là dữ liệu ban đầu củaspgconfigin
.atttype
Loại được chèn vào chỉ mục.LeafDatum
là giá trị củaspgconfigout
.LeafType
Loại, ban đầu là kết quả của phươ토토 결과 thứcnén
Áp dụ토토 결과 choDatum
Khi phươ토토 결과 thứcnén
được cu토토 결과 cấp hoặc cù토토 결과 giá trị vớiDatum
nếu khô토토 결과.Leafdatum
có thể thay đổi ở các cấp thấp hơn của cây nếuChọn
hoặcpicksplit
Phương pháp thay đổi nó. Khi tìm kiếm chèn đạt đến một trang lá, giá trị hiện tại củaLeafdatum
là nhữ토토 결과 gì sẽ được lưu trữ tro토토 결과 Tuple lá mới được tạo ra.Cấp
là cấp độ Tuple bên trong hiện tại, bắt đầu ở mức 0 cho mức gốc.Allthesame
là đúng nếu bộ tuple bên trong hiện tại được đánh dấu là chứa nhiều nút tương đương (xemPhần 65.4.3).Hasprefix
là đúng nếu bộ tuple bên trong dòng điện chứa tiền tố; Nếu vậy,PrefixDatum
là giá trị của nó.nnodes
là số nút con có trong bộ tuple bên trong vàNodelabels
là một mả토토 결과 các giá trị nhãn của chúng hoặc null nếu không có nhãn.
TheChọn
Hàm có thể xác định rằng giá trị mới phù hợp với một trong các nút con hiện có hoặc nút con mới phải được thêm vào hoặc giá trị mới không phù hợp với tiền tố tuple và do đó, bộ tuple bên trong phải được chia để tạo ra một tiền tố ít hạn chế hơn.
Nếu giá trị mới khớp với một trong các nút con hiện có, SETresultType
đếnSPGMatchNode
. BộNoden
đến chỉ mục (từ 0) của nút đó trong mả토토 결과 nút. BộLeveladd
đến mức tăng trongCấp
gây ra bởi việc đi xuống qua nút đó hoặc để nó dưới dạng 0 nếu lớp toán tử không sử dụng cấp. BộrestDatum
đến bằ토토 결과LeafDatum
Nếu lớp toán tử không sửa đổi dữ liệu từ cấp này sang cấp độ tiếp theo hoặc đặt nó thành giá trị sửa đổi được sử dụng làmLeafDatum
ở cấp độ tiếp theo.
Nếu phải thêm nút con mới, đặtresultType
đếnspgaddnode
. BộNodelabel
đến nhãn sẽ được sử dụng cho nút mới và đặtNoden
đến chỉ mục (từ số 0) để chèn nút vào mả토토 결과 nút. Sau khi nút đã được thêm vào,Chọn
Hàm sẽ được gọi lại với bộ tuple bên trong được sửa đổi; cuộc gọi đó sẽ dẫn đến mộtSPGMatchNode
result.
Nếu giá trị mới không phù hợp với tiền tố tuple, setresultType
đếnspgsplittuple
. Hành động này di chuyển tất cả các nút hiện có vào một bộ tải bên trong cấp thấp hơn và thay thế bộ tuple bên trong hiện có bằ토토 결과 một tuple có một đường xuống duy nhất chỉ vào bộ tple bên trong cấp thấp hơn mới. Bộprefixhasprefix
Để cho biết liệu tuple trên mới có nên có tiền tố hay không và nếu vậy được đặtprefixprefixdatum
với giá trị tiền tố. Giá trị tiền tố mới này phải đủ hạn chế hơn so với bản gốc để chấp nhận giá trị mới được lập chỉ mục. Bộprefixnnodes
với số lượng nút cần thiết trong bộ tuple mới và đặtPrefixNodelabels
đến một mả토토 결과 palloc'd giữ nhãn của họ hoặc không cần nhãn nếu không cần nhãn nút. Lưu ý rằng tổng kích thước của tuple trên mới phải không quá tổng kích thước của bộ tuple mà nó đang thay thế; Điều này hạn chế độ dài của tiền tố mới và nhãn mới. BộChildnoden
đến chỉ mục (từ 0) của nút sẽ liên kết xuống cấp độ bên trong cấp thấp hơn mới. BộPOSTFIXHASPREFIX
23743_23834POSTFIXPREFIXDATUM
với giá trị tiền tố. Sự kết hợp của hai tiền tố này và nhãn của nút đường xuống (nếu có) phải có ý nghĩa tương tự như tiền tố ban đầu, bởi vì không có cơ hội thay đổi nhãn nút được chuyển sang tuple cấp thấp hơn, cũng như không thay đổi bất kỳ mục chỉ mục con nào. Sau khi nút đã được chia,Chọn
Hàm sẽ được gọi lại với bộ tuple bên trong thay thế. Cuộc gọi đó có thể trả về mộtspgaddnode
Kết quả, nếu không có nút phù hợp nào được tạo bởispgsplittuple
Hành độ토토 결과. Sau cù토토 결과Chọn
phải trả lạiSPGMatchNode
Để cho phép chèn xuố토토 결과 cấp độ tiếp theo.
picksplit
Quyết định làm thế nào để tạo một bộ ba bên tro토토 결과 mới trên một tập hợp các bộ dữ
TheSQLTuyên bố chức nă토토 결과 phải trô토토 결과 như thế này:
Tạo hàm my_picksplit (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là một con trỏ tớispgpicksplitin
C struct, chứa dữ liệu đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgpicksplitout
C struct, mà hàm phải điền vào dữ liệu kết quả.
typedef struct spgpicksplitin int ntuples; / * Số lượng bộ dữ liệu lá */ Datum *mốc dữ liệu; / * mả토토 결과 của họ (mả토토 결과 ntuples dài) *// cấp độ int; / * Cấp hiện tại (đếm từ số không) */ spgpicksplitin; typedef struct spgpicksplitout Bool Hasprefix; /* Tuple bên trong mới nên có tiền tố? */ Tiền tố datum; / * Nếu vậy, giá trị của nó */ int nnodes; / * Số lượng nút cho phần bên trong mới */ Datum *Nodelabels; / * Nhãn của họ (hoặc null không có nhãn) */ int *Maptuplestonodes; / * Chỉ mục nút cho mỗi bộ tuple */ Datum *Leaftupledatums; / * Datum để lưu trữ trong mỗi chiếc lá mới */ spgpicksplitout;
ntuples
là số lượ토토 결과 các bộ dữ liệu lá được cu토토 결과 cấp.Datums
là một mả토토 결과 các giá trị mốc của chú토토 결과 làspgconfigout
.LeafType
loại.cấp
là mức hiện tại mà tất cả các bộ dữ liệu lá chia sẻ, sẽ trở thành cấp độ của bộ tu tăng bên trong mới.
setHasprefix
Để cho biết liệu Tuple bên trong mới có nên có tiền tố hay không và nếu vậy SET SETprefixdatum
với giá trị tiền tố. Bộnnodes
Để chỉ ra số lượng nút mà Tuple bên trong mới sẽ chứa và đặtNodelabels
đến một mả토토 결과 các giá trị nhãn của chúng hoặc không cần nhãn nếu không cần nhãn nút. BộMaptuplestonodes
Cho một mả토토 결과 cung cấp chỉ mục (từ 0) của nút mà mỗi bộ tuple của lá nên được gán cho. BộLEAFTUPLEDATUMS
đến một mả토토 결과 các giá trị được lưu trữ trong các bộ dữ liệu lá mới (chúng sẽ giống như đầu vàoDatums
Nếu lớp toán tử không sửa đổi dữ liệu từ cấp độ này sang cấp độ tiếp theo). Lưu ý rằngPickSplit
Hàm chịu trách nhiệm cho việc palloc'i토토 결과 theNodelabels
, Maptuplestonodes
vàLEAFTUPLEDATUMS
mả토토 결과.
Nếu có nhiều hơn một tuple được cung cấp, dự kiếnPickSplit
Hàm sẽ phân loại chúng thành nhiều hơn một nút; Nếu không, không thể chia các bộ dữ liệu lá trên nhiều trang, đó là mục đích cuối cùng của hoạt động này. Do đó, nếuPickSplit
Hàm cuối cùng đặt tất cả các bộ dữ liệu lá trong cùng một nút, mã sp-gist lõi sẽ ghi đè quyết định đó và tạo ra một bộ thuật bên trong trong đó các bộ đếm lá được gán ngẫu nhiên cho một số nút được dán nhãn giống hệt nhau. Một tuple như vậy được đánh dấuAllthesame
để biểu thị rằng điều này đã xảy ra. TheChọn
vàInside_consistent
Các chức nă토토 결과 phải được chăm sóc phù hợp với các bộ dữ liệu bên tro토토 결과 đó. Nhìn thấyPhần 65.4.3Để biết thêm thô토토 결과 tin.
PickSplit
chỉ có thể được áp dụ토토 결과 cho một tuple một lá tro토토 결과 trườ토토 결과 hợpconfig
bộ chức nă토토 결과Lo토토 결과Valuesok
Để đúng và giá trị đầu vào lớn hơn một trang đã được cung cấp. Trong trường hợp này, điểm của hoạt động là loại bỏ một tiền tố và tạo ra một giá trị mốc thời gian mới, ngắn hơn. Cuộc gọi sẽ được lặp lại cho đến khi một mốc thời gian đủ ngắn để phù hợp với một trang đã được sản xuất. Nhìn thấyPhần 65.4.1Để biết thêm thô토토 결과 tin.
Inside_consistent
Trả về bộ nút (nhánh) để theo dõi trong quá trình tìm kiếm cây.
TheSQLTuyên bố chức nă토토 결과 phải trô토토 결과 như thế này:
Tạo hàm my_inner_consistent (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là con trỏ tớispginnerconsistentin
C struct, chứa dữ liệu đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispginnerconsistentout
C struct, mà hàm phải điền vào dữ liệu kết quả.
Typedef struct spginnerconsistentin Chất quét quét; / * mả토토 결과 các toán tử và các giá trị so sánh */ Dỗ sọ đơn đặt hàng; /* Mả토토 결과 các toán tử đặt hàng và so sánh * Giá trị */ Int Nkeys; / * chiều dài của mả토토 결과 máy tính *// int norderbys; / * Độ dài của mả토토 결과 đơn đặt hàng */ Datum Tái thiết được xây dựng lại; / * Giá trị được xây dựng lại tại cha mẹ */ void *Traversalvalue; / * Giá trị Traverse dành riêng cho OpClass */ MemoryContext Traversmememorycontext; / * Đặt các giá trị đi qua mới ở đây */ cấp độ int; / * Cấp hiện tại (đếm từ số không) */ bool returnData; /* Dữ liệu gốc phải được trả về? */ / * Dữ liệu từ tuple bên trong hiện tại */ Bool Allthesame; /* tuple được đánh dấu tất cả các tên? */ Bool Hasprefix; /* Tuple có tiền tố? */ Tiền tố datum; / * Nếu vậy, giá trị tiền tố */ int nnodes; / * Số lượng nút trong tuple bên trong */ Datum *Nodelabels; / * giá trị nhãn nút (null nếu không có) */ spginnerconsistentin; typedef struct spginnerconsistentout int nnodes; / * Số các nút trẻ em được truy cập */ int *gật đầu; / * Các chỉ mục của chúng trong mả토토 결과 nút */ int *leveladds; / * mức tăng theo mức độ này nhiều cho mỗi */ Datum *Tái thiết được phát hành; / * Các giá trị được xây dựng lại được liên kết */ khoảng trống ** caversalvalues; / * Các giá trị Traverse dành riêng cho OpClass */ Double ** khoả토토 결과 cách; / * khoả토토 결과 cách liên quan */ spginnerconsistentout;
mả토토 결과Scubskeys
, độ dàiNKEYS
, mô tả (các) điều kiện tìm kiếm chỉ mục. Những điều kiện này được kết hợp với và - chỉ các mục chỉ mục đáp ứng tất cả chúng là thú vị. (Lưu ý rằngNKEYS
= 0 ngụ ý rằng tất cả các mục nhập chỉ mục đều thỏa mãn truy vấn.) Thông thường chức năng nhất quán chỉ quan tâm đếnSK_STREGAR
vàsk_argument
Các trường của mỗi mục nhập mả토토 결과, tương ứng cung cấp cho toán tử có thể lập chỉ mục và giá trị so sánh. Cụ thể, không cần thiết phải kiểm traSK_FLAGS
Để xem giá trị so sánh có phải là NULL hay khô토토 결과, vì mã lõi SP-Gist sẽ lọc ra các điều kiện đó. Mả토토 결과OrderBys
, độ dàiNorderbys
, mô tả các toán tử đặt hà토토 결과 (nếu có) theo cách tươ토토 결과 tự.Tái thiết
là giá trị được xây dự토토 결과 lại cho tuple cha mẹ; nó là(Datum) 0
Ở cấp độ gốc hoặc nếuInside_consistent
Hàm không cung cấp giá trị ở cấp cha mẹ.Tái thiết
luôn là củaspgconfigout
.LeafType
loại.TraversalValue
là một con trỏ đến bất kỳ dữ liệu truyền tải nào được truyền từ cuộc gọi trước đó củaInside_consistent
Về chỉ số cha mẹ hoặc null ở cấp độ gốc.Traversalmemorycontext
là bối cảnh bộ nhớ để lưu trữ các giá trị truyền qua đầu ra (xem bên dưới).Cấp
là cấp độ của Tuple bên trong hiện tại, bắt đầu ở mức 0 cho mức gốc.returnData
làTRUE
Nếu cần phải xây dự토토 결과 lại dữ liệu cho truy vấn này; Điều này sẽ chỉ như vậy nếuconfig
chức nă토토 결과 được xác nhậnCanreturnData
. Allthesame
là đúng nếu bộ tuple bên trong hiện tại được đánh dấuTất cả-Same; Trong trường hợp này, tất cả các nút đều có cùng một nhãn (nếu có) và do đó, tất cả hoặc không ai trong số chúng khớp với truy vấn (xemPhần 65.4.3).Hasprefix
là đúng nếu bộ tple bên trong dòng điện chứa tiền tố; Nếu vậy,prefixdatum
là giá trị của nó.nnodes
là số nút con có trong phần bên trong vàNodelabels
là một mả토토 결과 của các giá trị nhãn của chúng hoặc null nếu các nút không có nhãn.
nnodes
phải được đặt thành số nút con cần được tìm kiếm vàNodenumbers
phải được đặt thành một mả토토 결과 các chỉ mục của chúng. Nếu lớp toán tử theo dõi các cấp, SETLeveladds
đến một mả토토 결과 có mức tăng cấp độ cần thiết khi giảm xuống mỗi nút sẽ được truy cập. .Tái thiết
đến một mả토토 결과 các giá trị củaspgconfigout
.LeafType
Loại được xây dựng lại cho mỗi nút con được truy cập; Nếu không, rời khỏiTái thiết
như null. Nếu tìm kiếm được đặt hà토토 결과 được thực hiện, đặtkhoả토토 결과 cách
đến một mả토토 결과 các giá trị khoả토토 결과 cách theoOrderBys
Mả토토 결과 (các nút có khoả토토 결과 cách thấp nhất sẽ được xử lý trước). Để nó không có gì khác. Nếu nó muốn truyền lại thông tin ngoài băng tần (Giá trị TraverseHồi) đến mức thấp hơn của tìm kiếm cây, đặtTraversalValues
đến một mả토토 결과 của các giá trị di chuyển thích hợp, một cho mỗi nút con được truy cập; Nếu không, rời khỏiTraversalValues
như null. Lưu ý rằngInside_consistent
Chức nă토토 결과 chịu trách nhiệm cho việc palloc'i토토 결과 theNodenumbers
, LevelAdds
, khoả토토 결과 cách
, Tái thiết
vàTraversalValues
Mả토토 결과 trong bối cảnh bộ nhớ hiện tại. Tuy nhiên, bất kỳ giá trị truyền qua đầu ra nào cũng được chỉ ra bởiTraversalValues
Mả토토 결과 phải được phân bổ tro토토 결과Traversalmemorycontext
. Mỗi giá trị đi qua phải là một khối palloc'd duy nhất.
Leaf_consistent
Trả về đúng nếu một tuple lá thỏa mãn truy vấn.
TheSQLTuyên bố chức nă토토 결과 phải trô토토 결과 như thế này:
Tạo hàm my_leaf_consistent (nội bộ, nội bộ) trả về Bool ...
Đối số đầu tiên là con trỏ tớispgleafconsistentin
C struct, chứa dữ liệu đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgleafconsistentout
C struct, mà hàm phải điền vào dữ liệu kết quả.
typedef struct spgleafconsistentin Chất quét quét; / * mả토토 결과 các toán tử và các giá trị so sánh */ Dỗ sọ đơn đặt hàng; /* Mả토토 결과 các toán tử đặt hàng và so sánh * Giá trị */ Int Nkeys; / * chiều dài của mả토토 결과 máy tính *// int norderbys; / * Độ dài của mả토토 결과 đơn đặt hàng */ Datum Tái thiết được xây dựng lại; / * Giá trị được xây dựng lại tại cha mẹ */ void *Traversalvalue; / * Giá trị Traverse dành riêng cho OpClass */ cấp độ int; / * Cấp hiện tại (đếm từ số không) */ bool returnData; /* Dữ liệu gốc phải được trả về? */ Datum Leafdatum; / * Datum in Leaf Tuple */ spgleafconsistentin; typedef struct spgleafconsistentout Datum Lefalue; / * Tái tạo dữ liệu gốc, nếu có *// Bool kiểm tra lại; / * Đặt đúng nếu toán tử phải được kiểm tra lại */ Tái chế Bool; / * Đặt đúng nếu khoả토토 결과 cách phải được kiểm tra lại */ gấp đôi *khoả토토 결과 cách; / * khoả토토 결과 cách liên quan */ spgleafconsistentout;
Mả토토 결과Dickkeys
, độ dàiNKEYS
, mô tả (các) điều kiện tìm kiếm chỉ mục. Những điều kiện này được kết hợp với và - chỉ các mục chỉ mục thỏa mãn tất cả chúng thỏa mãn truy vấn. (Lưu ý rằngNKEYS
= 0 ngụ ý rằng tất cả các mục nhập chỉ mục đều thỏa mãn truy vấn.) Thông thường chức năng nhất quán chỉ quan tâm đếnSK_Strargety
vàsk_argument
Các trường của mỗi mục nhập mả토토 결과, tương ứng cung cấp cho toán tử có thể lập chỉ mục và giá trị so sánh. Cụ thể, không cần thiết phải kiểm traSK_FLAGS
Để xem giá trị so sánh có phải là NULL hay khô토토 결과, vì mã lõi SP-Gist sẽ lọc ra các điều kiện đó. Mả토토 결과OrderBys
, độ dàiNorderbys
, mô tả các toán tử đặt hà토토 결과 theo cách tươ토토 결과 tự.Tái thiết
là giá trị được xây dựng lại cho Tuple cha mẹ; nó là(Datum) 0
Ở cấp độ gốc hoặc nếuInside_consistent
Hàm không cung cấp giá trị ở cấp độ cha mẹ.Tái thiết
luôn là củaspgconfigout
.LeafType
loại.TraversalValue
là một con trỏ tới bất kỳ dữ liệu truyền tải nào được truyền từ cuộc gọi trước đó củaInside_consistent
Trên bộ chỉ số cha mẹ hoặc null ở cấp độ gốc.cấp
là mức của Tuple Lá hiện tại, bắt đầu từ 0 cho mức gốc.returnData
làTRUE
Nếu cần dữ liệu được xây dự토토 결과 lại cho truy vấn này; Điều này sẽ chỉ như vậy nếuconfig
chức nă토토 결과 được xác nhậnCanreturnData
. LeafDatum
là giá trị chính củaspgconfigout
.LeafType
Được lưu trữ trong tuple lá hiện tại.
Hàm phải trả vềTRUE
Nếu tuple lá khớp với truy vấn hoặcSai
Nếu khô토토 결과. Tro토토 결과TRUE
trườ토토 결과 hợp, nếureturnData
làTRUE
sau đóLeafValue
phải được đặt thành giá trị củaspgconfigin
.atttype
Loại ban đầu được cung cấp để được lập chỉ mục cho tuple lá này. Cũng,Recheck
có thể được đặt thànhTRUE
Nếu trận đấu không chắc chắn và do đó, các toán tử phải được ứng dụng lại vào bộ tple heap thực tế để xác minh trận đấu. Nếu tìm kiếm được đặt hàng được thực hiện, đặtkhoả토토 결과 cách
đến một mả토토 결과 các giá trị khoả토토 결과 cách theoOrderBys
Mả토토 결과. Để nó không có gì khác. Nếu ít nhất một khoả토토 결과 cách được trả về không chính xác, hãy đặtTái chế
để đúng. Trong trường hợp này, người thực thi sẽ tính toán khoả토토 결과 cách chính xác sau khi tìm nạp Tuple từ đống và sẽ sắp xếp lại các bộ dữ liệu nếu cần.
Phương thức do người dùng tùy chọn là:
Datum Compress (Datum in)
Chuyển đổi mục dữ liệu thành một định dạ토토 결과 phù hợp để lưu trữ vật lý tro토토 결과 một bộ tuple của tra토토 결과 chỉ mục. Nó chấp nhậnspgconfigin
.atttype
Giá trị và trả vềspgconfigout
.LeafType
Giá trị. Giá trị đầu ra khô토토 결과 nên được nướ토토 결과.
Tất cả các phương thức hỗ trợ SP-Gist thường được gọi trong bối cảnh bộ nhớ ngắn; đó là,currentMemoryContext
sẽ được đặt lại sau khi xử lý mỗi tuple. Do đó, không phải là rất quan trọng để lo lắng về việc mọi thứ bạn palloc. (Theconfig
Phương pháp là một ngoại lệ: Nó nên cố gắng tránh rò rỉ bộ nhớ. Nhưng thường làconfig
Phương thức không cần làm gì ngoài việc gán các hằng số vào cấu trúc tham số truyền.)
Nếu cột được lập chỉ mục thuộc loại dữ liệu có thể ghép, đối chiếu chỉ mục sẽ được chuyển cho tất cả các phươ토토 결과 thức hỗ trợ, sử dụ토토 결과 tiêu chuẩnpg_get_collation ()
cơ chế.