8.1.4 反映情報編集UOCで使う関数の文法

反映情報編集UOCは,C言語を使ってプログラミングします。反映側Datareplicatorには,反映情報編集UOCを作成するときに使う関数を備えています。

反映情報編集UOCで使える関数名と機能の概要を次の表に示します。

表8-3 反映情報編集UOCで使える関数と機能の概要

関数名機能
hds_ubegin()
(編集開始指示)
反映情報の編集を開始することを指示します。ユーザは,反映側HiRDBへの接続処理又は環境の初期設定の処理を実行します。
hds_uedit()
(編集・加工指示)
反映情報の編集・加工及び同期点処理を指示します。ユーザは,反映情報を編集・加工してSQLを発行したり一般ファイルへ出力したりします。
hds_uend()
(編集終了指示)
反映情報の編集を終了することを指示します。ユーザは,反映側HiRDBからの切り離し処理又は環境の終了処理を実行します。
<この項の構成>
(1) hds_ubegin()(編集開始指示関数)
(2) hds_uedit()(編集・加工指示関数)
(3) hds_uend()(編集終了指示関数)
(4) 反映情報編集UOCで使うヘッダファイル
(5) 規則

(1) hds_ubegin()(編集開始指示関数)

(a) 関数の形式
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_ubegin(UINTERFACE_BLK *インタフェースブロック名,
      long *ステータス);
(b) パラメタの説明
注1
反映側Datareplicatorでは,UINTERFACE_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。
注2
ユーザは,設定者が呼び出し元になっている領域を書き換えないでください。
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-5 hds_ubegin()からの戻り値

コード状態ニモニック呼ぴ出し元の処置
0正常終了HDS_RET_NORM処理を続行します。
4軽度(継続できるレベル)のエラー検知HDS_RET_WARNメッセージを出力します。処理は続行します。
0,4以外重度(継続できないレベル)のエラー検知HDS_RET_ERRメッセージを出力します。処理は中止し,プロセスを終了します。
(d) 抽出側Datareplicatorを使うときの注意

抽出側Datareplicatorの送信環境定義のnsndidxxxオペランド(xxxは001~256の整数)に,送信抑止受信元識別子を指定している場合,HiRDBのCONNECT処理の直前に,HiRDBの環境変数である$PDCLTAPNAMEに,hdssqleで始まり抽出側Datareplicator識別子で終わる20バイト以内の文字列を設定してください。

抽出側Datareplicator識別子として設定される文字列は,インタフェースブロック内に設定される文字列と同じです(2バイトの16進数字の文字列)。

(2) hds_uedit()(編集・加工指示関数)

(a) 関数の形式
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_uedit(UINTERFACE_BLK *インタフェースブロック名,
           UREFLECT_BLK *反映制御ブロック名,
           UDATA_BLK *キー情報ブロック名,
           UDATA_BLK *反映データブロック名,
           long *ステータス);
(b) パラメタの説明
注1
反映側Datareplicatorでは,UREFLECT_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。
注2
ユーザは,設定者が呼び出し元になっている領域を書き換えないでください。
注※1
UDATA_BLKの内容については,「表8-7 UDATA_BLKの内容」を参照してください。
注※2
UCOLUMN_BLKの内容については,「表8-8 UCOLUMN_BLKの内容」を参照してください。
注※3
BLOB型又はBINARY型の後方削除更新をしている場合のデータ構造です。USUBSTR_BLKの内容については,「表8-9 USUBSTR_BLKの内容」を参照してください。

表8-7 UDATA_BLKの内容

メンバ名長さ(バイト)属性領域名設定者内容
colnum4long列数呼び出し元マッピングキーの列数又は反映データの列数が設定されます。
*colinfptr4UCOLUMN_BLK*UCOLUMN_BLK*アドレス呼び出し元UCOLUMN_BLKのアドレスが設定されます。
Datareplicatorでは,UDATA_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

表8-8 UCOLUMN_BLKの内容

