X-Git-Url: https://git.jsancho.org/?p=mojodb.git;a=blobdiff_plain;f=collection.py;h=e0f00026ba5dea8c411cfc4cd84782bd78df1582;hp=1dad48846b9077e9e08e3742c5819ca29c494926;hb=71d218d3b08766a0bba066080d0d8fc3bd3705a8;hpb=2c1872fd5004c8464e146081b61783de47b87e2d diff --git a/collection.py b/collection.py index 1dad488..e0f0002 100644 --- a/collection.py +++ b/collection.py @@ -19,7 +19,6 @@ # ############################################################################## -import msgpack from cursor import Cursor import uuid @@ -37,6 +36,7 @@ class Collection(object): def _create_field(self, field_name): fields = [ {'name': 'id', 'type': 'char', 'size': 512, 'primary': True}, + {'name': 'name', 'type': 'char', 'size': 64, 'primary': True}, {'name': 'value', 'type': 'text', 'null': False}, {'name': 'number', 'type': 'float'}, ] @@ -78,11 +78,23 @@ class Collection(object): for f in doc: if not f in fields: self._create_field(f) - values = { - 'id': doc_id, - 'value': msgpack.dumps(doc[f]), - } - if type(doc[f]) in (int, float): - values['number'] = doc[f] table_f = '%s$%s' % (self.table_name, f) - self.database.connection._insert(self.database.db_name, table_f, values) + self._insert_field(doc_id, table_f, f, doc[f]) + + def _insert_field(self, doc_id, field_table, field_name, field_value): + values = { + 'id': doc_id, + 'name': field_name, + 'value': self.database.connection.serializer.dumps(field_value), + } + if type(field_value) in (int, float): + values['number'] = field_value + + self.database.connection._insert(self.database.db_name, field_table, values) + + if type(field_value) in (list, tuple) and not '.' in field_name: + for i in xrange(len(field_value)): + self._insert_field(doc_id, field_table, "%s..%s" % (field_name, i), field_value[i]) + elif type(field_value) is dict: + for k, v in field_value.iteritems(): + self._insert_field(doc_id, field_table, "%s.%s" % (field_name, k), v)