From fae54b27dbf41e52d10a61f7d4994ff6ac22337a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 1 Jun 2011 17:46:17 -0400 Subject: [PATCH] - Fixed bug whereby metadata.reflect(bind) would close a Connection passed as a bind argument. Regression from 0.6. --- CHANGES | 4 ++++ lib/sqlalchemy/schema.py | 3 ++- test/engine/test_reflection.py | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a946f2cac6..d68e586b55 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,10 @@ CHANGES ===== - sql + - Fixed bug whereby metadata.reflect(bind) + would close a Connection passed as a + bind argument. Regression from 0.6. + - Streamlined the process by which a Select determines what's in it's '.c' collection. Behaves identically, except that a diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index e85c82ad72..511d922a0a 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -2338,7 +2338,8 @@ class MetaData(SchemaItem): for name in load: Table(name, self, **reflect_opts) finally: - if conn is not None: + if conn is not None and \ + conn is not bind: conn.close() def append_ddl_listener(self, event_name, listener): diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index 023d7a3e24..5a684eaa50 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -695,6 +695,18 @@ class ReflectionTest(fixtures.TestBase, ComparesTables): m9.reflect() self.assert_(not m9.tables) + def test_reflect_all_conn_closing(self): + m1 = MetaData() + c = testing.db.connect() + m1.reflect(bind=c) + assert not c.closed + + def test_inspector_conn_closing(self): + m1 = MetaData() + c = testing.db.connect() + i = Inspector.from_engine(testing.db) + assert not c.closed + def test_index_reflection(self): m1 = MetaData(testing.db) t1 = Table('party', m1, -- 2.39.5