--- ZSQLExtend/ZSQLExtend.py 2011/02/17 18:23:58 1.140 +++ ZSQLExtend/ZSQLExtend.py 2012/02/15 08:08:42 1.143 @@ -5,6 +5,7 @@ import urllib import re import string #from pyPgSQL import libpq +import psycopg2 from AccessControl import getSecurityManager,Unauthorized from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.PageTemplates.PageTemplateFile import PageTemplateFile @@ -434,7 +435,7 @@ class ZSQLExtendFolder(Folder,Persistent options.replace_table=replace options.backup_table=backup options.debug=debug - + logging.debug(options) if RESPONSE and log_to_response: # set up logging to response as plain text logging.debug("Setting up logging to RESPONSE") @@ -993,15 +994,51 @@ class ZSQLExtendFolder(Folder,Persistent def ZSQLSimpleSearch(self,query=None,max_rows=1000000): """new simple search""" - logging.debug("new ZSQLSimpleSearch X %s"%query) + logging.debug("new ZSQLSimpleSearch %s"%query) # get Connection instance con = self.getConnectionObj() # call to get db object dbc = con() if getattr(self, 'autocommit', False): # force transaction isolation level (for psycopg2 0=autocommit) + logging.debug(" old tilevel=%s"%dbc.tilevel) dbc.tilevel = 0 - res = dbc.query(query, max_rows=max_rows) + # modified code from ZPsycopgDA.db without _register: + c = dbc.getcursor() + desc = () + r = [] + try: + try: + c.execute(query) + + except psycopg2.OperationalError: + #logging.exception("Operational error on connection, closing it.") + try: + # Only close our connection + dbc.putconn(True) + except: + #logging.debug("Something went wrong when we tried to close the pool", exc_info=True) + pass + + if c.description is not None: + if max_rows: + r = c.fetchmany(max_rows) + else: + r = c.fetchall() + desc = c.description + + dbc.failures = 0 + + except StandardError, err: + raise err + + res = (dbc.convert_description(desc), r) + + else: + logging.debug(" no autocommit") + # just use DA's query method + res = dbc.query(query, max_rows=max_rows) + # return result set as Result object with Brains return Results(res)