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.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/openerp/sql_db.py b/openerp/sql_db.py
index 8afd684d3f1..e759a13e1d3 100644
--- a/openerp/sql_db.py
+++ b/openerp/sql_db.py
@@ -54,7 +54,6 @@ psycopg2.extensions.register_type(psycopg2.extensions.new_type((700, 701, 1700,)
import tools
from tools.func import wraps, frame_codeinfo
-from netsvc import Agent
from datetime import datetime as mdt
from datetime import timedelta
import threading
@@ -68,17 +67,22 @@ sql_counter = 0
class Cursor(object):
IN_MAX = 1000 # decent limit on size of IN queries - guideline = Oracle limit
- __logger = logging.getLogger('db.cursor')
+ __logger = None
def check(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
if self.__closed:
- raise psycopg2.OperationalError('Unable to use the cursor after having closed it')
+ msg = 'Unable to use a closed cursor.'
+ if self.__closer:
+ msg += ' It was closed at %s, line %s' % self.__closer
+ raise psycopg2.OperationalError(msg)
return f(self, *args, **kwargs)
return wrapper
def __init__(self, pool, dbname, serialized=False):
+ if self.__class__.__logger is None:
+ self.__class__.__logger = logging.getLogger('db.cursor')
self.sql_from_log = {}
self.sql_into_log = {}
@@ -100,6 +104,7 @@ class Cursor(object):
self.__caller = frame_codeinfo(currentframe(),2)
else:
self.__caller = False
+ self.__closer = False
def __del__(self):
if not self.__closed:
@@ -198,6 +203,8 @@ class Cursor(object):
if not self._obj:
return
+ if self.sql_log:
+ self.__closer = frame_codeinfo(currentframe(),3)
self.print_log()
if not self._serialized:
@@ -375,15 +382,18 @@ def dsn_are_equals(first, second):
return key(first) == key(second)
-_Pool = ConnectionPool(int(tools.config['db_maxconn']))
+_Pool = None
def db_connect(db_name):
+ global _Pool
+ if _Pool is None:
+ _Pool = ConnectionPool(int(tools.config['db_maxconn']))
currentThread().dbname = 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."""
_Pool.close_all(dsn(db_name))
- Agent.cancel(db_name)
tools.cache.clean_caches_for_db(db_name)
ct = currentThread()
if hasattr(ct, 'dbname'):