summaryrefslogtreecommitdiff
path: root/openerp/sql_db.py
diff options
context:
space:
mode:
Diffstat (limited to 'openerp/sql_db.py')
-rw-r--r--openerp/sql_db.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/openerp/sql_db.py b/openerp/sql_db.py
index f4a899c8db2..ab92d7cc21d 100644
--- a/openerp/sql_db.py
+++ b/openerp/sql_db.py
@@ -183,6 +183,8 @@ class Cursor(object):
self.__caller = False
self.__closer = False
+ self._default_log_exceptions = True
+
def __del__(self):
if not self.__closed:
# Oops. 'self' has not been closed explicitly.
@@ -199,7 +201,7 @@ class Cursor(object):
self._close(True)
@check
- def execute(self, query, params=None, log_exceptions=True):
+ def execute(self, query, params=None, log_exceptions=None):
if '%d' in query or '%f' in query:
self.__logger.warn(query)
self.__logger.warn("SQL queries cannot contain %d or %f anymore. "
@@ -212,11 +214,11 @@ class Cursor(object):
params = params or None
res = self._obj.execute(query, params)
except psycopg2.ProgrammingError, pe:
- if log_exceptions:
+ if (self._default_log_exceptions if log_exceptions is None else log_exceptions):
self.__logger.error("Programming error: %s, in query %s", pe, query)
raise
except Exception:
- if log_exceptions:
+ if (self._default_log_exceptions if log_exceptions is None else log_exceptions):
self.__logger.exception("bad query: %s", self._obj.query or query)
raise
@@ -294,6 +296,9 @@ class Cursor(object):
del self._obj
self.__closed = True
+ # Clean the underlying connection.
+ self._cnx.rollback()
+
if leak:
self._cnx.leaked = True
else:
@@ -430,6 +435,7 @@ class ConnectionPool(object):
self._debug('Put connection to %r in pool', cnx.dsn)
else:
self._debug('Forgot connection to %r', cnx.dsn)
+ cnx.close()
break
else:
raise PoolError('This connection does not below to the pool')
@@ -498,7 +504,7 @@ def db_connect(db_name):
return Connection(_Pool, db_name)
def close_db(db_name):
- """ You might want to call openerp.netsvc.Agent.cancel(db_name) along this function."""
+ """ You might want to call openerp.modules.registry.RegistryManager.delete(db_name) along this function."""
_Pool.close_all(dsn(db_name))
ct = currentThread()
if hasattr(ct, 'dbname'):