in src/TriggerBinding/SqlTableChangeMonitor.cs [1050:1090]
private SqlCommand BuildUpdateTablesPostInvocation(SqlConnection connection, SqlTransaction transaction, long newLastSyncVersion)
{
string leasesTableJoinCondition = string.Join(" AND ", this._primaryKeyColumns.Select(col => $"c.{col.name.AsBracketQuotedString()} = l.{col.name.AsBracketQuotedString()}"));
string updateTablesPostInvocationQuery = $@"
{AppLockStatements}
DECLARE @current_last_sync_version bigint;
SELECT @current_last_sync_version = LastSyncVersion
FROM {GlobalStateTableName}
WHERE UserFunctionID = '{this._userFunctionId}' AND UserTableID = {this._userTableId};
DECLARE @unprocessed_changes bigint;
SELECT @unprocessed_changes = COUNT(*) FROM (
SELECT c.{SysChangeVersionColumnName}
FROM CHANGETABLE(CHANGES {this._userTable.BracketQuotedFullName}, @current_last_sync_version) AS c
LEFT OUTER JOIN {this._bracketedLeasesTableName} AS l ON {leasesTableJoinCondition}
WHERE
c.{SysChangeVersionColumnName} <= {newLastSyncVersion} AND
((l.{LeasesTableChangeVersionColumnName} IS NULL OR
l.{LeasesTableChangeVersionColumnName} != c.{SysChangeVersionColumnName} OR
l.{LeasesTableLeaseExpirationTimeColumnName} IS NOT NULL) AND
(l.{LeasesTableAttemptCountColumnName} IS NULL OR l.{LeasesTableAttemptCountColumnName} < {MaxChangeProcessAttemptCount}))) AS Changes
IF @unprocessed_changes = 0 AND @current_last_sync_version < {newLastSyncVersion}
BEGIN
UPDATE {GlobalStateTableName}
SET LastSyncVersion = {newLastSyncVersion}, LastAccessTime = GETUTCDATE()
WHERE UserFunctionID = '{this._userFunctionId}' AND UserTableID = {this._userTableId};
DECLARE @max_attempt_rows_to_be_deleted int;
SELECT @max_attempt_rows_to_be_deleted = COUNT(*) FROM {this._bracketedLeasesTableName} WHERE {LeasesTableChangeVersionColumnName} <= {newLastSyncVersion} AND {LeasesTableAttemptCountColumnName} = {MaxChangeProcessAttemptCount};
DELETE FROM {this._bracketedLeasesTableName} WHERE {LeasesTableChangeVersionColumnName} <= {newLastSyncVersion};
SELECT 'Updated LastSyncVersion from ' + CAST(@current_last_sync_version AS NVARCHAR) + ' to {newLastSyncVersion} MaxAttemptRowsToBeDeleted=' + CAST(@max_attempt_rows_to_be_deleted AS NVARCHAR);
END
";
return new SqlCommand(updateTablesPostInvocationQuery, connection, transaction);
}