--- ZSQLExtend/ZSQLExtend.py 2011/02/11 19:08:49 1.137 +++ ZSQLExtend/ZSQLExtend.py 2012/02/15 08:08:42 1.143 @@ -5,11 +5,14 @@ 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 from Products.ZSQLMethods.SQL import SQLConnectionIDs +from Shared.DC.ZRDB.Results import Results + from xml.sax.saxutils import escape from types import * import Shared.DC.ZRDB.DA @@ -432,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") @@ -586,12 +589,13 @@ class ZSQLExtendFolder(Folder,Persistent return pt() - def changeZSQLExtend(self,label,description,weight=0,connection_id=None,REQUEST=None,): + def changeZSQLExtend(self,label,description,weight=0,connection_id=None,autocommit=None,REQUEST=None,): """change the Konfiguration""" self.connection_id=connection_id self.weight=weight self.label=label self.description=description + self.autocommit = (autocommit == "on") if REQUEST is not None: return self.manage_main(self, REQUEST) @@ -987,7 +991,58 @@ class ZSQLExtendFolder(Folder,Persistent except: logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2]) + def ZSQLSimpleSearch(self,query=None,max_rows=1000000): + """new simple search""" + 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 + # 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) + + def oldZSQLSimpleSearch(self,query=None,max_rows=1000000): """simple search""" logging.error("ZSQLSimpleSearch X %s"%query) #print query