diff options
author | Hajime Nakagami <nakagami@gmail.com> | 2013-03-02 23:34:11 +0900 |
---|---|---|
committer | Hajime Nakagami <nakagami@gmail.com> | 2013-03-02 23:34:11 +0900 |
commit | a40c50c3dba014bc2bb71d35e81034b09b29a7ab (patch) | |
tree | b52c45295a38bcd7135acefd19b2ec7abd01c22a /test | |
parent | 62e3560e4d3b505fb557a5b8c4f48f4cf52ca4f0 (diff) | |
parent | d9a7f2dbd5f9b3a111b04ff59089cb84220fe427 (diff) | |
download | sqlalchemy-a40c50c3dba014bc2bb71d35e81034b09b29a7ab.tar.gz |
merge from default
Diffstat (limited to 'test')
-rw-r--r-- | test/orm/test_session.py | 39 | ||||
-rw-r--r-- | test/orm/test_sync.py | 23 | ||||
-rw-r--r-- | test/orm/test_transaction.py | 12 |
3 files changed, 56 insertions, 18 deletions
diff --git a/test/orm/test_session.py b/test/orm/test_session.py index 0a50a48cb..5c8968842 100644 --- a/test/orm/test_session.py +++ b/test/orm/test_session.py @@ -780,6 +780,27 @@ class SessionStateTest(_fixtures.FixtureTest): go() eq_(canary, [False]) + def test_deleted_expunged(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + sess = Session() + sess.add(User(name='x')) + sess.commit() + + u1 = sess.query(User).first() + sess.delete(u1) + + assert not was_deleted(u1) + sess.flush() + + assert was_deleted(u1) + assert u1 not in sess + assert object_session(u1) is sess + sess.commit() + + assert object_session(u1) is None + class SessionStateWFixtureTest(_fixtures.FixtureTest): def test_autoflush_rollback(self): @@ -835,24 +856,6 @@ class SessionStateWFixtureTest(_fixtures.FixtureTest): assert sa.orm.object_session(a) is None assert sa.orm.attributes.instance_state(a).session_id is None - def test_deleted_expunged(self): - users, User = self.tables.users, self.classes.User - - mapper(User, users) - sess = Session() - - u1 = sess.query(User).first() - sess.delete(u1) - - assert not was_deleted(u1) - sess.flush() - - assert was_deleted(u1) - assert u1 not in sess - assert object_session(u1) is sess - sess.commit() - - assert object_session(u1) is None class WeakIdentityMapTest(_fixtures.FixtureTest): diff --git a/test/orm/test_sync.py b/test/orm/test_sync.py index a2c894725..c5825e88b 100644 --- a/test/orm/test_sync.py +++ b/test/orm/test_sync.py @@ -212,6 +212,29 @@ class SyncTest(fixtures.MappedTest, True ) + def test_source_modified_composite(self): + uowcommit, a1, b1, a_mapper, b_mapper = self._fixture() + a1.obj().foo = 10 + a1._commit_all(a1.dict) + a1.obj().foo = 12 + pairs = [(a_mapper.c.id, b_mapper.c.id,), + (a_mapper.c.foo, b_mapper.c.id)] + eq_( + sync.source_modified(uowcommit, a1, a_mapper, pairs), + True + ) + + def test_source_modified_composite_unmodified(self): + uowcommit, a1, b1, a_mapper, b_mapper = self._fixture() + a1.obj().foo = 10 + a1._commit_all(a1.dict) + pairs = [(a_mapper.c.id, b_mapper.c.id,), + (a_mapper.c.foo, b_mapper.c.id)] + eq_( + sync.source_modified(uowcommit, a1, a_mapper, pairs), + False + ) + def test_source_modified_no_unmapped(self): uowcommit, a1, b1, a_mapper, b_mapper = self._fixture() pairs = [(b_mapper.c.id, b_mapper.c.id,)] diff --git a/test/orm/test_transaction.py b/test/orm/test_transaction.py index 28735bd11..7df6ecf91 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -358,6 +358,18 @@ class SessionTransactionTest(FixtureTest): sess.begin, subtransactions=True) sess.close() + def test_no_sql_during_prepare(self): + sess = create_session(bind=testing.db, autocommit=False) + + @event.listens_for(sess, "after_commit") + def go(session): + session.execute("select 1") + assert_raises_message(sa_exc.InvalidRequestError, + "This session is in 'prepared' state, where no " + "further SQL can be emitted until the " + "transaction is fully committed.", + sess.commit) + def _inactive_flushed_session_fixture(self): users, User = self.tables.users, self.classes.User |