From 0d75e5961c80d1125f6b5afb7e7f1517fa6fca55 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 19 Oct 2006 02:52:31 +0000 Subject: [PATCH] - [ticket:346], session closing the connection on flush - added unicode assertion for sqlite --- CHANGES | 1 + lib/sqlalchemy/orm/session.py | 5 +++-- test/orm/session.py | 22 ++++++++++++++++++++++ test/sql/testtypes.py | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 7413d081e5..9975170bd2 100644 --- a/CHANGES +++ b/CHANGES @@ -155,6 +155,7 @@ preventing conflicts with lazy loader operation, fixes [ticket:308] - fix to deferred group loading + - session.flush() wont close a connection it opened [ticket:346] - added "batch=True" flag to mapper; if False, save_obj will fully save one object at a time including calls to before_XXXX and after_XXXX diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 73052f11e2..3ec3044b8d 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -37,7 +37,7 @@ class SessionTransaction(object): e = connectable.engine c = connectable.contextual_connect() if not self.connections.has_key(e): - self.connections[e] = (c, c.begin()) + self.connections[e] = (c, c.begin(), c is not connectable) return self.connections[e][0] def commit(self): if self.parent is not None: @@ -58,7 +58,8 @@ class SessionTransaction(object): if self.parent is not None: return for t in self.connections.values(): - t[0].close() + if t[2]: + t[0].close() self.session.transaction = None class Session(object): diff --git a/test/orm/session.py b/test/orm/session.py index f7cdd6ca22..6064b23b5f 100644 --- a/test/orm/session.py +++ b/test/orm/session.py @@ -9,6 +9,28 @@ db = testbase.db from sqlalchemy import * +class SessionTest(AssertMixin): + def setUpAll(self): + tables.create() + tables.data() + def tearDownAll(self): + tables.drop() + def tearDown(self): + tables.delete() + clear_mappers() + def setUp(self): + pass + + def test_close(self): + """test that flush() doenst close a connection the session didnt open""" + c = testbase.db.connect() + class User(object):pass + mapper(User, users) + s = create_session(bind_to=c) + s.save(User()) + s.flush() + c.execute("select * from users") + class OrphanDeletionTest(AssertMixin): def setUpAll(self): diff --git a/test/sql/testtypes.py b/test/sql/testtypes.py index ef851cf630..db5b2c045d 100644 --- a/test/sql/testtypes.py +++ b/test/sql/testtypes.py @@ -146,6 +146,7 @@ class UnicodeTest(AssertMixin): if isinstance(x['plain_data'], unicode): # SQLLite returns even non-unicode data as unicode self.assert_(db.name == 'sqlite') + self.assert_(x['plain_data'] == unicodedata) self.echo("its sqlite !") else: self.assert_(not isinstance(x['plain_data'], unicode) and x['plain_data'] == rawdata) -- 2.47.2