#
##############################################################################
-import cPickle
+import msgpack
class Cursor(object):
def __init__(self, collection, spec=None, fields=None, **kwargs):
query = {}
table_id = '%s$_id' % self.collection.table_name
- query['select'] = [(table_id, 'id')]
+ query['select'] = [(table_id, 'value')]
for f in filter(lambda x: x != '_id', self.fields):
table_f = '%s$%s' % (self.collection.table_name, f)
q = self._get_cursor_field(table_id, table_f)
for k, v in self.spec.iteritems():
table_f = '%s$%s' % (self.collection.table_name, k)
if type(v) in (int, float):
- field_q = self._get_cursor_field(table_id, table_f, field_name='number')
- query['where'].append((field_q, '=', v))
+ field_name = 'number'
+ field_v = v
else:
- field_q = self._get_cursor_field(table_id, table_f)
- query['where'].append((field_q, '=', cPickle.dumps(v)))
+ field_name = 'value'
+ field_v = msgpack.dumps(v)
+ if k == '_id':
+ field_q = (table_id, field_name)
+ else:
+ field_q = self._get_cursor_field(table_id, table_f, field_name=field_name)
+ query['where'].append((field_q, '=', field_v))
return self.collection.database.connection._get_cursor(self.collection.database.db_name, query)
else:
document = {}
if '_id' in self.fields:
- document['_id'] = res[0]
+ document['_id'] = msgpack.loads(res[0])
fields_without_id = filter(lambda x: x != '_id', self.fields)
for i in xrange(len(fields_without_id)):
if not res[i + 1] is None:
- document[fields_without_id[i]] = cPickle.loads(res[i + 1])
+ document[fields_without_id[i]] = msgpack.loads(res[i + 1])
return document
else:
return None