]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- [ticket:346], session closing the connection on flush
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 19 Oct 2006 02:52:31 +0000 (02:52 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 19 Oct 2006 02:52:31 +0000 (02:52 +0000)
- added unicode assertion for sqlite

CHANGES
lib/sqlalchemy/orm/session.py
test/orm/session.py
test/sql/testtypes.py

diff --git a/CHANGES b/CHANGES
index 7413d081e5ec38953deb89980f44bd8ecddcd8ed..9975170bd217c228c8c7d54bfaffd2fae03e345b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
     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
index 73052f11e202c85e9b27e990f2bca0376db26503..3ec3044b8d689b276b1bdca7ad7fed55119837bd 100644 (file)
@@ -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):
index f7cdd6ca22d51dbda0ab8b5a4e195bb1c4f34e31..6064b23b5faf4bbf94bb4d448ee7cbe402497905 100644 (file)
@@ -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):
index ef851cf63005f1cfba2e9a98259eb1dc28dde8f0..db5b2c045d5c62a97b8367e8518e3a16f77605b3 100644 (file)
@@ -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)