Add _id to inserted records. Fixed ObjectID load, save, and generation.

This commit is contained in:
Jim Menard 2008-12-04 08:37:42 -05:00
parent cf03cd53f9
commit 51dde79ba4
3 changed files with 13 additions and 6 deletions

View File

@ -13,6 +13,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
require 'socket'
require 'mongo/objectid'
require 'mongo/collection'
require 'mongo/message'
require 'mongo/query'
@ -152,6 +153,7 @@ module XGen
end
def insert_into_db(collection, objects)
objects.each { |o| o['_id'] ||= ObjectID.new }
# TODO synchronize
objects.each { |o| send_to_db(InsertMessage.new(@name, collection, o)) }
end
@ -177,4 +179,3 @@ module XGen
end
end
end

View File

@ -20,12 +20,18 @@ module XGen
class ObjectID
UUID_STRING_LENGTH = 24
@@uuid_generator = UUID.new
# String UUID
attr_reader :uuid
# uuid is a string
# +uuid+ is a string. If nil, a new UUID will be generated.
def initialize(uuid=nil)
@uuid ||= UUID.new.generate
# The Babble server expects 12-byte (24 hex character) keys, which
# is why we throw away part of the UUID.
@uuid ||= @@uuid_generator.generate(:compact).sub(/(.{12}).{8}(.{12})/, '\1\2')
end
def to_s

View File

@ -155,8 +155,8 @@ class BSON
bytes[0..-2].pack("C*")
end
def deserialize_oid_data
XGen::Mongo::Driver::ObjectID.new(buf.get(12).pack("C*"))
def deserialize_oid_data(buf)
XGen::Mongo::Driver::ObjectID.new(buf.get(XGen::Mongo::Driver::ObjectID::UUID_STRING_LENGTH).pack("C*"))
end
def serialize_eoo_element(buf)
@ -199,7 +199,7 @@ class BSON
def serialize_oid_element(buf, key, val)
buf.put(OID)
self.class.serialize_cstr(buf, key)
buf.put_array(val.to_a)
buf.put_array(val.to_s.unpack("C*"))
end
def serialize_string_element(buf, key, val, type)