refactor broken in check_mutable_modified

Issue #1782 resolved
Mike Bayer repo owner created an issue

need to understand the effect here then add a test to attributes.py

from sqlalchemy import MetaData, Table, Column, Integer, PickleType, create_engine
from sqlalchemy.orm import mapper, create_session

metadata = MetaData(create_engine('sqlite://', echo=True))
tbl = Table('x', metadata,
            Column('id', Integer, primary_key=True),
            Column('data', PickleType))
metadata.create_all()

class Data(object):
    pass

mapper(Data, tbl)
tbl.insert().execute({'id':1, 'data':[1,2,3](1,2,3)})

d_id = 1

session = create_session(autocommit=False,
                         autoflush=False,
                         expire_on_commit=False)

#f = session.query(Data).get(d_id)

assert session.query(Data).get(d_id).id == d_id  # access PK first
assert 2 in session.query(Data).get(d_id).data   # now this fails

fix:

--- a/lib/sqlalchemy/orm/attributes.py  Mon Apr 26 21:16:23 2010 +0200
+++ b/lib/sqlalchemy/orm/attributes.py  Mon Apr 26 15:49:45 2010 -0400
@@ -500,7 +500,10 @@
             self, state, v)

     def check_mutable_modified(self, state, dict_):
-        v = dict_.get(self.key, NO_VALUE)
+        if not dict_:
+            v = state.committed_state.get(self.key, NO_VALUE)
+        else:
+            v = dict_.get(self.key, NO_VALUE)
         a, u, d = History.from_attribute(self, state, v)
         return bool(a or d)

Comments (3)

  1. Log in to comment