メンバ名長さ(バイト)属性領域名設定者内容
colname30char列名呼び出し元列の名前が設定されます。
coltype1unsigned char列データ型呼び出し元列のデータ型が設定されます。設定内容については,「表8-10 列データ型のニモニック」を参照してください。
coloption1unsigned char列オプション呼び出し元列のオプションが設定されます。オプションの種類を次に示します。
HDS_COL_NOOPT(0x00):
オプションなし
HDS_COL_NULL(0x01):
NULLデータ
HDS_COL_MAPK(0x02):
マッピングキー
反映データブロックだけ設定されます。キー情報ブロックには設定されません。
HDS_COL_ARRAY(0x04):
配列列
HDS_COL_REPET(0x08):
繰返し列
HDS_COL_ELMNL(0x10):
繰返し列の要素の値がNULL
HDS_COL_REPTCOL(0x20):
繰返し構造指定
HDS_COL_BLOBSUB(0x40):
連結演算データ
HDS_COL_SUBSTR(0x80):
SUBSTR演算後方削除更新ログ
elementnum4union繰返し列の有効要素番号
又は抽象データ型の数
呼び出し元
繰返し列のとき:
前2バイト(short)には有効要素番号が設定されます。*指定のときは-2が設定されます。
後2バイト(short)には該当する列の要素データの数が設定されます。
抽象データ型の列のとき:
継承関係を含めたデータ型の数が設定されます。継承がないときは1が設定されます。
配列列のとき:
前2バイトには抽出側配列列の要素番号が設定されます。
後2バイトには0が設定されます。
mltcolkind1unsigned char繰返し列の更新種別呼び出し元繰返し列の場合の更新種別を次に示します。更新種別がUPDATEのときだけ有効になります。
HDS_COL_ADDV(0x01):ADD
HDS_COL_DELV(0x02):DELETE
HDS_COL_SETV(0x04):SET
adtfunc1char抽象データ型の反映方式呼び出し元「0x01」で固定です。
charset1char文字集合種別呼び出し元UOCに渡す列データの文字集合種別が設定されます。
文字集合指定なし:
X'00'(HDS_CSET_DEFAULT)
文字集合指定あり(EBCDIK):
X'01'(HDS_CSET_EBCDIK)
reserve12char予備領域予備
collen4long列データ長呼び出し元列のデータ長が設定されます。列オプションがNULLデータの場合,0が設定されます。
dataptr4unionデータアドレス呼び出し元列データのアドレスが設定されます。列オプションがNULLデータの場合,NULLポインタが設定されます。設定内容については,「表8-11 データアドレスのニモニック」を参照してください。
反映側Datareplicatorでは,UCOLUMN_BLKのヘッダファイルを用意しているので,それを使ってください。ヘッダファイルについては,「表8-14 反映情報編集UOCのヘッダファイルの一覧」を参照してください。

表8-9 USUBSTR_BLKの内容

メンバ名長さ(バイト)属性領域名設定者内容
reserve14int内部情報1呼び出し元内部情報
data_len4int内部情報2呼び出し元内部情報
reserve24int予備領域1呼び出し元予備
substr_spos4unsigned intSUBSTR開始位置呼び出し元スカラ関数SUBSTR使用時の,切り出すデータ列の開始位置
reserve34int予備領域2呼び出し元予備
substr_len4unsigned intSUBSTRデータ長呼び出し元スカラ関数SUBSTR使用時の,切り出すデータ列の長さ
reserve416char予備領域3呼び出し元予備

列データ型のニモニックを「表8-10 列データ型のニモニック」に,データアドレスのニモニックを「表8-11 データアドレスのニモニック」に示します。

表8-10 列データ型のニモニック

