Event hooks for SQL Anywhere clients

The SQL Anywhere synchronization client, dbmlsync, provides an optional set of event hooks that you can use to customize the
synchronization process. When a hook is implemented, it is called at a specific point in the synchronization process.

You implement an event hook by creating a SQL stored procedure with a specific name. Most event-hook stored procedures are
executed on the same connection as the synchronization itself.

You can use event hooks to log and handle synchronization events. For example, you can schedule synchronizations based on
logical events, retry connection failures, or handle errors and referential integrity violations.

In addition, you can use event hooks to synchronize subsets of data that cannot be easily defined in a publication. For example,
you can synchronize data in a temporary table by writing one event hook procedure to copy data from the temporary table to
a permanent table before the synchronization and another to copy the data back afterward.

Caution

The integrity of the synchronization process relies on a sequence of built-in transactions. You must not perform an implicit
or explicit commit or rollback within your event-hook procedures.

If you change any connection setting in a hook you must restore the setting to its previous value before the hook ends. Failing
to restore the setting may produce unexpected results.

Hook procedures can be created by any user with the MANAGE REPLICATION system privilege. However, to ensure that the hook
can access the #hook_dict table, which is used to pass information in and out of hooks, hooks must meet one of the following
requirements:

Be owned by a user with the SELECT ANY TABLE and UPDATE ANY TABLE system privileges.

Be defined using the SQL SECURITY INVOKER clause of the CREATE PROCEDURE statement.

You can use client event hooks with the dbmlsync command line utility or any programming interface used to synchronize SQL
Anywhere clients, including the dbmlsync API and the DBTools interface for dbmlsync.