Ok I was wrong about the problem being present in the merge()
function. The problem is only present in my custom merge() function.

Thanks for your help.

On Jan 13, 12:08 am, Duder <dthomp...@gmail.com> wrote:
> I am using the merge() function to merge the de-serialized object into
> the session. I still get the error when using r5661. I'm working on
> putting together a test case, but I haven't been able to reproduce the
> problem in a simple way yet. Thank for your help.
>
> On Jan 12, 11:18 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
>
> > I have detected the sole codepath which does in fact produce the  
> > output you've seen which is also erroneous.  That issue is fixed in  
> > r5661.  However, the reproduction of the bug is doesn't appear  
> > possible with the scenario you describe, which suggests that your  
> > serialization/merge scheme may still be producing data that is not  
> > what's expected.
>
> > The reproduction of the error is via issuing a session.delete() for  
> > the object, then issuing session.add() for a brand new object which  
> > has no values set in the child table, but includes the primary key of  
> > the original object.  It is not possible to produce this effect using  
> > merge() since merge() will never result in an INSERT for a primary key  
> > value that already exists in the database or session.
>
> > Also, my analysis of the issue also has led me to rethink the feature  
> > in question (called a row switch), so I will almost certainly be  
> > changing the behavior of it once again in 0.6 to issue an explicit  
> > DELETE and INSERT for a delete()/add() pair of the same primary key.    
> > So if we don't figure out how your pickle/merge() scenario is being  
> > interpreted as a delete()/add() pair, this eventual change might again  
> > cause problems for you even if the issue is resolved for now.
>
> > On Jan 13, 2009, at 12:03 AM, Michael Bayer wrote:
>
> > > On Jan 12, 2009, at 11:37 PM, Duder wrote:
> > >> missing from the object, so it is generating bad SQL. Is this a bug,
> > >> or do I need to change something to be compatible with 0.5.0?
>
> > > its impossible to say without a full reproducing test case.  I've
> > > tried many versions of the test below and none have any issue:
>
> > > from sqlalchemy import *
> > > from sqlalchemy.orm import *
> > > from sqlalchemy.ext.declarative import declarative_base
> > > import cPickle as pickle
>
> > > engine = create_engine('sqlite://', echo=True)
> > > Base = declarative_base()
> > > class Person(Base):
> > >     __tablename__ = 'people'
> > >     id = Column('id', Integer, primary_key=True)
> > >     name = Column('name', String(50))
> > >     discriminator = Column('type', String(50))
> > >     __mapper_args__ = {'polymorphic_on':discriminator}
>
> > > class Engineer(Person):
> > >     __tablename__ = 'engineers'
> > >     __mapper_args__ = {'polymorphic_identity':'engineer'}
> > >     id = Column('id', Integer, ForeignKey('people.id'),
> > > primary_key=True)
> > >     primary_language = Column('primary_language', String(50))
>
> > > Base.metadata.create_all(engine)
>
> > > e1 = Engineer(name="dilbert", primary_language="java")
>
> > > sess = sessionmaker(engine)()
> > > sess.add(e1)
>
> > > sess.commit()
>
> > > e1 = sess.query(Person).filter(Person.name=='dilbert').one()
>
> > > assert 'primary_language' not in e1.__dict__
> > > assert 'name' in e1.__dict__
>
> > > sess.expunge(e1)
>
> > > # "serialize to the client"
> > > e2 = pickle.loads(pickle.dumps(e1))
>
> > > # client changes something (?)
> > > e2.name = 'ed'
>
> > > # "deserialize from the client"
> > > e3 = pickle.loads(pickle.dumps(e2))
>
> > > # merge
> > > e1 = sess.merge(e3)
> > > sess.commit()
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to