コード例 #1
0
 /// <inheritdoc/>
 public async ValueTask UpdateTransactionState(IStorageTransaction storageTrans, long transId, TransactionState state, string?endReason = null, DateTime?endDateTime = null)
 {
     await this.ExecuteAsync(
         async (connection) =>
     {
         const string sql = "UPDATE transactions SET end_datetime = @EndDateTime, state = @State, end_reason = @EndReason WHERE id = @Id;";
         await connection.ExecuteAsync(
             sql,
             new
         {
             Id          = transId,
             State       = state,
             EndDateTime = endDateTime,
             EndReason   = endReason
         },
             storageTrans.NpgsqlTransaction());
     },
         storageTrans.NpgsqlTransaction().Connection);
 }
コード例 #2
0
        /// <inheritdoc/>
        public async ValueTask <int> DeleteAddedMessages(IStorageTransaction storageTrans, long transId)
        {
            const string sql = "DELETE FROM messages where transaction_id = @TransId AND transaction_action = @TransactionAction AND state = @MessageState;";
            var          sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    TransId = transId,
                    TransactionAction = TransactionAction.Add,
                    MessageState = MessageState.InTransaction
                });
            },
                       sqliteConnection));
        }
コード例 #3
0
        /// <inheritdoc/>
        public async ValueTask <int> UpdateMessageAttemptCount(IStorageTransaction storageTrans, long transId, TransactionAction transactionAction, MessageState messageState)
        {
            const string sql = "Update messages set attempts = attempts + 1 " +
                               "where transaction_id = @TransId AND transaction_action = @TransactionAction AND state = @MessageState;";
            var sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    TransId = transId,
                    TransactionAction = transactionAction,
                    MessageState = messageState
                });
            },
                       sqliteConnection));
        }
コード例 #4
0
        /// <inheritdoc/>
        public async ValueTask <int> DeleteAddedMessagesInExpiredTrans(IStorageTransaction storageTrans, DateTime currentDateTime)
        {
            const string sql =
                "Delete from messages where transaction_action = @TransactionAction AND state = @MessageState AND " +
                "transaction_id in (select id from transactions Where expiry_datetime <= @CurrentDateTime);";
            var sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    TransactionAction = TransactionAction.Add,
                    MessageState = MessageState.InTransaction,
                    CurrentDateTime = currentDateTime
                });
            },
                       sqliteConnection));
        }
コード例 #5
0
        /// <inheritdoc/>
        public async ValueTask <int> ExpireTransactions(IStorageTransaction storageTrans, DateTime currentDateTime)
        {
            const string sql =
                "Update transactions SET state = @NewTransactionState, end_datetime = @CurrentDateTime, end_reason = 'Expired' " +
                "Where expiry_datetime <= @CurrentDateTime AND state = @OldTransactionState;";
            var sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    NewTransactionState = TransactionState.Expired,
                    MessageState = MessageState.InTransaction,
                    CurrentDateTime = currentDateTime,
                    OldTransactionState = TransactionState.Active
                });
            },
                       sqliteConnection));
        }
コード例 #6
0
        /// <inheritdoc/>
        public async ValueTask <int> UpdateMessageAttemptsInExpiredTrans(IStorageTransaction storageTrans, DateTime currentDateTime)
        {
            const string sql =
                "Update messages set attempts = attempts + 1, transaction_action = 0, transaction_id = null, state = @NewMessageState " +
                "where transaction_action = @TransactionAction AND state = @MessageState AND " +
                "transaction_id in (select id from transactions Where expiry_datetime <= @CurrentDateTime);";
            var sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    TransactionAction = TransactionAction.Pull,
                    MessageState = MessageState.InTransaction,
                    CurrentDateTime = currentDateTime,
                    NewMessageState = MessageState.Active         // Return to active for now. We won't worry about closing it here, if it needs to be.
                });
            },
                       sqliteConnection));
        }
コード例 #7
0
        /// <inheritdoc/>
        public async ValueTask <int> UpdateMessages(IStorageTransaction storageTrans, long transId, TransactionAction transactionAction, MessageState oldMessageState, MessageState newMessageState, DateTime?closeDateTime)
        {
            const string sql = "Update messages set transaction_id = null, transaction_action = 0,  " +
                               "state = @NewMessageState, close_datetime = @CloseDateTime " +
                               "where transaction_id = @TransId AND transaction_action = @TransactionAction AND state = @OldMessageState;";
            var sqliteConnection = storageTrans.NpgsqlTransaction().Connection;

            return(await this.ExecuteAsync <int>(
                       async (connection) =>
            {
                return await connection.ExecuteAsync(
                    sql,
                    transaction: (storageTrans as DbTransaction)?.NpgsqlTransaction,
                    param: new
                {
                    TransId = transId,
                    TransactionAction = transactionAction,
                    OldMessageState = oldMessageState,
                    NewMessageState = newMessageState,
                    CloseDateTime = closeDateTime
                });
            },
                       sqliteConnection));
        }