diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-10-26 12:41:18 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-10-26 12:41:18 -0400 |
| commit | d9adb2a4fd3e865d3c8d4f6f2e0a12d5c4036c97 (patch) | |
| tree | c00b308c373d2dae57c09e65d206e4be619b1ab6 /test/ext | |
| parent | 8301651428be5396b76f7d20c8f61b5558d5a971 (diff) | |
| download | sqlalchemy-d9adb2a4fd3e865d3c8d4f6f2e0a12d5c4036c97.tar.gz | |
- [bug] the value of a composite attribute is now
expired after an insert or update operation, instead
of regenerated in place. This ensures that a
column value which is expired within a flush
will be loaded first, before the composite
is regenerated using that value. [ticket:2309]
- [bug] The fix in [ticket:2309] also emits the
"refresh" event when the composite value is
loaded on access, even if all column
values were already present, as is appropriate.
This fixes the "mutable" extension which relies
upon the "load" event to ensure the _parents
dictionary is up to date, fixes [ticket:2308].
Thanks to Scott Torborg for the test case here.
Diffstat (limited to 'test/ext')
| -rw-r--r-- | test/ext/test_mutable.py | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/test/ext/test_mutable.py b/test/ext/test_mutable.py index df4006c01..129a460b0 100644 --- a/test/ext/test_mutable.py +++ b/test/ext/test_mutable.py @@ -1,4 +1,4 @@ -from sqlalchemy import Integer, ForeignKey +from sqlalchemy import Integer, ForeignKey, String from sqlalchemy.types import PickleType, TypeDecorator, VARCHAR from sqlalchemy.orm import mapper, Session, composite from sqlalchemy.orm.mapper import Mapper @@ -115,6 +115,17 @@ class _MutableDictTestBase(object): f2.data['a'] = 'c' assert f2 in sess.dirty + def test_unrelated_flush(self): + sess = Session() + f1 = Foo(data={"a":"b"}, unrelated_data="unrelated") + sess.add(f1) + sess.flush() + f1.unrelated_data = "unrelated 2" + sess.flush() + f1.data["a"] = "c" + sess.commit() + eq_(f1.data["a"], "c") + def _test_non_mutable(self): sess = Session() @@ -137,7 +148,8 @@ class MutableWithScalarPickleTest(_MutableDictTestBase, fixtures.MappedTest): Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('skip', mutable_pickle), Column('data', mutable_pickle), - Column('non_mutable_data', PickleType) + Column('non_mutable_data', PickleType), + Column('unrelated_data', String(50)) ) def test_non_mutable(self): @@ -170,7 +182,8 @@ class MutableWithScalarJSONTest(_MutableDictTestBase, fixtures.MappedTest): Table('foo', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('data', MutationDict.as_mutable(JSONEncodedDict)), - Column('non_mutable_data', JSONEncodedDict) + Column('non_mutable_data', JSONEncodedDict), + Column('unrelated_data', String(50)) ) def test_non_mutable(self): @@ -184,7 +197,8 @@ class MutableAssocWithAttrInheritTest(_MutableDictTestBase, fixtures.MappedTest) Table('foo', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('data', PickleType), - Column('non_mutable_data', PickleType) + Column('non_mutable_data', PickleType), + Column('unrelated_data', String(50)) ) Table('subfoo', metadata, @@ -230,7 +244,8 @@ class MutableAssociationScalarPickleTest(_MutableDictTestBase, fixtures.MappedTe Table('foo', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('skip', PickleType), - Column('data', PickleType) + Column('data', PickleType), + Column('unrelated_data', String(50)) ) class MutableAssociationScalarJSONTest(_MutableDictTestBase, fixtures.MappedTest): @@ -260,7 +275,8 @@ class MutableAssociationScalarJSONTest(_MutableDictTestBase, fixtures.MappedTest Table('foo', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('data', JSONEncodedDict) + Column('data', JSONEncodedDict), + Column('unrelated_data', String(50)) ) @@ -270,7 +286,8 @@ class _CompositeTestBase(object): Table('foo', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('x', Integer), - Column('y', Integer) + Column('y', Integer), + Column('unrelated_data', String(50)) ) def teardown(self): @@ -374,6 +391,18 @@ class MutableCompositesTest(_CompositeTestBase, fixtures.MappedTest): setattr, f1, 'data', 'foo' ) + def test_unrelated_flush(self): + sess = Session() + f1 = Foo(data=Point(3, 4), unrelated_data="unrelated") + sess.add(f1) + sess.flush() + f1.unrelated_data = "unrelated 2" + sess.flush() + f1.data.x = 5 + sess.commit() + + eq_(f1.data.x, 5) + class MutableInheritedCompositesTest(_CompositeTestBase, fixtures.MappedTest): @classmethod def define_tables(cls, metadata): |
