private MySqlCommand BuildCountUnprocessedChanges()

in src/TriggersBinding/MySqlTableChangeMonitor.cs [791:817]


        private MySqlCommand BuildCountUnprocessedChanges(MySqlConnection connection, MySqlTransaction transaction, string newLastPolledTime)
        {
            string leasesTableJoinCondition = string.Join(" AND ", this._primaryKeyColumns.Select(col => $"u.{col.name.AsAcuteQuotedString()} = l.{col.name.AsAcuteQuotedString()}"));

            string countUnprocessedQuery = $@"
                        SELECT COUNT(*) 
                        FROM {this._userTable.AcuteQuotedFullName} AS u
                        LEFT JOIN {this._leasesTableName} AS l ON {leasesTableJoinCondition}
                        WHERE 
                            ({UpdateAtColumnName} > (select {GlobalStateTableLastPolledTimeColumnName} from {GlobalStateTableName} where {GlobalStateTableUserFunctionIDColumnName} = '{this._userFunctionId}' AND {GlobalStateTableUserTableIDColumnName} = '{this._userTableId}'))
                            AND
                            ({UpdateAtColumnName} <= TIMESTAMP('{newLastPolledTime}'))
                            AND
                            (   (l.{LeasesTableSyncCompletedTime} IS NULL)
                                OR 
                                (l.{LeasesTableSyncCompletedTime} < {UpdateAtColumnName})
                            )
                            AND
                            (   (l.{LeasesTableAttemptCountColumnName} IS NULL)
                                OR
                                (l.{LeasesTableAttemptCountColumnName} between {InitialValueAttemptCount} and {MaxChangeProcessAttemptCount})
                            )
                            ;
                        ";

            return new MySqlCommand(countUnprocessedQuery, connection, transaction);
        }