LF コマンド(フィールド定義読み込み)

このドキュメントでは、次のトピックについて説明します。


機能および使用

LF コマンドは、ファイルのフィールド定義情報を読み込むために使用します。

ユーザーは取得するフィールド定義があるファイルの番号を指定します。

Adabas は、レコードバッファにフィールド定義情報を返します。次の情報が各フィールドに返されます。

  • レベル番号

  • 名前

  • 標準長

  • 標準フォーマット

  • 定義オプション

当コマンドを使用して、フォーマットバッファまたはサーチバッファをダイナミックに作成するために、プログラム実行時にフィールドの標準フィールド長と標準フィールドフォーマットを取得できます。

フィールド定義が最後に更新されたときのタイムスタンプは、コマンドオプション 2 = ‘X’ のときに、レコードバッファに返されます。これは次のいずれかです。

  • ファイルが作成された時刻。

  • フィールドが最後に追加、変更、または削除された時刻。

  • ディスクリプタが最後にインバートまたは解放された時刻。

ADAORD でファイルをインポートする場合、または ADBCK で復元する場合は、インポートや復元のタイムスタンプは保存されません。ファイルをエクスポートまたはダンプしたときの、元のタイムスタンプが維持されます。

注意:
LF コマンドは、ファイルのメタ情報のみを読み込み、ファイル自体は読み込みません。このため、LF コマンドは、アプリケーションプログラムによって排他的にロックされているファイルやユーティリティによってロックされているファイルに対しても実行可能です。

graphics/lf.png

LF Command, Procedure Flow

コントロールブロック

Field フォーマット  
コールタイプ B F/U
予約(内部使用)   -/-
コマンドコード A F/U
コマンド ID B -/-
File Number B F/U (1)
Response Code B F/A (1)
レコードバッファ長(ACB のみ) B F/U
コマンドオプション 2 A F/U
アディション 2 A、B -/A
アディション 3 A F/A
コマンドタイム B -/A
ユーザーエリア   F/U

バッファエリア

バッファ  
フォーマットバッファ */–
レコードバッファ –/A
サーチバッファ –/–
バリューバッファ –/–
ISN バッファ –/–
フォーマット:
A 英数字
B 2 進数
x/y Adabasコール前/後 - xとyは、値を取ることができます。
A Adabas によって設定
F ユーザーによって設定
U Adabas コール後も変更なし
- 使用しません
* 使用せず。ただし、コールステートメントのパラメータリストに含まれていなければならない。

(1)このフィールドの意味は、Call タイプに指定された値によって異なります。詳細については、「Adabas の呼び出し」の「コントロールブロック」を参照してください。

コントロールブロック

コマンドコード

LF

File Number

フィールド定義情報を取得するファイルの番号。

Response Code

このフィールドには、コマンドに対するレスポンスコードが返されます。レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。

レコードバッファ長(ACB のみ)

レコードバッファ長(バイト単位)を示します。指定長は、そのファイルのフィールド定義情報が充分入るだけの長さでなければなりません。また、ユーザープログラムで定義したレコードバッファエリアのサイズより大きい値は指定しないでください。

コマンドオプション 2

このフィールドの設定により、レコードバッファに返される情報のフォーマットおよびタイプが決まります。

このフィールドが「S」の場合は、Adabas バージョン 6.1 ですでに使用可能になっていたファイルの標準情報が返されます。ただし、この情報は完全ではありません。具体的には、Adabas バージョン 6.2 で導入された新機能がサポートされていません。

このフィールドが「X」の場合は、レコードバッファ内のファイルに関する拡張情報が返されます。これには、同じ FDT でファイルを作成するために必要なすべての情報が含まれます。

このフィールドが「F」の場合は、FDT に関する完全な情報が返されます。これは「X」オプションに似ていますが、異なる点は、論理的に削除されたフィールドもレコードバッファに戻されることです。

注意:

  1. 解凍したデータの FDT が、論理的に削除されたフィールドを含むターゲットファイルの FDT と同じ場合にのみ、ADAMUP ユーティリティを使用してデータをロードできます。
  2. 論理的に削除されたフィールドは、フィールド名なしでレコードバッファに返されます。

