Ejemplo n.º 1
0
        // TODO: Why was this made to return a bool?
        internal async ValueTask <bool> ReadUntilData(
            bool async, CancellationToken cancellationToken)
        {
            CheckIsClosed();

            // https://www.postgresql.org/docs/10/static/protocol-flow.html#idm46428663987712
            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var message = await _connection
                              .ReadNextMessage(async, cancellationToken)
                              .ConfigureAwait(false);

                switch (message)
                {
                case ParseCompleteMessage parseCompleteMessage:
                    // TODO: Do something?
                    continue;

                case BindCompleteMessage bindCompleteMessage:
                    // TODO: Do something?
                    continue;

                case NoDataMessage noDataMessage:
                    _hasNoData = true;
                    return(false);

                case RowDescriptionMessage descriptionMessage:
                    _descriptionMessage?.TryDispose();
                    _fieldCount         = descriptionMessage.FieldCount;
                    _descriptionMessage = descriptionMessage;
                    return(true);

                default:
                    throw new PostgresInvalidMessageException(message);
                }
            }
        }