========== Watchers ========== A datasync "watcher" is responsible for checking a given system to see if any records are in need of sync (e.g. have changed recently). If the given system has a SQL DB, and applicable tables include a "last modified" column, then the most common/simple way is for the watcher to simply query the table, looking for records which were modified since the last check. There are a couple of downsides to this approach: * must query each table separately, to find all "changed" records * not possible to detect "deleted" records in this way Rattail itself uses a different approach though. The Rattail DB includes a ``change`` table, which in normal circumstances is empty. If so configured, Rattail can insert records into this ``change`` table whenever (almost) *any* data record is changed or deleted etc. Then a datasync watcher will look for records in the ``change`` table instead of having to query each applicable table separately. The watcher also removes ``change`` records as they are processed. A similar effect can be achieved if the watched system has a SQL DB to which you can install (tables and) triggers. In this case you can create a new table (e.g. ``datasync``) and then add triggers for the various tables you need to watch. When any record is changed or deleted the trigger should add a record to your new ``datasync`` table. Then the actual watcher can check your ``datasync`` table, and remove any found after they are processed. Those are just the patterns used thus far; more are likely possible.