diff options
| author | Vo Minh Thu <vmt@openerp.com> | 2011-05-25 18:06:07 +0200 |
|---|---|---|
| committer | Vo Minh Thu <vmt@openerp.com> | 2011-05-25 18:06:07 +0200 |
| commit | 2f6dff76900a87221bd7c10bd761beffff4669bd (patch) | |
| tree | 28e6ee319db178822ac651243e265168a41162c7 /openerp/sql_db.py | |
| parent | 959ff88d646546e8e353bfb6467334df60dcac45 (diff) | |
| parent | 16ac84af68d91b177394a2249f8b866e45ce3de3 (diff) | |
[MERGE] moved around some code (preparing for some refactoring) (large diff).
bzr revid: vmt@openerp.com-20110525160607-45pq13910rduijkk
Diffstat (limited to 'openerp/sql_db.py')
| -rw-r--r-- | openerp/sql_db.py | 20 |
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'): |
