Title: [commits] (vajda) [11269] - backported rev 11224 fixes to fix subindex merging problems
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)

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

Reply via email to