diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-09 17:58:01 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-09 17:58:01 +0000 |
commit | 1b0ac7e43b715b9050cb5f45d4a180bfc203c8a9 (patch) | |
tree | 8f59af19f4ae2e3a16166d4d0751825236785479 /lib | |
parent | 77440a7f986f49025756fa32164845df151eea45 (diff) | |
download | sqlalchemy-1b0ac7e43b715b9050cb5f45d4a180bfc203c8a9.tar.gz |
added workaround for funny pragma behavior on windows pysqlite
singletonthreadpool has a dispose() method, used by proxy_engine test
to better clean up after itself on windows
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqlalchemy/databases/sqlite.py | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/pool.py | 17 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index b2aeb75fd..d96c0eda1 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -154,6 +154,10 @@ class SQLiteDialect(ansisql.ANSIDialect): def has_table(self, connection, table_name): cursor = connection.execute("PRAGMA table_info(" + table_name + ")", {}) row = cursor.fetchone() + + # consume remaining rows, to work around: http://www.sqlite.org/cvstrac/tktview?tn=1884 + while cursor.fetchone() is not None:pass + return (row is not None) def reflecttable(self, connection, table): diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py index 9aa149d5e..7a88ac6f7 100644 --- a/lib/sqlalchemy/pool.py +++ b/lib/sqlalchemy/pool.py @@ -124,6 +124,12 @@ class Pool(object): def log(self, msg): self._logger.write(msg) + def dispose(self): + raise NotImplementedError() + + def __del__(self): + self.dispose() + class ConnectionFairy(object): def __init__(self, pool, connection=None): self.pool = pool @@ -184,7 +190,14 @@ class SingletonThreadPool(Pool): self._creator = creator def dispose(self): - pass + for key, conn in self._conns.items(): + try: + conn.close() + except: + # sqlite won't even let you close a conn from a thread that didn't create it + pass + del self._conns[key] + def status(self): return "SingletonThreadPool id:%d thread:%d size: %d" % (id(self), thread.get_ident(), len(self._conns)) @@ -241,8 +254,6 @@ class QueuePool(Pool): conn.close() except Queue.Empty: break - def __del__(self): - self.dispose() def status(self): tup = (self.size(), self.checkedin(), self.overflow(), self.checkedout()) |