slight change to way blind update to empty handled in MapUpdateClause

This commit is contained in:
Michael Cyrulnik
2014-05-30 14:28:49 -04:00
parent 0f11c430a7
commit 635879df63

View File

@@ -318,45 +318,47 @@ class MapUpdateClause(ContainerUpdateClause):
def __init__(self, field, value, operation=None, previous=None, column=None):
super(MapUpdateClause, self).__init__(field, value, operation, previous, column=column)
self._updates = None
self.previous = self.previous or {}
self.previous = self.previous
def _analyze(self):
if self._operation == "update":
self._updates = self.value.keys()
else:
if self.value.items():
self._updates = sorted([k for k, v in self.value.items() if v != self.previous.get(k)]) or None
if self.previous is None:
self._updates = sorted([k for k, v in self.value.items()])
else:
self._updates = []
self._updates = sorted([k for k, v in self.value.items() if v != self.previous.get(k)]) or None
self._analyzed = True
def get_context_size(self):
if not self._analyzed: self._analyze()
if self.previous is None:
return 1
return len(self._updates or []) * 2
def update_context(self, ctx):
if not self._analyzed: self._analyze()
ctx_id = self.context_id
if self._updates is None or self._updates:
if self.previous is None and not self._updates:
ctx[str(ctx_id)] = {}
else:
for key in self._updates or []:
val = self.value.get(key)
ctx[str(ctx_id)] = self._column.key_col.to_database(key) if self._column else key
ctx[str(ctx_id + 1)] = self._column.value_col.to_database(val) if self._column else val
ctx_id += 2
else:
ctx[str(ctx_id)] = {}
def __unicode__(self):
if not self._analyzed: self._analyze()
qs = []
ctx_id = self.context_id
if self._updates is None or self._updates:
if self.previous is None and not self._updates:
qs += ['"int_map" = :1']
else:
for _ in self._updates or []:
qs += ['"{}"[:{}] = :{}'.format(self.field, ctx_id, ctx_id + 1)]
ctx_id += 2
else:
qs += ['"int_map" = :1']
return ', '.join(qs)