[ZODB-Dev] Re: [Zope] DateTime mess
    Chris Withers 
    chris at simplistix.co.uk
       
    Thu Dec  1 12:21:22 EST 2005
    
    
  
Tim Peters wrote:
> There is only one commit in the following, so I'll assume you intended a
> second commit at the end:
yes, *sigh*, must engage brain...
>>a.someTime = DateTime()
>>get_transaction().commit()
> 
> Is `a` persistent?  I'm assuming that it is.
Yes.
>>...wait/do stuff...
>>a.someTime = DateTime()
> 
> I'm assuming another
> 
>     get_transaction().commit()
> 
> was intended here.
Yes.
>>...have we just committed a pickle containing all of 'a'?...
> 
> If `a` is persistent, yes.
If not?
>>Does mixing persistence into DateTime make a difference here?
> 
> 
> No.  Assuming `a` is persistent, you changed `a`, so `a`'s state gets
> written out.  This really has nothing to do with DateTime.  It would be the
> same answer had you done, e.g.,
> 
>     a.someTime = None
> 
> or
> 
>     a.someTime = "hi!"
> 
> or
> 
>     a.someTime = OOBTree()
> 
> instead.
*sigh* thought as much :-S
> One part is different:  if DateTime is not persistent, then the pickle for
> a's state includes the full state of a.someTime's DateTime attribute (and
> this is true for any attribute of any non-persistent type).  But if DateTime
> is persistent, then a.someTime is pickled as a distinct object, and the
> state for `a` contains only a reference to that distinct pickle (and again
> this is true for any attribute of any persistent type).  a's full state is
> pickled regardless.  The difference is in whether a's full state embeds
> a.someTime's state directly, or "points to" a distinct pickle for
> a.someTime's state.
Ah, okay, so having DateTime sublcass Persistent would only really 
matter if a had _lots_ of DateTime attributes. Does this ever happen?
> If the same DateTime object is referenced by many persistent objects, there
> can be major storage efficiencies is making DateTime persistent, because the
> "many other objects" can all point to the same pickle.  I don't know, but I
> doubt that's a likely scenario for DateTime objects.
Indeed :-/ Oh well...
Chris
-- 
Simplistix - Content Management, Zope & Python Consulting
            - http://www.simplistix.co.uk
    
    
More information about the ZODB-Dev
mailing list