# File lib/aws/dynamo_db/item_collection.rb, line 697
      def query(options = {}, &block)

        options = options.merge(:query => true)

        raise ArgumentError, "a hash key value is required" unless
          options[:hash_value]

        options[:hash_key_value] =
          format_attribute_value(options.delete(:hash_value))

        range = options.delete(:range_value)
        range_op = nil
        value_list = []
        if range and range.kind_of?(Range)
          value_list = [format_attribute_value(range.begin),
                        format_attribute_value(range.end)]
          range_op = "BETWEEN"
        elsif range
          value_list = [format_attribute_value(range)]
          range_op = "EQ"
        end

        RANGE_KEY_OPTIONS.each do |name, op|
          if value = options.delete(name)
            raise(ArgumentError,
                  "only one range key condition is supported") if range_op
            range_op = op
            value_list = [format_attribute_value(value)]
          end
        end

        options[:range_key_condition] = {
          :attribute_value_list => value_list,
          :comparison_operator => range_op
        } if range_op

        if select = options.delete(:select) || options.delete(:attributes_to_get)
          options[:item_data] = true
          options[:attributes_to_get] = select.map(&:to_s) unless select == :all
        end

        if block
          each(options, &block)
        else
          enumerator(options)
        end
      end