Fixed bug passing :timeout to Cursor. Added tests.
This commit is contained in:
parent
9882dc61b7
commit
c984af4ff0
|
@ -141,12 +141,12 @@ module Mongo
|
||||||
# @option opts [Array] :sort an array of [key, direction] pairs to sort by. Direction should
|
# @option opts [Array] :sort an array of [key, direction] pairs to sort by. Direction should
|
||||||
# be specified as Mongo::ASCENDING (or :ascending / :asc) or Mongo::DESCENDING (or :descending / :desc)
|
# be specified as Mongo::ASCENDING (or :ascending / :asc) or Mongo::DESCENDING (or :descending / :desc)
|
||||||
# @option opts [String, Array, OrderedHash] :hint hint for query optimizer, usually not necessary if using MongoDB > 1.1
|
# @option opts [String, Array, OrderedHash] :hint hint for query optimizer, usually not necessary if using MongoDB > 1.1
|
||||||
# @option opts [Boolean] :snapshot ('false') if true, snapshot mode will be used for this query.
|
# @option opts [Boolean] :snapshot (false) if true, snapshot mode will be used for this query.
|
||||||
# Snapshot mode assures no duplicates are returned, or objects missed, which were preset at both the start and
|
# Snapshot mode assures no duplicates are returned, or objects missed, which were preset at both the start and
|
||||||
# end of the query's execution. For details see http://www.mongodb.org/display/DOCS/How+to+do+Snapshotting+in+the+Mongo+Database
|
# end of the query's execution. For details see http://www.mongodb.org/display/DOCS/How+to+do+Snapshotting+in+the+Mongo+Database
|
||||||
# @option opts [Boolean] :batch_size (100) the number of documents to returned by the database per GETMORE operation. A value of 0
|
# @option opts [Boolean] :batch_size (100) the number of documents to returned by the database per GETMORE operation. A value of 0
|
||||||
# will let the database server decide how many results to returns. This option can be ignored for most use cases.
|
# will let the database server decide how many results to returns. This option can be ignored for most use cases.
|
||||||
# @option opts [Boolean] :timeout ('true') when +true+, the returned cursor will be subject to
|
# @option opts [Boolean] :timeout (true) when +true+, the returned cursor will be subject to
|
||||||
# the normal cursor timeout behavior of the mongod process. When +false+, the returned cursor will never timeout. Note
|
# the normal cursor timeout behavior of the mongod process. When +false+, the returned cursor will never timeout. Note
|
||||||
# that disabling timeout will only work when #find is invoked with a block. This is to prevent any inadvertant failure to
|
# that disabling timeout will only work when #find is invoked with a block. This is to prevent any inadvertant failure to
|
||||||
# close the cursor, as the cursor is explicitly closed when block code finishes.
|
# close the cursor, as the cursor is explicitly closed when block code finishes.
|
||||||
|
@ -165,13 +165,12 @@ module Mongo
|
||||||
limit = opts.delete(:limit) || 0
|
limit = opts.delete(:limit) || 0
|
||||||
sort = opts.delete(:sort)
|
sort = opts.delete(:sort)
|
||||||
hint = opts.delete(:hint)
|
hint = opts.delete(:hint)
|
||||||
snapshot = opts.delete(:snapshot)
|
snapshot = opts.delete(:snapshot)
|
||||||
batch_size = opts.delete(:batch_size)
|
batch_size = opts.delete(:batch_size)
|
||||||
|
timeout = (opts.delete(:timeout) == false) ? false : true
|
||||||
|
|
||||||
if opts[:timeout] == false && !block_given?
|
if !timeout
|
||||||
raise ArgumentError, "Timeout can be set to false only when #find is invoked with a block."
|
raise ArgumentError, "Collection#find must be invoked with a block when timeout is disabled."
|
||||||
else
|
|
||||||
timeout = opts.delete(:timeout) || false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if hint
|
if hint
|
||||||
|
@ -187,7 +186,7 @@ module Mongo
|
||||||
|
|
||||||
if block_given?
|
if block_given?
|
||||||
yield cursor
|
yield cursor
|
||||||
cursor.close()
|
cursor.close
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
cursor
|
cursor
|
||||||
|
|
|
@ -46,7 +46,7 @@ module Mongo
|
||||||
@order = options[:order]
|
@order = options[:order]
|
||||||
@hint = options[:hint]
|
@hint = options[:hint]
|
||||||
@snapshot = options[:snapshot]
|
@snapshot = options[:snapshot]
|
||||||
@timeout = options[:timeout] || true
|
@timeout = options.has_key?(:timeout) ? options[:timeout] : true
|
||||||
@explain = options[:explain]
|
@explain = options[:explain]
|
||||||
@socket = options[:socket]
|
@socket = options[:socket]
|
||||||
@tailable = options[:tailable] || false
|
@tailable = options[:tailable] || false
|
||||||
|
|
|
@ -154,6 +154,32 @@ class CursorTest < Test::Unit::TestCase
|
||||||
assert_equal 5, results.length
|
assert_equal 5, results.length
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_timeout_options
|
||||||
|
cursor = Cursor.new(@@coll)
|
||||||
|
assert_equal true, cursor.timeout
|
||||||
|
|
||||||
|
cursor = @@coll.find
|
||||||
|
assert_equal true, cursor.timeout
|
||||||
|
|
||||||
|
cursor = @@coll.find({}, :timeout => nil)
|
||||||
|
assert_equal true, cursor.timeout
|
||||||
|
|
||||||
|
cursor = Cursor.new(@@coll, :timeout => false)
|
||||||
|
assert_equal false, cursor.timeout
|
||||||
|
|
||||||
|
cursor = @@coll.find({}, :timeout => false)
|
||||||
|
assert_equal false, cursor.timeout
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_timeout
|
||||||
|
opts = Cursor.new(@@coll).query_opts
|
||||||
|
assert_equal 0, opts & Mongo::Constants::OP_QUERY_NO_CURSOR_TIMEOUT
|
||||||
|
|
||||||
|
opts = Cursor.new(@@coll, :timeout => false).query_opts
|
||||||
|
assert_equal Mongo::Constants::OP_QUERY_NO_CURSOR_TIMEOUT,
|
||||||
|
opts & Mongo::Constants::OP_QUERY_NO_CURSOR_TIMEOUT
|
||||||
|
end
|
||||||
|
|
||||||
def test_limit_exceptions
|
def test_limit_exceptions
|
||||||
assert_raise ArgumentError do
|
assert_raise ArgumentError do
|
||||||
cursor = @@coll.find().limit('not-an-integer')
|
cursor = @@coll.find().limit('not-an-integer')
|
||||||
|
|
Loading…
Reference in New Issue