internal NpgsqlDataReader(IEnumerable<IServerResponseObject> dataEnumeration, CommandBehavior behavior,
                                        NpgsqlCommand command, NpgsqlConnector.NotificationThreadBlock threadBlock,
                                        bool preparedStatement = false, NpgsqlRowDescription rowDescription = null)
        {
            _behavior = behavior;
            _connection = (_command = command).Connection;
            _connector = command.Connector;
            _dataEnumerator = dataEnumeration.GetEnumerator();
            _connector.CurrentReader = this;
            _threadBlock = threadBlock;
            _preparedStatement = preparedStatement;
            CurrentDescription = rowDescription;

            // For un-prepared statements, the first response is always a row description.
            // For prepared statements, we may be recycling a row description from a previous Execute.
            if (CurrentDescription == null)
            {
                NextResultInternal();
            }

            UpdateOutputParameters();
        }