変更ビュー API のサポート

提供: InterBase
移動先: 案内検索

変更ビュー へ戻る


変更ビュー API のサポートは、拡張 SQLVAR 構造体、XSQLVAR によって、新たな SQLIND メンバの解釈を通じて提供されています。レビューするには、開発者は、XSQLVAR.SQLIND の変数へのポインタを配置し、NULL 状態を要求します。クエリが実行されると、InterBase は 返された行の列の値が NULL 以外の場合には、0 をポインタのアドレスに配置し、NULL の場合には -1 を設定します。

新しい解釈のもとでは、NULL 状態と CHANGE 状態の双対概念が、SQLIND メンバ変数にオーバーレイされています。 SQLIND 変数の下位ビットが、列の変更インジケータとして予約されています: ビット 0 が INSERT、ビット 1 が UPDATE、ビット 2 が DELETE、ビット 3 が CHANGE. を表します。 NULL 状態をチェックするには、開発者は、SQLIND が明らかに -1 の値かどうかより、0 未満かどうかをチェックすべきです。 SQLIND アドレスに格納された 0 以上の値は、NULL 値以外を示します。


NULL ではない NULL 変更ステータス
SQLIND = 0 SQLIND = -1 変更ビューとサブスクリプションが使用されない場合に、昔の SQLIND 値が返される。変更ステータスは未定義。
SQLIND >= 0 SQLIND < 0 新しい SQLIND 値。 変更ステータスは、表示される可能性があり、テスト可能(以下のように)
SQLIND > 0 SQLIND < -1 変更ステータスは存在。


一旦、SQLIND 値が変更ステータスを保有していることが判別されたら、特定の状態のためにテストする前に、SQLIND_NULL ビットが存在する可能性をクリアしておかなければなりません。 次の SQLIND_xxxxxx 定義が、<ibase.h> に含まれています。 これら定義に対して、さまざまなビット論理和オペレーションを実行する前に、関心のある変更ステータスを対象にテストすることができます。

SQLIND 値 変更ステータス
SQLIND_CHANGE_VIEW 列の値は<同じ>値。変更なし。
SQLIND_CHANGE_VIEW | SQLIND_CHANGE 列の値が変更されたかどうか<不明>。
SQLIND_CHANGE_VIEW | [ SQLIND_CHANGE ] |

{ SQLIND_INSERT | SQLIND_UPDATE | SQLIND_DELETE }

SQL オペレーションのある組み合わせが、列値を変更した。

SQLIND_CHANGE_VIEW はタグ ビットで、変更ステータスの存在を示します。残りの定義は、FOR ROW 句のオプション(それぞれ CHANGE、INSERT、UPDATE、DELETE)に相当します。変更された行は、列値の変更の存在が検知されるとすぐに返されるため、CHANGE オプションは、<不明> 変更ステータスとなる場合があります。実際変更されたそれらの列値は、他が <不明> の状態を返す間に、明確な状態を返します。

サブスクリプションによって行われたデータへの変更は、あとから監視した場合、そのサブスクリプションからは見えません。これは、双方向レプリケーション内のコンポーネントとしてあり得る、変更ビューのアプリケーションのための礼となります。レプリケーションのペアの一方が、他方をそれらの論理的変更で更新した場合、その他方が逆方向でレプリケートする際に、その他方はそれら変更を反映返すことは望まないでしょう。

次のトピック: