lib/mongo/message/query_message.rb in mongo-0.0.4 vs lib/mongo/message/query_message.rb in mongo-0.1.0

- old
+ new

@@ -16,24 +16,34 @@ write_int(0) write_string("#{db_name}.#{collection_name}") write_int(query.number_to_skip) write_int(query.number_to_return) sel = query.selector - if query.order_by && query.order_by.length > 0 + if query.contains_special_fields sel = OrderedHash.new sel['query'] = query.selector - sel['orderby'] = case query.order_by - when String - {query.order_by => 1} - when Array - h = OrderedHash.new - query.order_by.each { |ob| h[ob] = 1 } - h - when Hash # Should be an ordered hash, but this message doesn't care - query.order_by - else - raise "illegal order_by: is a #{query.order_by.class.name}, must be String, Array, Hash, or OrderedHash" - end + if query.order_by && query.order_by.length > 0 + sel['orderby'] = case query.order_by + when String + {query.order_by => 1} + when Array + h = OrderedHash.new + query.order_by.each { |ob| h[ob] = 1 } + h + when Hash # Should be an ordered hash, but this message doesn't care + query.order_by + else + raise "illegal order_by: is a #{query.order_by.class.name}, must be String, Array, Hash, or OrderedHash" + end + end + if query.hint_fields && query.hint_fields.length > 0 + hints = OrderedHash.new + query.hint_fields.each { |hf| hints[hf] = 1 } + sel['$hint'] = hints + end + if query.explain + sel['$explain'] = true + end end write_doc(sel) write_doc(query.fields) if query.fields end