Class: XGen::Mongo::Driver::QueryMessage

Inherits:
Message
  • Object
show all
Defined in:
lib/mongo/message/query_message.rb

Constant Summary

Constants inherited from Message

Message::HEADER_SIZE

Instance Attribute Summary collapse

Attributes inherited from Message

#buf

Instance Method Summary collapse

Methods inherited from Message

#dump, #to_a, #update_message_length, #write_doc, #write_int, #write_long, #write_string

Constructor Details

#initialize(db_name, collection_name, query) ⇒ QueryMessage



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mongo/message/query_message.rb', line 29

def initialize(db_name, collection_name, query)
  super(OP_QUERY)
  @query = query
  write_int(0)
  write_string("#{db_name}.#{collection_name}")
  write_int(query.number_to_skip)
  write_int(-query.number_to_return) # Negative means hard limit
  sel = query.selector
  if query.contains_special_fields
    sel = OrderedHash.new
    sel['query'] = query.selector
    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|
                           case ob
                           when String
                             h[ob] = 1
                           when Hash # should have one entry; will handle all
                             ob.each { |k,v| h[k] = v }
                           else
                             raise "illegal query order_by value #{query.order_by.inspect}"
                           end
                         }
                         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
    sel['$hint'] = query.hint if query.hint && query.hint.length > 0
    sel['$explain'] = true if query.explain
                       
  end
  write_doc(sel)
  write_doc(query.fields) if query.fields
end

Instance Attribute Details

#queryObject (readonly)

Returns the value of attribute query.



27
28
29
# File 'lib/mongo/message/query_message.rb', line 27

def query
  @query
end

Instance Method Details

#first_key(key) ⇒ Object



71
72
73
# File 'lib/mongo/message/query_message.rb', line 71

def first_key(key)
  @first_key = key
end