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でメモリを開放。