Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


8.2.11 COBOLのビッグエンディアンオプションへの対応

プリプロセスオプション-Xb(Windows版の場合は/Xb)を指定してプリプロセスすることで,COBOLのビッグエンディアンオプションが利用できるようになります。

〈この項の構成〉

(1) COBOLのビッグエンディアンオプション

COBOLのプログラムをAIXなどのビッグエンディアンのプラットフォームからLinuxなどのリトルエンディアンのプラットフォームに移行する場合,2進項目(2進形式の数字項目)のバイトオーダが変わるために,ソースプログラムの変更が必要になることがあります。これを回避するために,COBOL2002のコンパイラオプション-BigEndian,Binがあります。-BigEndian,Binは,Linux及びWindows環境で,2進項目のバイトオーダをビッグエンディアンにするオプションです。なお,HiRDBの埋込み型UAPではCOBOL2002のコンパイラオプション-BigEndian,Floatに対応していません。

COBOL2002では,2進項目のデータ記述で,USAGE句にBINARY,COMP,COMP-4,COMP-5のどれかを指定します。Linux及びWindows環境では,2進項目のバイトオーダはUSAGE句の指定内容とコンパイラオプション-BigEndian,Binの指定有無で決まります。詳細を次の表に示します。

表8‒18 Linux及びWindows環境の2進項目のバイトオーダ(COBOL2002の仕様)

2進項目のデータ記述のUSAGE句

コンパイラオプション-BigEndian,Binの指定

2進項目のバイトオーダ

BINARY,COMP又はCOMP-4

指定しない

リトルエンディアン

指定する

ビッグエンディアン

COMP-5

指定しない

リトルエンディアン

指定する

注※

COMP-5を使用する場合は,コンパイラオプション-Comp5を指定する必要があります。-Comp5を指定しないでCOMP-5を使用するとコンパイルエラーになります。

(2) クライアントライブラリ内で行うバイトオーダ変換

COBOLの埋込み型UAPでは,SQL文で使用する2進項目のデータ記述のUSAGE句に,一部の例外を除いて,COMPを指定することになっています。したがって,-BigEndian,Binを指定してコンパイルすると,UAPの実行時にSQL文で使用する2進項目のバイトオーダがビッグエンディアンになります。クライアントライブラリはSQL文で使用する2進項目をC言語の整数型データ(Linux及びWindows環境ではリトルエンディアン)として処理するので,クライアントライブラリ内ではSQL文で使用する2進項目をリトルエンディアンに変換して処理します。

注※

ROW型変数にCOMP-5を使用できます。

クライアントライブラリ内で行うバイトオーダ変換を次の図に示します。

図8‒3 クライアントライブラリ内で行うバイトオーダ変換

[図データ]

バイトオーダ変換の対象となる「SQL文で使用する2進項目」とは,次のデータ項目に含まれる2進項目です。

ただし,ROW型変数に格納する行データに含まれる2進項目については,前述のバイトオーダ変換を行いません。このため,Linux及びWindows環境で,ROW型変数に含まれる2進項目のバイトオーダは,-BigEndian,Binオプションの有無に関係なく,リトルエンディアンにする必要があります。したがって,ROW型変数に含まれる2進項目はビッグエンディアンを前提にした処理で使用できません。

注※

ROW型変数とは,SQLの行単位インタフェースで使用するROW型の埋込み変数,及びROW型の?パラメタの値を格納するデータ項目です。

(3) 埋込み型UAPでCOBOLのビッグエンディアンオプションを使用する方法

埋込み型UAPのコンパイルで-BigEndian,Binオプションを使用する場合は,プリプロセスオプション-Xb(Windows環境では/Xb)を指定してプリプロセスします。プリプロセスオプション-Xbを指定すると,クライアントライブラリ内で,SQL文で使用する2進項目のバイトオーダを変換します。コンパイル時には-BigEndian,Binオプションと同時に-Comp5オプションを指定します。Linux及びWindows環境で,SQL文で使用する2進項目(ただし,ROW型変数を除く)のバイトオーダと,データ記述,オプション指定の関係を次の表に示します。

表8‒19 SQL文で使用する2進項目のバイトオーダと,データ記述,オプション指定の関係

項番

項目

各項目の指定内容

SQL文で使用する2進項目(ROW型変数を除く)のバイトオーダをリトルエンディアンにする場合

SQL文で使用する2進項目(ROW型変数を除く)のバイトオーダをビッグエンディアンにする場合

1

SQL文で使用する2進項目(ROW型変数を除く)のデータ記述のUSAGE句

COMP

COMP

2

SQLプリプロセサの-Xbオプション

指定しない

指定する

3

コンパイラオプション

-BigEndian,Bin

指定しない

指定する

4

-Comp5

任意

指定する

注※

-Xbオプションを指定すると,SQLプリプロセサが展開するポストソース中でCOMP-5を使用するため,コンパイラオプションに-Comp5を指定する必要があります。

プリプロセスオプション-Xbを使用する場合は,ROW型変数に含まれる2進項目のデータ記述のUSAGE句をCOMP-5にする必要があります。なお,プリプロセスオプション-Xbを使用しない場合は,ROW型変数に含まれる2進項目のデータ記述のUSAGE句にCOMPとCOMP-5のどちらも指定できます。ROW型変数に含まれる2進項目のデータ記述にCOMP-5を指定することによって,Linux及びWindows環境で,ROW型変数に含まれる2進項目のバイトオーダは,-BigEndian,Binオプションの有無に関係なく,リトルエンディアンになります。

埋込み型UAPをビッグエンディアンのプラットフォームからリトルエンディアンのプラットフォームに移行する場合,コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbを組み合わせて使用することによって,ROW型の変数を使用する場合を除き,2進項目のバイトオーダの違いに対応するためにUAPソースを変更する必要がなくなります。COBOLの埋込み型UAPをバイトオーダの異なるプラットフォームへ移行する手順の例を次の図に示します。

図8‒4 COBOLの埋込み型UAPをバイトオーダの異なるプラットフォームへ移行する手順の例

[図データ]

(4) 注意事項