索引 - キー情報レコード

キー情報レコードは、ファイル内で使用するすべてのキーの物理特性を記述します。この情報には、各キーの長さ、データ レコード内のキーが定義される場所、重複が許可されているかどうかなどがあります。キー情報レコード構造内には、キー ブロックというサブ構造があります。キー ブロックは、定義されているキーごとに作成されます。最初のキー ブロックは、常に主キーを記述します。次に続くキー ブロックは、ファイルの作成時に指定した順序で副キーを定義します。キー情報レコードが、定義されているすべてのキーのキー ブロックを格納できる大きさでない場合は、すべてのキーが定義されるまで、同じサイズの継続レコードが作成されます。各レコードは、それぞれ次のレコードを示します。

キー情報レコードには、次のフィールドがあります。

サイズ フィールドの説明
2 レコード ヘッダー。索引ノードにレコード ヘッダーがある場合にのみ存在します。詳細については、「索引ファイルの種類」のトピックを参照してください。
2
ビット 15
セキュリティ フラグ。値は 0 です。
ビット 14 から 0
このレコードの先頭を基準として、レコード内の最終キー ブロック エントリの末尾を指すポインター
file-pointer-size 継続レコードのアドレス。その後に続く継続レコードがない場合はゼロになります。
n 主キーのキー ブロック
... ファイルの副キーごとに 1 つあります。
n キー ブロック
1 予約済み。値は x"FF" です。
1 予約済み。値は x"7E" です。

IDXFORMAT"8" または IDXFORMAT"12" 以外の形式の索引ファイルでは、キー ブロックは次のような構造になります。

サイズ フィールドの説明
2 このエントリの長さ (バイト数)
4 このキーのルート索引ノード レコードのアドレス
1 キー圧縮の種類
ビット 2
後続空白文字の圧縮
ビット 1
先頭文字の圧縮
ビット 0
重複の圧縮
5 キー コンポーネント ブロック
... キーを分割する場合は、コンポーネントごとに 1 つのブロックになります。
5 キー コンポーネント ブロック

IDXFORMAT"8" および IDXFORMAT"12" ファイルの場合は、キー ブロックに次のフィールドが含まれます。

サイズ フィールドの説明
2 このエントリの長さ (バイト数)
1 スパース キー文字
13 予約済み
1 キー圧縮の種類
ビット 3
後続ヌル文字の圧縮
ビット 2
後続空白文字の圧縮
ビット 1
先頭文字の圧縮
ビット 0
重複の圧縮
1 キー フラグ
ビット 6
重複可能
ビット 1
スパース キー
6 キー コンポーネント ブロック
... キーを分割する場合は、コンポーネントごとに 1 つのブロックになります。
6 キー コンポーネント ブロック

IDXFORMAT"8" または IDXFORMAT"12" 以外の形式の索引ファイルでは、キー コンポーネント ブロックは次のような構造になります。

サイズ フィールドの説明
2
ビット 15
重複の可否を示すフラグ。このフラグを設定すると、重複が許可されます。
ビット 14 から 0
コンポーネントの長さ (バイト数)
2 データ レコード内のコンポーネントのオフセット。値は 0 以上です。
1 コンポーネントの種類。値はゼロです。

IDXFORMAT"8" および IDXFORMAT"12" ファイルの場合は、キー コンポーネント ブロックに次のフィールドが含まれます。

サイズ フィールドの説明
2 コンポーネントの長さ (バイト数)
2 データ レコード内のコンポーネントのオフセット。値は 0 以上です。
1 コンポーネント フラグ
ビット 6
降順
1 コンポーネントの種類
ビット 7
数値
ビット 6
符号付き
ビット 5 から 0
数値でない場合

0 (英数字)

数値の場合は、次のようになります。

h"00" – DISPLAY (SIGN TRAILING INCLUDED)

h"01" – DISPLAY (SIGN TRAILING SEPARATE)

h"02" – DISPLAY (SIGN LEADING INCLUDED)

h"03" – DISPLAY (SIGN LEADING SEPARATE)

h"20" – COMP

h"21" – COMP-3

h"22" – COMP-X

h"23" – COMP-5

h"24" – FLOAT