btree index (11)
nbtsort.cに、タプルをソートしてからbtree indexを構築するときの処理が実装されている。
_bt_sortaddtup
pageにitemを追加するための関数。PageAddItemを実行してBTItemを登録する。
ただし、non-leaf pageに先頭のアイテムを登録するときはBTItemのヘッダの部分のみ登録する。non-leaf pageでは先頭のアイテムはマイナス無限大として扱い、検索キーとpageの最初のアイテムを比較する場合は、常に検索キーが大きいと判定しているので、先頭のアイテムのデータは不要。
_bt_slideleft
pageのhigh keyはItemIdの先頭に置かれるが、pageが一番右だったときhigh keyは不要なので、ItemIdの配列をひとつずつ前に詰める処理を行う。
_bt_blnewpage
新しいpageを作成して初期化する。
(1)pallocでBLOCKSZのメモリを確保
(2)_bt_pageinitで初期化
(3)BTPageOpaqueのデータを設定
左右のリンクはP_NONEに設定する(後で設定するので)
(4)high keyの領域を確保するため、pd_lowerをincrementする
_bt_blwritepage
作業が完了したpageをディスクに出力し、作業用のメモリを開放する。
(1)WALを出力する場合、ログにページ全体を出力する。
(2)pageをブロック番号順にシーケンシャルに書き込まない場合、飛ばしてしまうブロックを0で埋める。(smgrwriteで0で初期化されたブロックをディスクに出力している)この処理はログに記録しない。
(3)smgrwriteでpageをディスクに出力する。
(4)pfreeでメモリを開放。