SSブログ

Firebird のイベント機能の使い方 [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 9日目のエントリーです

Firebird には Interbase の頃から、「イベント」という機能があります。
トリガーの中で post_event 'イベント名' とすると、
クライアントに、そのイベントが発生したことを通知できる機能です。

もちろん、クライアントライブラリがその機能を持っていなければ
使うことはできませんが、 pyfirebirdsql には、その機能があります。

例えば、 test_table のレコードが削除された時に 'event_d' という
イベントを発生させるトリガーを
CREATE TRIGGER trig_test_delete_event
    FOR test_table AFTER DELETE
AS BEGIN
    post_event 'event_d';
END
のように書きます。

pyfirebirdsql では一度に複数のイベントを待ち受けることができます
例えば、以下の例では event_a, event_b, event_d を待ち受けます

    conn = firebirdsql.connect('server', 'database', 'user', 'password')
    conduit = conn.event_conduit(['event_a', 'event_b', 'event_d'])
    result = conduit.wait()
    print(result)


そして、例えば test_table のデータを2レコード削除するようなクエリーを
delete from test_table; (←2レコードデータ削除されるとすると・・・)

他のクライアント(isqlなど)から実行すると

{'event_b': 0, 'event_a': 0, 'event_d': 2}

と print されます。
つまり、待ち受けていたイベントのどれかがポストされた時
{'イベント名': 発生回数} の辞書形式でデータを受け取ることができます
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

コメント 0

コメントの受付は締め切りました

Facebook コメント

トラックバック 0