tx_info
形式
ANSI C ,C++ の形式
#include <tx.h> int tx_info(TXINFO *info)
K&R版 Cの形式
#include <tx.h> int tx_info(info) TXINFO *info;
機能
関数tx_info()は,グローバルトランザクションの情報を,infoで指す構造体に返します。さらに,tx_info()は呼び出し元が現在トランザクションモードにあるかどうかを示す値を返します。
『引数』
『●info』
infoにnull以外を設定した場合は,tx_info()はinfoで示すTXINFO構造体へ,グローバルトランザクションの情報を設定します。TXINFO構造体は次のような要素を含んでいます。
XID xid; COMMIT_RETURN when_return; TRANSACTION_CONTROL transaction_control; TRANSACTION_TIMEOUT transaction_timeout; TRANSACTION_STATE transaction_state;
トランザクションモードでtx_info()を呼び出した場合は,xidには現在のトランザクションブランチの識別子と,transaction_stateの値が設定されます。
トランザクションモードでない呼び出し元からtx_info()を呼び出した場合には,xidにnull XIDが設定されます(詳細は<tx.h>を参照)。さらに,呼び出し元がトランザクションモードであるかないかにかかわらず,when_return,transaction_control,transaction_timeoutは,現在設定されているwhen_return,transaction_controlと秒単位のトランザクションタイムアウト値と同じ値になります。
返されたトランザクションタイムアウト値は,次のトランザクションモードが開始されたときに設定されて反映されます。しかし,呼び出し元の現在のトランザクションでは,タイムアウト値に反映されていない場合もあります。その理由は,現在のトランザクションの開始後tx_set_timeout()が呼び出された場合,timeout値を変更しているかもしれないからです。
infoにnullを設定した場合は,TX_INFO構造体は返されません。
リターン値
関数の呼び出し元がトランザクションモードの場合は,1が返ります。関数の呼び出し元がトランザクションモードでない場合は,0が返ります。
エラー
次のような場合,tx_info()はエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
TX_PROTOCOL_ERROR |
-5 |
関数は,適切でないコンテクストで呼ばれました(例えば,呼び出し元がまだtx_open()を呼び出していない)。 |
TX_FAIL |
-7 |
トランザクションマネジャで,回復できないエラーが発生しました。トランザクションマネジャが,すでにアプリケーションに代わって作業できないことがエラーの原因であることを示します。 |
アプリケーションの使い方
同じグローバルトランザクション内で,複数回のtx_info()を呼び出すと,tx_info()への呼び出しでは,gtrid(グローバルトランザクション識別子)に同じXIDが供給されることを保証されています。しかし,bqual(ブランチ限定子)が同じかどうかは一概にはいえません。
参照
tx_open(),tx_set_commit_return(),tx_set_transaction_control(),tx_set_transaction_timeout()
『指定例』
『if (tx_info(NULL) != 1) fputs("not transaction mode\n",stderr);』