this is committed in the latest trunk and will be in 0.5.5.

Michael Bayer wrote:
>
> Ok we'll have to ensure this doesn't break anything, that line doesn't
> seem to be covered in the current unit tests
>
> Roel van Os wrote:
>> Hi Michael,
>>
>> On 12-06-2009 16:22, Michael Bayer wrote:
>>> this is likely a bug.  try out the patch below (against the latest 0.5
>>> release):
>>>
>>
>> After applying the patch it works perfectly. Thanks a lot!
>>
>> Regards,
>> Roel
>>
>>> Index: lib/sqlalchemy/orm/state.py
>>> ===================================================================
>>> --- lib/sqlalchemy/orm/state.py     (revision 6049)
>>> +++ lib/sqlalchemy/orm/state.py     (working copy)
>>> @@ -111,8 +111,8 @@
>>>               return None
>>>           elif hasattr(impl, 'get_collection'):
>>>               return impl.get_collection(self, dict_, x,
>>> passive=passive)
>>> -        elif isinstance(x, list):
>>> -            return x
>>> +#        elif isinstance(x, list):
>>> +#            return x
>>>           else:
>>>               return [x]
>>>
>>>
>>>
>>>
>>> Roel van Os wrote:
>>>
>>>> Hi all,
>>>>
>>>> In my program I'm using PGArray to store a list of strings in the
>>>> database (defined as text[] in the schema).
>>>>
>>>> When I use Session.merge to create a copy of an object in the current
>>>> session, the list is converted to a single string (the first from the
>>>> list) in the copy. I've placed an example below. dont_load True or
>>>> False
>>>> doesn't make a difference.
>>>>
>>>> I've tested with SQLAlchemy 0.5.4 and 0.4.6.
>>>>
>>>> Any idea what the problem might be and what I can do about it?
>>>>
>>>> Thanks,
>>>> Roel van Os
>>>>
>>>> Example code:
>>>>
>>>> #!/usr/bin/env python
>>>> from sqlalchemy import *
>>>> from sqlalchemy.sql import *
>>>> from sqlalchemy.orm import *
>>>> from sqlalchemy.ext.declarative import declarative_base
>>>> from sqlalchemy.databases.postgres import PGArray
>>>>
>>>> Base = declarative_base()
>>>>
>>>> class TestClass(Base):
>>>>       __tablename__ = 'testclass'
>>>>
>>>>       id              = Column(Integer, primary_key=True)
>>>>       test_array      = Column(PGArray(Text))
>>>>
>>>> dburl = 'postgres://xxxx:x...@xxxx/xxxx'
>>>> engine = create_engine(dburl, convert_unicode=True, echo=False,
>>>> pool_recycle=60)
>>>> Session = sessionmaker(bind=engine)
>>>> Base.metadata.create_all(engine)
>>>>
>>>> # Create a test object
>>>> s1 = Session()
>>>> o1 = TestClass(test_array=['1', '2', '3'])
>>>> s1.save(o1)
>>>> s1.commit()
>>>> o1_id = o1.id
>>>> s1.close()
>>>>
>>>> # Load the test object
>>>> s2 = Session()
>>>> o2 = s2.query(TestClass).get(o1_id)
>>>> print o2.test_array
>>>> assert len(o2.test_array) == 3
>>>>
>>>> # Merge the object into another session
>>>> s3 = Session()
>>>> o3 = s3.merge(o2, dont_load=True)
>>>>
>>>> # Should print the same as above, but prints "1"
>>>> print o3.test_array
>>>> assert len(o3.test_array) == 3
>>>>
>>>>
>>>>
>>>
>>>
>>> >
>>>
>>
>>
>> >
>>
>
>
> >
>


--~--~---------~--~----~------------~-------~--~----~
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