- Revision
- 11269
- Author
- vajda
- Date
- 2006-07-26 16:13:44 -0700 (Wed, 26 Jul 2006)
Log Message
- backported rev 11224 fixes to fix subindex merging problems
- fixed bug 6402
(http://bugzilla.osafoundation.org/show_bug.cgi?id=6402)
(backport subindex merge fixes to alpha3)
- fixed bug 6402
(http://bugzilla.osafoundation.org/show_bug.cgi?id=6402)
(backport subindex merge fixes to alpha3)
Modified Paths
Diff
Modified: branches/0.7alpha3/chandler/repository/item/Indexed.py (11268 => 11269)
--- branches/0.7alpha3/chandler/repository/item/Indexed.py 2006-07-26 22:36:58 UTC (rev 11268) +++ branches/0.7alpha3/chandler/repository/item/Indexed.py 2006-07-26 23:13:44 UTC (rev 11269) @@ -215,7 +215,9 @@ for name, _indexChanges in indexChanges.iteritems(): index = indexes[name] - others = [] + moves = [] + insertions = [] + for key, value in _indexChanges.iteritems(): if value is not None: item = view.find(key) @@ -223,12 +225,15 @@ if key not in deletes: raise AssertionError, (key, "item not found") elif item.isDirty(): - others.append(key) if key in index: - index.removeKey(key) + moves.append(key) + else: + insertions.append(key) elif key in index: index.removeKey(key) - for key in others: + + index.moveKeys(moves) + for key in insertions: index.insertKey(key) self._setDirty(True)
Modified: branches/0.7alpha3/chandler/repository/item/Indexes.py (11268 => 11269)
--- branches/0.7alpha3/chandler/repository/item/Indexes.py 2006-07-26 22:36:58 UTC (rev 11268) +++ branches/0.7alpha3/chandler/repository/item/Indexes.py 2006-07-26 23:13:44 UTC (rev 11269) @@ -57,9 +57,12 @@ def insertKey(self, key, afterKey): self._count += 1 - def moveKey(self, key, afterKey): + def moveKey(self, key, afterKey=None): pass + def moveKeys(self, keys, afterKey=None): + pass + def removeKey(self, key): self._count -= 1 return True @@ -222,7 +225,7 @@ return {} - def insertKey(self, key, afterKey): + def insertKey(self, key, afterKey=None): skipList = self.skipList skipList.insert(key, afterKey) @@ -234,7 +237,7 @@ super(NumericIndex, self).insertKey(key, afterKey) - def moveKey(self, key, afterKey): + def moveKey(self, key, afterKey=None): if key not in self: self.insertKey(key, afterKey) @@ -253,6 +256,11 @@ super(NumericIndex, self).moveKey(key, afterKey) + def moveKeys(self, keys, afterKey=None): + + for key in keys: + self.moveKey(key, afterKey) + def removeKey(self, key): if key in self: @@ -372,7 +380,7 @@ raise NotImplementedError, '%s is abstract' % type(self) - def insertKey(self, key, afterKey=None): + def insertKey(self, key, ignore=None): index = self._index index.insertKey(key, index.skipList.after(key, self.compare)) @@ -392,7 +400,7 @@ return False - def moveKey(self, key, afterKey): + def moveKey(self, key, ignore=None): index = self._index if key in index: @@ -405,9 +413,27 @@ indexed = getattr(view[uuid], attr) index = indexed.getIndex(name) if key in index: - index.moveKey(key, None) + index.moveKey(key, ignore) indexed._setDirty(True) + def moveKeys(self, keys, ignore=None): + + index = self._index + for key in keys: + index.removeKey(key) + for key in keys: + index.insertKey(key, index.skipList.after(key, self.compare)) + + if self._subIndexes: + view = self._valueMap._getView() + for uuid, attr, name in self._subIndexes: + indexed = getattr(view[uuid], attr) + index = indexed.getIndex(name) + subKeys = [key for key in keys if key in index] + if subKeys: + index.moveKeys(subKeys, ignore) + indexed._setDirty(True) + def setDescending(self, descending=True): wasDescending = self._descending
_______________________________________________ Commits mailing list [email protected] http://lists.osafoundation.org/mailman/listinfo/commits
