Beispiel #1
0
        internal new async Task Consume(CancellationToken cancellationToken)
        {
            if (State == RowState.NotRead)
            {
                await _oldRowTupleEnumerable.Consume(cancellationToken);

                await ReadBuffer.EnsureAsync(3);

                var tupleType = (TupleType)ReadBuffer.ReadByte();
                Debug.Assert(tupleType == TupleType.NewTuple);
                _ = ReadBuffer.ReadUInt16(); // numColumns,
            }
            await base.Consume(cancellationToken);
        }
Beispiel #2
0
        public override async IAsyncEnumerator <ReplicationValue> GetAsyncEnumerator(CancellationToken cancellationToken = default)
        {
            // This will throw if we're already reading (or consumed) the second row
            var enumerator = base.GetAsyncEnumerator(cancellationToken);

            await _oldRowTupleEnumerable.Consume(cancellationToken);

            await ReadBuffer.EnsureAsync(3);

            var tupleType = (TupleType)ReadBuffer.ReadByte();

            Debug.Assert(tupleType == TupleType.NewTuple);
            _ = ReadBuffer.ReadUInt16(); // numColumns,

            while (await enumerator.MoveNextAsync())
            {
                yield return(enumerator.Current);
            }
        }