Monthly Archives: June 2015

CopyCat Developer 3.8.1

New error handling mechanism:
  • Removed RPL$ERRORS table and TCcReplicator.LogErrors property.
  • Added some new fields to RPL$LOG (ERROR_MESSAGE, ERROR_CONTEXT).
  • Rows that cannot be replicated are now left in RPL$LOG with their ERROR_MESSAGE and ERROR_CONTEXT set.
New option to keep rows in RPL$LOG
  • A new property TCcReplicator.KeepRowsInLog allows you to keep replicated rows in RPL$LOG. This gives you a very detailed trace of everything that took place, and can be used instead of the depecated RPL$TRACE mechanism for debug purposes, or for auditing.
  • Rows that have been replicated will have their RPL$LOG.REPLICATION_STATE set, so if you want to see the rows that need to be replicated, you check where REPLICATION_STATE is null.
  • TCcReplicator: If a row can’t be replicated due to an error, we now place it in a list of failed rows, and continue to replicate. If the same row was changed again at a later point in the repliaction cycle, we skip it and leave it unreplicated. This is particularly important when using the new ReplicateOnlyChangedFields option, as data changes could otherwise get lost (and to avoid such problems, it would have been necessary to perform the entire replication cycle within a single transaction).
  • TCcReplictor: Added a new SkipToRemote option in OnReplicationError event allowing you to skip replication of local rows if an error occurs, but to continue replicating the remote changes to the local database. This feature makes sense only if using ReplicateOnlyChangedFields. Using this option, you can ensure consistency (by rolling back when there is a replication error) without aborting replication altogether.
  • TCcReplicator: Added queryPerformed parameter to OnRowReplFinishing and OnRowReplicated events, so that you can know what type of action was performed on the row (delete, update, or insert).
  • TCcConnection: fixed a bug that sometimes caused an access violation when destroying a TCcConnection.
  • Fix for SQL Server to correctly handle primary key fields of date or timestamp type.
  • TCcConfig: fixed a bug causing the OnExecute event of the TCcConnection not to fire while using TCcConfig.
  • TCcConfig: Added OnProgress event allowing you to keep the GUI active (using an Application.ProcessMessages for example) while configuring the databases.
  • TCcConfig: Some internal meta-data caching during configuration so as to improve performance over slow connections.
  • TCcConflictMgr: fixed a bug causing all the rows in RPL$LOG for a given row/table to be set to conflicted state rather than just the rows being replicated.
  • FIREBIRD ONLY: Fixed a bug causing the new ReplicateOnlyChangedFields feature to fail when replicating floating point values on systems using a decimal separator other than ‘.’.
  • FIREBIRD ONLY: Added a new RPL$NO_REPLICATION context variable. If you set this variable to ‘True’, the replication triggers will be by-passed. This is very useful if you want to execute a script that will cause massive updates to a large table.
  • TCcLog: fixed a bug that caused the conflict detection mechanism to fail sometimes.
  • TCcLog: fixed a bug that caused very bad performance when detecting a conflict using ReplicateOnlyChangedFields, in cases where there were a lot of changes in RPL$LOG.
  • TCcQuery: Fixed a bug causing the OnExecute event not to get fired.