Beispiel #1
0
 /// <summary>
 /// Skips the current column without interpreting its value.
 /// </summary>
 public void Skip()
 {
     ReadColumnLenIfNeeded();
     if (_columnLen != -1)
     {
         _buf.Skip(_columnLen);
     }
     _columnLen = int.MinValue;
     _column++;
 }
        async ValueTask DisposeAsync(bool disposing, bool async)
        {
            if (_isDisposed || !disposing)
            {
                return;
            }

            try
            {
                if (CanWrite)
                {
                    await FlushAsync(async);

                    _writeBuf.EndCopyMode();
                    await _connector.WriteCopyDone(async);

                    await _connector.Flush(async);

                    Expect <CommandCompleteMessage>(await _connector.ReadMessage(async, cancellationToken: default), _connector);
                    Expect <ReadyForQueryMessage>(await _connector.ReadMessage(async, cancellationToken: default), _connector);
                }
                else
                {
                    if (!_isConsumed)
                    {
                        if (_leftToReadInDataMsg > 0)
                        {
                            await _readBuf.Skip(_leftToReadInDataMsg, async);
                        }
                        _connector.SkipUntil(BackendMessageCode.ReadyForQuery);
                    }
                }
            }
            finally
            {
                var connector = _connector;
                Cleanup();
                connector.EndUserAction();
            }
        }
        protected override void Dispose(bool disposing)
        {
            if (_isDisposed || !disposing)
            {
                return;
            }

            try
            {
                if (CanWrite)
                {
                    Flush();
                    _writeBuf.EndCopyMode();
                    _connector.SendMessage(CopyDoneMessage.Instance);
                    Expect <CommandCompleteMessage>(_connector.ReadMessage(), _connector);
                    Expect <ReadyForQueryMessage>(_connector.ReadMessage(), _connector);
                }
                else
                {
                    if (!_isConsumed)
                    {
                        if (_leftToReadInDataMsg > 0)
                        {
                            _readBuf.Skip(_leftToReadInDataMsg);
                        }
                        _connector.SkipUntil(BackendMessageCode.ReadyForQuery);
                    }
                }
            }
            finally
            {
                var connector = _connector;
                Cleanup();
                connector.EndUserAction();
            }
        }