# File lib/sdb/sdb_interface.rb, line 611
    def query_with_attributes(domain_name, attributes=[], query_expression = nil, max_number_of_items = nil, next_token = nil, consistent_read = nil)
      attributes = attributes.to_a
      query_expression = query_expression_from_array(query_expression) if query_expression.is_a?(Array)
      @last_query_expression = query_expression
      #
      request_params         = {'DomainName'       => domain_name,
                                'QueryExpression'  => query_expression,
                                'MaxNumberOfItems' => max_number_of_items,
                                'NextToken'        => next_token,
                                'ConsistentRead'   => consistent_read}
      attributes.each_with_index do |attribute, idx|
        request_params["AttributeName.#{idx+1}"] = attribute
      end
      link   = generate_request("QueryWithAttributes", request_params)
      result = select_response_to_ruby(request_info(link, QSdbQueryWithAttributesParser.new))
      # return result if no block given
      return result unless block_given?
      # loop if block if given
      begin
        # the block must return true if it wanna continue
        break unless yield(result) && result[:next_token]
        # make new request
        request_params['NextToken'] = result[:next_token]
        link                        = generate_request("QueryWithAttributes", request_params)
        result                      = select_response_to_ruby(request_info(link, QSdbQueryWithAttributesParser.new))
      end while true
    rescue Exception
      on_exception
    end