このフィールドを空白にすると、ファイルのフィールドの基本情報のみが返されます。つまり、オプションのサブセットのみが返されます。特殊ディスクリプタに関する情報は返されません。

アディション 2

Adabas は、このフィールドに返された構造体の合計長を返します。

このフィールドには、一部のレスポンスコードについて詳細情報が返されます。詳細については、『Adabas メッセージおよびコードマニュアル』を参照してください。

アディション 3

セキュリティ保護のためのパスワードを指定します。

使用するファイルがセキュリティ保護されていない場合、このフィールドは空白にしておきます。ファイルがセキュリティ保護されている場合は、ユーザーは該当するパスワードを指定する必要があります。

指定したパスワードを保護するため、このフィールドはコマンド処理時に空白にセットされます。

コマンドオプション 2 = 'S' のレコードバッファ

全フィールド定義がレコードバッファに返されます。

コマンドオプション 2 フィールドを S に指定すると、情報は以下の形式で返されます。

レコードバッファの一般形式

バイト数 説明
1~2 情報の合計長
3~4 FDT にあるフィールド数(SDT を含む)
5 -N フィールド定義、それぞれの長さは 8 バイト
N - M SDT(特殊ディスクリプタテーブル)
特殊ディスクリプタとは次のディスクリプタです。
サブディスクリプタ
スーパーディスクリプタ
フォネティックディスクリプタ
ハイパーディスクリプタ
照合ディスクリプタ
SDT 定義に対して、SDT 要素の長さは整数値で、8 バイトの倍数になります。

FDT フィールド定義