列データ型ニモニックデータコード
INTEGERHDS_T_INT(0xF1)
SMALLINTHDS_T_SINT(0xF5)
LARGE DECIMALHDS_T_DEC(0xE5)
FLOATHDS_T_FLT(0xE1)
DOUBLE PRECISIONHDS_T_DBL(0xE1)
SMALL FLOATHDS_T_SFLT(0xE3)
REALHDS_T_REAL(0xE3)
CHARACTERHDS_T_CHAR(0xC5)
VARCHARHDS_T_VCHAR(0xC1)
NCHARHDS_T_NCHAR(0xB5)
NVARCHARHDS_T_NVCHAR(0xB1)
MCHARHDS_T_MCHAR(0xA5)
MVCHARHDS_T_MVCHAR(0xA1)
DATEHDS_T_DATE(0x71)
TIMEHDS_T_TIME(0x79)
TIMESTAMPHDS_T_TIMESTAMP(0x7D)
INTERVAL YEAR TO DAYHDS_T_YTD(0x65)
INTERVAL HOUR TO SECONDHDS_T_HTS(0x6F)
BLOBHDS_T_BLOB(0x93)
BINARYHDS_T_BINARY(0x91)
UNPACKHDS_T_UNPACK(0xFF)

表8-11 データアドレスのニモニック

データ型ニモニックアドレスタイプ
INTEGERHDS_A_INTlong*
SMALLINTHDS_A_SINTshort*
LARGE DECIMALHDS_A_DECchar*
FLOATHDS_A_FLTdouble*
DOUBLE PRECISIONHDS_A_DBLdouble*
SMALL FLOATHDS_A_SFLTfloat*
REALHDS_A_REALfloat*
CHARACTERHDS_A_CHARchar*
VARCHARHDS_A_VCHARchar*
NCHARHDS_A_NCHARchar*
NVARCHARHDS_A_NVCHARchar*
MCHARHDS_A_MCHARchar*
MVCHARHDS_A_MVCHARchar*
DATEHDS_A_DATEchar*
TIMEHDS_A_TIMEchar*
INTERVAL YEAR TO DAYHDS_A_YTDchar*
INTERVAL HOUR TO SECONDHDS_A_HTSchar*
BLOBHDS_A_BLOBchar*
UNPACKHDS_A_UNPACKchar*
TIMESTAMPHDS_A_TIMESTAMPchar*
BINARYHDS_A_BINARYchar*
SUBSTR演算後方削除更新ログHDS_A_SUBSTRUSUBSTR_BLK*
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-12 hds_uedit()からの戻り値

コード状態ニモニック呼び出し元の処置
0正常終了HDS_RET_NORM処理を続行します。
4軽度(継続できるレベル)のエラー検知HDS_RET_WARNメッセージを出力します。処理は続行されます。
0,4以外重度(継続できないレベル)のエラー検知HDS_RET_ERRメッセージを出力します。処理は中止して,プロセスを終了します。

(3) hds_uend()(編集終了指示関数)

(a) 関数の形式
     #include<hds_ucommon.h>
     #include<hds_ureflect.h>
      int hds_uend(UINTERFACE_BLK *インタフェースブロック名,
         long *ステータス);
(b) パラメタの説明
(c) 戻り値

呼び出し元に戻るときに戻り値を設定します。設定できる戻り値を次の表に示します。

表8-13 hds_uend()関数からの戻り値

コード状態ニモニック呼び出し元の処置
0正常終了HDS_RET_NORM正常にプロセスを終了させます。
4軽度(継続できるレベル)のエラー検知HDS_RET_WARNメッセージを出力します。プロセスは正常に終了させます。
0,4以外重度(継続できないレベル)のエラー検知HDS_RET_ERRメッセージを出力します。プロセスは正常に終了させます。

(4) 反映情報編集UOCで使うヘッダファイル

反映側Datareplicatorでは,hds_ubegin(),hds_uedit(),hds_uend()の関数のインタフェースになる構造体及びニモニックコードをヘッダファイルで用意しています。

反映情報編集UOCで使うヘッダファイルは,次に示すディレクトリに格納してあります。

UNIX版の場合: /opt/hirdbds/include/

Windows版の場合:Datareplicatorをインストールしたディレクトリ¥include¥

