def initialize(collection, opts={})
@cursor_id = nil
@db = collection.db
@collection = collection
@connection = @db.connection
@logger = @connection.logger
@selector = opts[:selector] || {}
@order = opts[:order]
@explain = opts[:explain]
@hint = opts[:hint]
@snapshot = opts[:snapshot]
@max_scan = opts.fetch(:max_scan, nil)
@return_key = opts.fetch(:return_key, nil)
@show_disk_loc = opts.fetch(:show_disk_loc, nil)
@comment = opts[:comment]
@fields = convert_fields_for_query(opts[:fields])
@skip = opts[:skip] || 0
@limit = opts[:limit] || 0
@tailable = opts[:tailable] || false
@timeout = opts.fetch(:timeout, true)
@options = 0
@socket = opts[:socket]
@pool = nil
@closed = false
@query_run = false
@transformer = opts[:transformer]
@read = opts[:read] || @collection.read
Mongo::ReadPreference::validate(@read)
@tag_sets = opts[:tag_sets] || @collection.tag_sets
@acceptable_latency = opts[:acceptable_latency] || @collection.acceptable_latency
batch_size(opts[:batch_size] || 0)
@full_collection_name = "#{@collection.db.name}.#{@collection.name}"
@cache = []
@returned = 0
if(!@timeout)
add_option(OP_QUERY_NO_CURSOR_TIMEOUT)
end
if(@read != :primary)
add_option(OP_QUERY_SLAVE_OK)
end
if(@tailable)
add_option(OP_QUERY_TAILABLE)
end
if @collection.name =~ /^\$cmd/ || @collection.name =~ /^system/
@command = true
else
@command = false
end
end