UltraLite 现在支持事件和通知。通知是事件发生时发送的消息,还提供其它参数信息。UltraLite 具有系统事件,同时事件也可以是用户定义的。
事件通知使您可以在连接之间或连接到同一数据库的应用程序之间进行协调并发送信号。通知按队列管理:可以是按连接的缺省队列,也可以是按显示创建和命名的队列(可选)。发生事件时,会将通知发送到注册队列(或连接)。
每个连接管理自己的通知队列。可以为任意连接创建命名的队列。
使用预定义系统事件,此功能还可以为数据更改(例如对表进行更改时)提供 "触发器",或者在发生同步时发送信号。预定义事件包括:
也可以由应用程序来定义和触发用户事件。
为每种受支持的语言提供了事件和通知的 API。此外,还提供了一个 SQL 函数以访问 API 功能。
事件 | 发生时间 |
---|---|
Commit |
完成提交后发信号时。 |
SyncComplete |
完成同步后发信号时。 |
TableModified |
插入、更新或删除表中的行时触发。此事件针对每个请求只发生一次,无论为此事件注册时多少行受到该请求的影响。 object_name 参数指定要监控的表。值为 "*" 表示数据库中的所有表。 table_name 通知参数是已修改表的名称。 |
note_info.event_name = "SyncComplete"; note_info.event_name_len = 12; note_info.parms_type = ul_ev_note_info::P_NONE; |
note_info.event_name = "TableModified"; note_info.event_name_len = 13; note_info.parms_type = ul_ev_note_info::P_TABLE_NAME; note_info.parms = table->name->data; note_info.parms_len = table->name->len; |
可以创建和取消队列。
CreateNotificationQueue 为当前连接创建事件通知队列。队列名的使用范围仅限于每个连接,所以不同的连接可以创建具有相同名称的队列。发送事件通知时,数据库中具有匹配名称的所有队列都收到单独的通知实例。名称不区分大小写。如果没指定任何队列,则按需为每个连接创建缺省队列。如果该连接的队列名称已存在或无效,则调用失败并出现错误。
DestroyNotificationQueue 取消给定事件通知队列。如果未读通知仍然在队列中,则会发出警告信号。放弃未读通知。如果已创建连接的缺省事件队列,则在连接关闭时会将其取消。
DeclareEvent 声明稍后可以进行注册和触发的事件。UltraLite 预定义一些由对数据库或环境的操作触发的系统事件。事件名称必须唯一且名称不区分大小写。如果事件成功声明,则返回 true;如果名称已用过或无效,则返回 false。
RegisterForEvent 注册队列来接收事件的通知。如果不提供队列名称,则暗指采用缺省连接队列,如果需要,可以创建缺省连接队列。某些系统事件允许应用该事件的对象名称的规范。例如,TableModified 事件可以指定表名称。不像 SendNotification,仅特定的注册队列会收到事件的通知;不同连接中同名的其它队列则不会收到通知(除非它们也显示注册)。如果注册成功,则返回 true;如果队列或事件不存在,则返回 false。
TriggerEvent 触发事件并发送通知到所有注册的队列。返回发送的事件通知数。参数可能以 name=value; 对提供。
SendNotification 发送通知到数据库中匹配给定名称的所有队列(包括当前连接中任何此类队列)。此调用不会阻塞。使用特殊队列名称 "*" 以发送到所有队列。返回发送的通知数(匹配队列的数目)。参数可能以 name=value; 对提供。
GetNotification 读取事件通知。此调用将阻塞直到收到通知或给定等待时期到期。要取消等待,发送另一通知到给定队列或使用 CancelGetNotification。读取通知后,使用 ReadNotificationParameter 索引附加参数。如果事件已读取,则返回 true;如果等待时期到期或被取消,则返回 false。
GetNotificationParameter 获取刚刚由 GetNotification 读取的事件通知的已命名参数。给定队列中仅来自最近读取的通知的参数可用。如果找到参数,则返回 true;如果没找到参数,则返回 false。
CancelGetNotification 取消所有列中匹配给定名称的所有待执行的 GetNotification 调用。返回受影响的队列数(不一定是受阻塞读取的数目)。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |