ttXlaUpdateDesc_t構造体は、データ・ストア内の単一行(またはタプル)への更新処理について記述します。ttXlaNextUpdateまたはttXlaNextUpdateWait 関数によって返される各更新レコードは、固定長ヘッダーttXlaUpdateDesc_tで始まり、その後に0(ゼロ)から2行のデータ・ストアからの行が続きます。行データはttXlaUpdateDesc_tヘッダーにレポートされたレコード・タイプによって異なります。
注意: | 永続モードでは、SETREPL、SETTBLIおよびSETCOLIは返されません。 |
flagsフィールドは、レコード更新の特別なオプションのビットマップです。
connIDフィールドは、更新を開始したODBC接続ハンドルを識別します。この値を使用すると、更新が同一の接続から行われたかどうかを確認できます。
個別のコミットXLAレコードは、ttApplicationContextをコールした後にXLAレコードを生成する処理が行われない場合に生成されます。ttApplicationContextプロシージャについては、「アプリケーションのコンテキストの受渡し」を参照してください。
XLAは、次の通知を受信できません。
ALTER TABLE処理で生成可能なXLAレコードは、次のタイプのみです。
次に、ttXlaUpdateDesc_tによって定義される更新ヘッダーのフィールドを示します。
ttXlaTblDesc_tヘッダーの後には、更新レコードに含まれているデータが続きます。この項では、特定のSQL処理に関連した特別な更新レコードのデータ書式について説明します。
CREATE TABLEの場合、特別な行の値は、新しい表について記述するttXlaTblDesc_tレコードおよびその後に続く、各列について記述するttXlaColDesc_tレコードで構成されています。
ALTER TABLEの場合、特別な行の値は、ttXlaDropColumnTup_t またはttXlaAddColumnTup_t 値およびその後に続く、列について記述するttXlaColDesc_t レコードで構成されます。
DROP TABLE処理の場合、行の値は次のようになります。
TRUNCATE TABLE処理の場合、行の値は次のようになります。
CREATE INDEX処理の場合、行の値は次のようになります。
DROP INDEX処理の場合、行の値は次のようになります。
フィールド
|
型
|
説明
|
---|---|---|
tblName | char (31) | 索引が削除される表の名前。 |
tblOwner | char (31) | 索引が削除される表の所有者。 |
ixName | char (31) | 削除される索引の名前。 |
列の追加の場合、行の値は次のようになります。
この特別な行の後に、新しい列について記述するttXlaColDesc_tレコードが続きます。
列の削除の場合、行の値は次のようになります。
この特別な行の後に、削除された列について記述するttXlaColDesc_tレコードの配列が続きます。
CREATE SEQUENCE処理の場合、行の値は次のようになります。
DROP SEQUENCE処理の場合、行の値は次のようになります。
CREATE MATERIALIZED VIEW処理の場合、行の値は次のようになります。
フィールド
|
型
|
説明
|
---|---|---|
vwName | char(31) | マテリアライズド・ビューの名前。 |
vwOwner | char(31) | マテリアライズド・ビューの所有者。 |
sysTableID | SQLUBIGINT | SYS.TABLESに格納されたシステム表ID。 |
マテリアライズド・ビューに対するDROP VIEW処理の場合、行の値は次のようになります。
表IDの設定処理の場合、更新レコードの主要部分で以前に割り当てられたアプリケーション表識別子を使用し、アプリケーション表識別子の新しい値を特別な行に指定するように記述されます。
列ID設定処理の場合、次の特別な行が記述されます。
フィールド
|
型
|
説明
|
---|---|---|
oldUserColID | SQLUINTEGER | 以前のユーザー定義の列ID値。 |
newUserColID | SQLUINTEGER | 新しいユーザー定義の列ID値。 |
sysColID | SQLUINTEGER | システム列ID。 |
表のレプリケーション・ステータスの変更の場合、次の特別な行が記述されます。
更新レコードを取得する手順およびttXlaUpdateDesc_tヘッダーの内容を確認する手順の詳細は、「トランザクション・ログからの更新レコードの取得」および「レコード・ヘッダーの確認および行アドレスの検出」を参照してください。次に、これらの手順の概要を示します。
更新ヘッダーの直後に行データが続きます。行データは、ttXlaGetColumnInfoによって返されるttXlaColDesc_t構造体に指定されているオフセットとともに内部形式で格納されます。
更新ヘッダーのサイズにそのアドレスを追加して、行データのアドレスを検出することができます。
次に例を示します。
char *Row = (char*)&ttXlaUpdateDesc_t +
sizeof(ttXlaUpdateDesc_t);
UPDATETUPレコードの場合、ttXlaUpdateDesc_tヘッダーの後に2行のデータが続きます。1つ目の行には更新前のデータ、2つ目の行には更新後のデータが含まれています。
新しい行は古い行の直後に続くため、古い行の長さ(tuple1)にそのアドレスを追加して、新しい行のアドレスを計算することができます。
次に例を示します。
char *oldRow = (char*)&ttXlaUpdateDesc_t +
sizeof(ttXlaUpdateDesc_t);
char *newRow = oldRow + ttXlaUpdateDesc_t.tuple1;
返された行内の列データにアクセスする方法の詳細については、「ttXlaColDesc_t」を参照してください。