反映情報編集UOCのヘッダファイルの一覧を次の表に示します。

表8-14 反映情報編集UOCのヘッダファイルの一覧

ファイル名内容反映情報編集UOCに関連するメンバ
hds_ucommon.h反映情報編集UOCの共通の構造体及びニモニックコード
  • UINTERFACE_BLK
  • 戻り値のニモニック
hds_ureflect.h反映情報編集UOCの構造体及びニモニックコード
  • UREFLECT_BLK
  • UREFLECT_BLKのニモニック
  • UDATA_BLK
  • UCOLUMN_BLK
  • データ型のニモニック
  • データアドレスのニモニック

(5) 規則

(a) ファイル

反映情報編集UOCの関数の中で,操作できるファイルはユーザ独自のファイル(オープンしたファイル)だけです。ファイルの規則を次に示します。

(b) 定義との関連
(c) SQL記述領域への設定

SQL記述領域を使って反映側DBを更新する場合,必要な内容をUOCインタフェーステーブルからSQL記述領域に設定して,UOCを作成します。

UOCで直接,UOCインタフェーステーブルの列データを参照する場合は,データ型によってはC言語のキャストをし,参照する必要があります。UOCインタフェーステーブルの列データアドレスが指すデータのデータ形式,実データ長とC言語での表記の関係を次の表に示します。

表8-15 UOCの列データ型,データ長とC言語での表記の関係

UOCインタフェーステーブルデータ領域長
(バイト)
C言語での表記
ニモニック列データ長
HDS_T_INT44long
HDS_T_SINT22short
HDS_T_DEC先頭2バイト:精度
後ろ2バイト:位取り
精度÷2+1char データエリア〔実データ長〕
HDS_T_FLT88double
HDS_T_DBL
HDS_T_SFLT44float
HDS_T_REAL
HDS_T_CHAR文字列長(バイト数)UOCの列データ長char データエリア〔実データ長〕
HDS_T_MCHAR
HDS_T_VCHARデータ部文字列長(バイト数)UOCの列データ長+2struct{
 unsigned short 実データ長
 char データエリア〔実データ長〕
HDS_T_NCHAR文字列長(文字数)UOCの列データ長*2char データエリア〔実データ長〕
HDS_T_NVCHARデータ部文字列長(文字数)UOCの列データ長*2+2struct{
 unsigned short 実データ長
 char データエリア〔実データ長〕
HDS_T_DATE44char データエリア〔実データ長〕
HDS_T_TIME33char データエリア〔実データ長〕
HDS_T_YTD先頭2バイト:精度(8)
後ろ2バイト:位取り(0)
5char データエリア〔実データ長〕
HDS_T_HTS先頭2バイト:精度(6)
後ろ2バイト:位取り(0)
4char データエリア〔実データ長〕
HDS_T_BLOB
(列オプションが0x80以外の場合)
データ部データ長(バイト数)UOCの列データ長+8struct{
 long 予備領域
 unsigned long 実データ長
 char データエリア〔実データ長〕
HDS_T_BLOB
(列オプションが0x80の場合)
32UOCの列データ長+8表8-9 USUBSTR_BLKの内容」を参照してください。
HDS_T_UNPACKUNPACKデータ長(バイト数)整数部けた数+小数部けた数char データエリア〔実データ長〕
HDS_T_TIMESTAMP7+↑p÷2↑(バイト数)
p:小数部のけた数
UOC列データ長char データエリア〔実データ長〕
HDS_T_BINARY
(列オプションが0x80以外の場合)
データ部データ長(バイト数)UOCの列データ長+4struct{
 long 実データ長
 char データエリア〔実データ長〕
HDS_T_BINARY
(列オプションが0x80の場合)
32UOCの列データ長+8表8-9 USUBSTR_BLKの内容」を参照してください。
繰返し列のデータは,一つの要素のデータ情報が一つのUCOLUMN_BLKに格納されます。
注※
連結演算のときも受け渡し方法は同じです。
(d) データ型