Revert copy on write optimization
In case of multiple renames, all of the resulting relations will point to the same data, so writing on one and marking its only known copy as writable would be incorrect. For this to work, all the references should be kown to all the other instances. It is probably not worth to implement it. Implemented test for the update
This commit is contained in:
parent
5073567757
commit
a8c1b2a463
@ -54,7 +54,6 @@ class Relation (object):
|
||||
|
||||
def __init__(self, filename=""):
|
||||
self._readonly = False
|
||||
self._copy = None
|
||||
self.content = set()
|
||||
|
||||
if len(filename) == 0: # Empty relation
|
||||
@ -71,8 +70,6 @@ class Relation (object):
|
||||
|
||||
self._readonly = True
|
||||
copy._readonly = True
|
||||
copy._copy = self
|
||||
self._copy = copy
|
||||
|
||||
def _make_writable(self, copy_content=True):
|
||||
'''If this relation is marked as readonly, this
|
||||
@ -83,8 +80,6 @@ class Relation (object):
|
||||
|
||||
if self._readonly:
|
||||
self._readonly = False
|
||||
self._copy._readonly = False
|
||||
self._copy = None
|
||||
|
||||
if copy_content:
|
||||
self.content = set(self.content)
|
||||
|
16
test/update.py
Normal file
16
test/update.py
Normal file
@ -0,0 +1,16 @@
|
||||
p1=people
|
||||
p2=p1.rename({'id':'i'})
|
||||
p2=p2.rename({'i':'id'})
|
||||
assert p1==p2
|
||||
assert p1._readonly
|
||||
assert p2._readonly
|
||||
# It is VERY important to not change the original relations
|
||||
# or other tests might fail randomly, since the relations are
|
||||
# only loaded once
|
||||
|
||||
p2.update('age==20', {'age':50})
|
||||
assert p2._readonly == False
|
||||
assert p1!=p2
|
||||
p3 = p2.selection('age!=50')
|
||||
p4 = p1.selection('age!=20')
|
||||
assert p3==p4
|
Loading…
x
Reference in New Issue
Block a user