Firebird のイベント機能の使い方 [Firebird]
この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 9日目のエントリーです
Firebird には Interbase の頃から、「イベント」という機能があります。
トリガーの中で post_event 'イベント名' とすると、
クライアントに、そのイベントが発生したことを通知できる機能です。
もちろん、クライアントライブラリがその機能を持っていなければ
使うことはできませんが、 pyfirebirdsql には、その機能があります。
例えば、 test_table のレコードが削除された時に 'event_d' という
イベントを発生させるトリガーを
pyfirebirdsql では一度に複数のイベントを待ち受けることができます
例えば、以下の例では event_a, event_b, event_d を待ち受けます
そして、例えば test_table のデータを2レコード削除するようなクエリーを
他のクライアント(isqlなど)から実行すると
{'event_b': 0, 'event_a': 0, 'event_d': 2}
と print されます。
つまり、待ち受けていたイベントのどれかがポストされた時
{'イベント名': 発生回数} の辞書形式でデータを受け取ることができます
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
コメントの受付は締め切りました