mapper since it's not needed.
- sql
+ - NullPool supports reconnect on failure behavior.
+ [ticket:1094]
+
- Columns can again contain percent signs within their
names. [ticket:1256]
def do_get(self):
return self.create_connection()
+ def recreate(self):
+ self.log("Pool recreating")
+
+ return NullPool(self._creator,
+ recycle=self._recycle,
+ echo=self._should_log_info,
+ use_threadlocal=self._use_threadlocal,
+ listeners=self.listeners)
+
+ def dispose(self):
+ pass
+
class StaticPool(Pool):
"""A Pool of exactly one connection, used for all requests.
def test_reconnect(self):
"""tests reconnect operations at the pool level. SA's engine/dialect includes another
layer of reconnect support for 'database was lost' errors."""
+
dbapi = MockDBAPI()
p = pool.QueuePool(creator = lambda: dbapi.connect('foo.db'), pool_size = 1, max_overflow = 0, use_threadlocal = False)
c1 = p.connect()
th.join()
assert len(p._all_conns) == 3
+
+class NullPoolTest(PoolTestBase):
+ def test_reconnect(self):
+ dbapi = MockDBAPI()
+ p = pool.NullPool(creator = lambda: dbapi.connect('foo.db'))
+ c1 = p.connect()
+ c_id = c1.connection.id
+ c1.close(); c1=None
+
+ c1 = p.connect()
+ dbapi.raise_error = True
+ c1.invalidate()
+ c1 = None
+
+ c1 = p.connect()
+ assert c1.connection.id != c_id
+
+
if __name__ == "__main__":
testenv.main()
import testenv; testenv.configure_for_tests()
import weakref
-from testlib.sa import select, MetaData, Table, Column, Integer, String
+from testlib.sa import select, MetaData, Table, Column, Integer, String, pool
import testlib.sa as tsa
from testlib import TestBase, testing, engines
import time
conn.close()
+ def test_null_pool(self):
+ engine = engines.reconnecting_engine(options=dict(poolclass=pool.NullPool))
+ conn = engine.connect()
+ self.assertEquals(conn.execute(select([1])).scalar(), 1)
+ assert not conn.closed
+ engine.test_shutdown()
+ try:
+ conn.execute(select([1]))
+ assert False
+ except tsa.exc.DBAPIError, e:
+ if not e.connection_invalidated:
+ raise
+ assert not conn.closed
+ assert conn.invalidated
+ self.assertEquals(conn.execute(select([1])).scalar(), 1)
+ assert not conn.invalidated
+
def test_close(self):
conn = engine.connect()
self.assertEquals(conn.execute(select([1])).scalar(), 1)