--- ZSQLExtend/ZSQLExtend.py 2011/02/14 22:00:50 1.138 +++ ZSQLExtend/ZSQLExtend.py 2011/02/23 19:43:04 1.141 @@ -10,6 +10,8 @@ from Products.PageTemplates.ZopePageTemp 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 @@ -586,12 +588,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) @@ -995,7 +998,45 @@ class ZSQLExtendFolder(Folder,Persistent con = self.getConnectionObj() # call to get db object dbc = con() - res = dbc.query(query, max_rows=max_rows) + if getattr(self, 'autocommit', False): + # force transaction isolation level (for psycopg2 0=autocommit) + logging.debug(" old tilevel="+dbc.tilevel) + dbc.tilevel = 0 + # modified code from ZPsycopgDA.db without _register: + c = dbc.getcursor() + desc = () + r = [] + try: + try: + c.execute(qs) + + 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: + # 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)