バイト数 説明
1 指標フィールド名 F
2~3 フィールド名
4 定義オプション
(00 = nは定義オプションなし)
0x 01 = ユニークディスクリプタ
0x 02 = サブ/スーパーディスクリプタの親
0x 04 = フォネティックディスクリプタの親
0x 08 = PE グループフィールド/PE 内部グループ/
PE グループ内のエレメンタリフィールド
0x 10 = 空値省略
0x 20 = マルチプルフィールド
0x 40 = 固定フォーマット
0x 80 = ディスクリプタ
5 レベル番号(バイナリ
6 長さ(グループ = 0)
7 フォーマット
(グループの場合は空白(フォーマットなし))
A = 英数字
B = バイナリ
F = 固定小数点
G = 浮動小数点
P = パック 10 進数
U = アンパック 10 進数
W = Unicode
8 0x01 = NC オプションが有効
0x02 = NN オプションが有効
0x04 = LB オプションが有効
0x08 = LA オプションが有効
0x20 = HF オプションが有効
0x40 = NV オプションが有効
0x80 = NB オプションが有効
注意:
メインフレームとの互換性のために、NV オプションのビットが変更されました。Adabas バージョン 3.3 以前では、NV オプション = 0x04 でしたが、Adabas バージョン 5.1 以降およびメインフレーム上の Adabas では、NV オプション = 0x40 です。

SDT フィールド定義

バイト 1 説明
C 照合ディスクリプタ。照合ディスクリプタ定義参照。
H ハイパーディスクリプタ。ハイパーディスクリプタ定義参照。
P フォネティックディスクリプタ。フォネティックディスクリプタ定義参照。
S サブディスクリプタ。サブディスクリプタ定義参照。
T スーパーディスクリプタ。スーパーディスクリプタ定義参照。

照合ディスクリプタ定義

バイト数 説明
1 C は照合ディスクリプタを示します。
2~3 照合ディスクリプタ名。
4 定義オプション
0x 01 = ユニークディスクリプタ
0x 02 = 未使用
0x 04 = HE オプションなし
0x 08 = ピリオディック
0x 10 = NU
0x 20 = マルチプルフィールド
0x 40 = 未使用
0x 80 = 未使用
5 未使用
6 長さ(255 は 254 より長いことを意味しています)
7~8 親フィールド名

ハイパーディスクリプタ定義

バイト数 説明
1 H はハイパーディスクリプタ定義を示します。
2~3 ハイパーディスクリプタ名
4 定義オプション
0x 01 = ユニークディスクリプタ
0x 02 = 未使用
0x 04 = 使用される HE オプション
0x 08 = ピリオディック
0x 10 = 空値省略
0x 20 = マルチプルフィールド
0x 40 = 未使用
0x 80 = 未使用
5 ハイパー出口番号
6 Length
7 フォーマット
A = 英数字
B = バイナリ
F = 固定小数点
G = 浮動小数点
P = パック 10 進数
U = アンパック 10 進数
W = Unicode
8 未使用
1~2 0x0000 は連続を示します。
3~8 親フィールド名一覧(各 2 バイト)

フォネティックディスクリプタ定義

バイト数 説明
1 P はフォネティックディスクリプタを示します。
2~3 フォネティックディスクリプタ名
4 未使用
5~6 親フィールド名
7~8 未使用

サブディスクリプタ定義

バイト数 説明
1 S はサブディスクリプタを示します。
2~3 サブディスクリプタ名
4 定義オプション
0x 01 = ユニークディスクリプタ
0x 02 = 未使用
0x 04 = 未使用
0x 08 = ピリオディック
0x 10 = 空値省略
0x 20 = マルチプルフィールド
0x 40 = 未使用
0x 80 = ディスクリプタ
5~6 親フィールド名
7 開始バイト
8 終了バイト

スーパーディスクリプタ定義

バイト数 説明
1 T はスーパーディスクリプタを示します。
2~3 スーパーディスクリプタ名
4 定義オプション
0x 01 = ユニークディスクリプタ
0x 02 = 未使用
0x 04 = 未使用
0x 08 = ピリオディック
0x 10 = 空値省略
0x 20 = マルチプルフィールド
0x 40 = 未使用
0x 80 = ディスクリプタ
5~6 親フィールド 1
7 開始バイト
8 終了バイト

2 番目以降の親フィールドについては、次の表が適用されます。

バイト数 説明
1 0x00 は継続を示す
2~3 未使用
4 スーパーディスクリプタのフォーマット
5~6 親フィールド名
7 開始バイト
8 終了バイト

コマンドオプション 2 = Blank のレコードバッファ

ファイルのすべてのフィールドの情報がレコードバッファに返されますが、特殊ディスクリプタ(例えば、スーパーディスクリプタ)の情報は返されません。コマンドオプション 2 を空白に設定すると、次のフォーマットで情報が返されます。

レコードバッファの一般形式

バイト数 説明
1~4 FDT にあるフィールド数(特殊ディスクリプタを除く)
5 -N フィールド定義、それぞれの長さは 6 バイト

FDT フィールド定義

バイト数 説明
1 レベル番号(バイナリ
2~3 フィールド名
4 長さ(0 の場合はグループを意味し、255 の場合は 254 より長いことを意味する)
5 フォーマット
6 定義オプション
(00 = n は定義オプションなし)
0x 80 = ユニークディスクリプタ
0x 40 = サブ/スーパーディスクリプタの親
0x 20 = フォネティックディスクリプタの親
0x 10 = PE グループフィールド/PE 内部グループ/
PE グループ内のエレメンタリフィールド
0x 08 = 空値省略
0x 04 = マルチプルフィールド
0x 02 = 固定フォーマット
0x 01 = ディスクリプタ

注意:
コマンドオプション 2 = 空白のレコードバッファ内にある定義オプションは、メインフレームと互換性がありません。メインフレーム互換の LF コマンドは、コマンドオプション 2 = S でのみ使用できます

コマンドオプション 2 = ‘X’ および ‘F’ のレコードバッファ

コマンドオプション 2 を「X」または「F」に設定すると、次のフォーマットで情報が返されます。

レコードバッファの一般形式

バイト数 説明
1~4

情報の合計長

5

構造レベル(=0)(S オプションを使用すると、この場所で「F」を取得できます)

6

将来使用するためのフラグバイト

7~8

FDT 内のエントリ数(特殊ディスクリプタテーブル(SDT)および参照整合性制約テーブル(RIT)を含む)

FDT 内の最大エントリ数は、SDT を含めて 3214 です。さらに、ファイルに対して参照整合性制約を定義できます。

9~16

UNIX タイムスタンプ(1970 年以降のマイクロ秒)

17~N

フィールド定義、それぞれの長さは 16 バイト将来のバージョンでは、より大きなエントリが可能になる可能性があります。

(N+1)~M

SDT(特殊ディスクリプタテーブル)特殊ディスクリプタは次のとおりです。

  • サブディスクリプタ

  • スーパーディスクリプタ

  • フォネティックディスクリプタ

  • ハイパーディスクリプタ

  • 照合ディスクリプタ

SDT 定義の長さは 4 バイトの倍数です。

(M+1)~L

RIT(参照整合性制約テーブル)

注:

  • レコードバッファの各エントリは、次のフィールドで始まります。

    • バイト 1:エントリのタイプ

    • バイト 2:エントリの長さ

    • バイト 3~4:エントリの名前

    • バイト 5:フォーマット(RI 制約用ではない)

    • バイト 6:オプション(RI 制約用ではない)

    • ディスクリプタ長(SDT エントリのみ)

  • 将来の Adabas バージョンとの互換性を維持するために、次の点を考慮してください。

    • 将来の Adabas バージョンでは、「X」オプションに追加のエントリタイプが提供される可能性があります。そのため、不明なエントリタイプをエラーとみなさないようにする必要があります。

    • レコードバッファエントリは、現在の Adabas バージョンよりも大きくなる可能性があります。したがって、次のエントリにスキップするには、常にエントリ長フィールドを使用する必要があります。レコードバッファに現在返されている情報は、将来の Adabas バージョンでもレコードバッファエントリの同じ位置に返されます。

    • 各エントリの長さは 4 バイトに揃えられるので、アライメントの問題なく 4 バイトの整数値にアクセスできます。

  • ファイル定義で指定されているよりも多くのエントリが、LF コマンドで返される場合があります。これは、外部キーを含むファイルに対してのみ参照整合性制約の名前が定義されていますが、そのプライマリキーを含むファイルに対する LF コマンドでも再び返されることが原因です。

FDT フィールド定義

バイト数 説明
1

指標フィールド名「F」

2

「F」エントリの合計長

3-4

フィールド名

5

フォーマット

6 定義オプション
(00 = nは定義オプションなし)
0x 01 = ユニークディスクリプタ
0x 02 = サブ/スーパーディスクリプタの親
0x 04 = フォネティックディスクリプタの親
0x 08 = PE グループフィールド/PE 内部グループ/
PE グループ内のエレメンタリフィールド
0x 10 = 空値省略
0x 20 = マルチプルフィールド
0x 40 = 固定フォーマット
0x 80 = ディスクリプタ
7 0x01 = NC オプションが有効
0x02 = NN オプションが有効
0x04 = LB オプションが有効
0x08 = LA オプションが有効
0x20 = HF オプションが有効
0x40 = NV オプションが有効
0x80 = NB オプションが有効
8

レベル番号

9

日付/時刻編集マスク:
1 = E(DATE)
2 = E(TIME)
3 = E(DATETIME)
4 = E(TIMESTAMP)
5 = E(NATDATE)
6 = E(NATTIME)
7 = E(UNIXTIME)
8 = E(XTIMESTAMP)

10

サブオプション:

DT オプションの場合(バイト 9 が 0 でないことによって示される):
ビット 0x01 = TZ オプションがアクティブ

ディスクリプタオプションの場合(バイト 6 のビット 0x80 で示される):
ビット 0x02 = TR オプションがアクティブ

SY オプションの場合(バイト 11 が 0 でないことによって示される):
ビット 0x40 = CR オプションがアクティブ

11

SY 機能:
1 = TIME
2 = SESSIONID
3 = OPUSER

12

非アクティブ化フラグ(コマンドオプション「F」のみ):
ビット 0x01 = Field は論理的に削除される

13-16

フィールド長

SDT フィールド定義

「S」オプションと同じディスクリプタタイプおよび同じ先頭バイトを持つ SDT フィールド定義があります。

照合ディスクリプタ定義

バイト数 説明
1

C は照合ディスクリプタを示します。

2

C エントリの合計長

3-4

照合ディスクリプタ名。

5

親フィールドのフォーマット(オープンシステムでは W のみ、メインフレームでは A も可能)

6

定義オプション("S" オプションのバイト 4 と同じ)

7-8

標準長

9-10

親フィールド名

11-12

最大内部長

13

追加オプション
0x04 = LA
0x08 = LB
0x80 = 照合出口を介して定義された照合
設定なし:ICU を介して定義された照合
その他のビット:未使用

14

照合属性文字列の文字列長(長さバイトおよび終了空値は含まず)

15~14 + バイト 14

空値終端文字列としての照合属性文字列、例:「‘de’,PRIMARY」

照合出口を介して照合が定義されている場合:空値終端文字列としての出口番号、例:「1」

注意:

  1. C エントリの長さは 4 バイトに揃えられます。
  2. 親フィールドのフォーマットは、バリューバッファ内で親フィールド値を指定する場合に関係します。照合ディスクリプタが HE オプションなしで定義されている場合は、内部照合ディスクリプタの値も指定できます。これらの値は、オプション NV が指定されたフォーマット A を持ちます。

ハイパーディスクリプタ定義

バイト数 説明
1

H はハイパーディスクリプタ定義を示します。

2

H エントリの合計長

3-4

ハイパーディスクリプタ名

5

フォーマット

6

定義オプション("S" オプションのバイト 4 と同じ)

7-8

ハイパーディスクリプタの長さ

9

出口番号

10

追加オプション(メインフレームのみ、「S」オプションのバイト 8 と同じ)

11

未使用

12

親フィールドの数

13~12 + 2* バイト 12

親フィールド名

注意:
H エントリの長さは 4 バイトに揃えられます。

フォネティックディスクリプタ定義

バイト数 説明
1

P はフォネティックディスクリプタを示します。

2

P エントリの合計長

3-4

フォネティックディスクリプタ名

5

フォーマット(現時点では A のみサポート)

6

オプション(未使用)

7-8

ディスクリプタ長

9-10

未使用

11-12

親フィールド名

サブ/スーパーディスクリプタ定義

バイト数 説明
1

S はサブディスクリプタを示します。

T はスーパーディスクリプタを示します。

2

エントリの合計長

3-4

サブ/スーパーディスクリプタ名

5

フォーマット

6

定義オプション("S" オプションのバイト 4 と同じ)

7-8

ディスクリプタ長

9

未使用

10

親フィールドの数(サブディスクリプタでは 1、スーパーディスクリプタでは > 1)

11~10 + 6* バイト 10

親フィールドエントリ - 親フィールドごと:

  • 親フィールド名(2 バイト)

  • 開始バイト(2 バイト)

  • 終了バイト(2 バイト)

注意:
サブ/スーパーディスクリプタエントリの長さは 4 バイトに揃えられます。

参照整合性定義

バイト数 説明
1

R は参照制約を示す

2

R エントリの合計長

3-4

制約名

5-8

参照ファイル

プライマリファイルエントリの場合は、外部キーのファイル

外部ファイルエントリの場合は、プライマリキーのファイル

9-10

プライマリキー名(00 は ISN を意味する)

11-12

外部キー名

13

1 つのプライマリファイルエントリ

2 つの外部ファイルエントリ

14

更新アクション:

0 アクションなし

1 カスケード

2 NULL を設定

15

削除アクション:

0 アクションなし

1 カスケード

2 NULL を設定

16

未使用

2 つの参照ファイルのそれぞれの FDT には、参照制約のエントリが含まれています。外部キーとプライマリキーの両方が参照制約の同じファイルにある場合、このファイルの FDT にはこの制約のエントリが 2 つ含まれます。

注意:
参照整合性制約の名前は、ファイルのフィールドまたは特殊ディスクリプタの名前としても存在する可能性があります。

ファイル 1 のフィールド定義情報(Adabas バージョン 6.2 で導入された機能を含む)を読み込みます。

コントロールブロック:

Command Code          LF
File Number           1 (field definitions for file 1 requested)
Record Buffer Length  100
Command Option 2      X
Additions 3           bbbbbbbb (file is not security protected)