Пример #1
0
            public async Task <bool> MoveNext(CancellationToken cancellationToken)
            {
                if (_queryRunner == null)
                {
                    _queryRunner = _dataContext.GetQueryRunner(_query, _queryNumber, _expression, _ps);

                    _mapper.QueryRunner = _queryRunner;

                    _dataReader = await _queryRunner.ExecuteReaderAsync(cancellationToken);

                    var skip = _skipAction?.Invoke(_expression, _ps) ?? 0;

                    while (skip-- > 0)
                    {
                        if (!await _dataReader.ReadAsync(cancellationToken))
                        {
                            return(false);
                        }
                    }

                    _take = _takeAction?.Invoke(_expression, _ps) ?? int.MaxValue;
                }

                if (_take-- > 0 && await _dataReader.ReadAsync(cancellationToken))
                {
                    _queryRunner.RowsCount++;

                    Current = _mapper.Map(_queryRunner, _dataReader.DataReader);

                    return(true);
                }

                return(false);
            }
Пример #2
0
        protected DataReaderResultsBase(IDbCommandAsync command, IExecutionContext context, IDataReaderAsync reader, int?rowsAffected, object queryObject)
        {
            Command       = command;
            Context       = context;
            Reader        = reader;
            CurrentSet    = 0;
            Provider      = context.Provider;
            _rowsAffected = rowsAffected;
            _queryObject  = queryObject;
            _cacheKey     = null;

            StateMachine = new StringKeyedStateMachine();
            StateMachine.AddState(StateRawReaderConsumed)
            .TransitionOnEvent(StateRawReaderConsumed, null, ThrowRawReaderConsumedException)
            .TransitionOnEvent(StateReaderConsuming, null, ThrowRawReaderConsumedException)
            .TransitionOnEvent(StateOutputParams, null, ThrowRawReaderConsumedException);
            StateMachine.AddState(StateReaderConsuming)
            .TransitionOnEvent(StateRawReaderConsumed, null, ThrowConsumeAfterStreamingStartedException)
            .TransitionOnEvent(StateReaderConsuming, StateReaderConsuming)
            .TransitionOnEvent(StateOutputParams, StateOutputParams, EnableOutputParameters);
            StateMachine.AddState(StateOutputParams)
            .TransitionOnEvent(StateRawReaderConsumed, null, ThrowReaderClosedException)
            .TransitionOnEvent(StateReaderConsuming, null, ThrowReaderClosedException)
            .TransitionOnEvent(StateOutputParams, StateOutputParams, EnableOutputParameters);
        }
Пример #3
0
 public ResultSetEnumerator(IDataResultsBase results, IDataReaderAsync reader, IExecutionContext context, Func <IDataRecord, T> read, int set)
 {
     _results = results;
     _reader  = reader;
     _context = context;
     _read    = read;
     _set     = set;
 }
Пример #4
0
 public DataRecordMappingEnumerable(IDataResultsBase results, IDataReaderAsync reader, IExecutionContext context, Func <IDataRecord, T> map)
 {
     Argument.NotNull(reader, nameof(reader));
     Argument.NotNull(context, nameof(context));
     Argument.NotNull(map, nameof(map));
     _results      = results;
     _reader       = reader;
     _context      = context;
     _map          = map;
     _currentSet   = results.CurrentSet;
     _readAttempts = 0;
 }
Пример #5
0
 public DataReaderResultsStream(IDbCommandAsync command, IExecutionContext context, IDataReaderAsync reader, object queryObject)
     : base(command, context, reader, null, queryObject)
 {
     StateMachine.AddState(StateDisposed)
     .TransitionOnEvent(StateRawReaderConsumed, null, ThrowDisposedException)
     .TransitionOnEvent(StateReaderConsuming, null, ThrowDisposedException)
     .TransitionOnEvent(StateOutputParams, null, ThrowDisposedException)
     .TransitionOnEvent(StateDisposed, StateDisposed);
     StateMachine.UpdateState(StateRawReaderConsumed)
     .TransitionOnEvent(StateDisposed, StateDisposed, () => DisposeReferences(false));
     StateMachine.UpdateState(StateReaderConsuming)
     .TransitionOnEvent(StateDisposed, StateDisposed, () => DisposeReferences(true));
     StateMachine.UpdateState(StateOutputParams)
     .TransitionOnEvent(StateDisposed, StateDisposed, () => DisposeReferences(true));
 }
Пример #6
0
 public DataReaderResults(IDbCommandAsync command, IExecutionContext context, IDataReaderAsync reader, int?rowsAffected, object queryObject)
     : base(command, context, reader, rowsAffected, queryObject)
 {
 }