[Tim Peters]
>>> Stephan Richter was wrestling with a migration script a couple months
>>> ago. I don't know whether he packaged the code he ended up with for
>>> reuse. Here's a record of the IRC chat in which details got worked out:
>>>
>>>    http://zope3.pov.lt/irclogs/%23zope3-dev.2005-08-25.log.html

[Stephan Richter]
>> The resulting code from the discussion is publically available in the
>> SchoolTool source:
>>
>>
<http://source.schooltool.org/viewcvs/trunk/schooltool/src/schooltool/genera
tions/evolve5.py?rev=4984&view=auto>

[Syver Enstad]
> Thank you Stefan. I am right if I suppose that the reason this fixes all
> references is that it saves all persistent objects in the database?

Basically, but read the IRC log for details:  it (re)saves the current
revision of all objects not in a version.  It does not change non-current
revisions of objects, nor any revisions of objects in a version.  This is
because the FileStorage iterator only knows about current non-version
revisions.

> Will this also fix references to persistent objects in non persistent
> objects stored in the database?

If (and only if) they're reachable from the root object following a chain of
non-version current revisions.  You can't store a non-persistent object N
directly in ZODB -- the only way N can get in is by being attached to a
persistent object P.  Then N's entire state is included in the pickle for P.
So when P is (re)saved, the entire state of N is recomputed, including (of
course) all references to persistent objects (if any) contained in N.

_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to