[Erp5-report] r13706 - /erp5/trunk/products/ZMySQLDDA/db.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Mar 27 13:40:44 CEST 2007


Author: vincent
Date: Tue Mar 27 13:40:43 2007
New Revision: 13706

URL: http://svn.erp5.org?rev=13706&view=rev
Log:
Update ZMySQLDDA to be compatible with customized ZMySQLDA:
  Remove locking.
  Pool scheduled queries.
  Use self._query instead of database's query.
Remove unused variables.
Remove LOGs which occur on normal execution path.
Remove commented out LOGs.

Modified:
    erp5/trunk/products/ZMySQLDDA/db.py

Modified: erp5/trunk/products/ZMySQLDDA/db.py
URL: http://svn.erp5.org/erp5/trunk/products/ZMySQLDDA/db.py?rev=13706&r1=13705&r2=13706&view=diff
==============================================================================
--- erp5/trunk/products/ZMySQLDDA/db.py (original)
+++ erp5/trunk/products/ZMySQLDDA/db.py Tue Mar 27 13:40:43 2007
@@ -95,90 +95,52 @@
 
     def __init__(self,connection):
         DB.__init__(self, connection)
-        self.sql_string_list = []
+        self._sql_string_list_dict = {}
 
     def query(self,query_string, max_rows=1000):
         self._use_TM and self._register()
-        desc=None
-        result=()
-        db=self.db
-        try:
-            self._lock.acquire()
-            for qs in filter(None, map(strip,split(query_string, '\0'))):
-                qtype = upper(split(qs, None, 1)[0])
-                if qtype == "SELECT":
-                      raise NotSupportedError, "can not SELECT in deferred connections"
-                #LOG('ZMySQLDDA', 0, "insert string %s" % qs )
-                self.sql_string_list.append(qs)
-        finally:
-            self._lock.release()
+        for qs in filter(None, map(strip,split(query_string, '\0'))):
+            qtype = upper(split(qs, None, 1)[0])
+            if qtype == "SELECT":
+                  raise NotSupportedError, "can not SELECT in deferred connections"
+            self._appendToSQLStringList(qs)
 
         return (),()
 
+    def _emptySQLStringList(self):
+        self._sql_string_list_dict[get_ident()] = []
+
+    def _appendToSQLStringList(self, value):
+        self._sql_string_list_dict[get_ident()].append(value)
+
+    def _getSQLStringList(self):
+        return self._sql_string_list_dict[get_ident()]
+
     def _begin(self, *ignored):
-        from thread import get_ident
-        self._tlock.acquire()
-        self._tthread = get_ident()
         # The Deferred DB instance is sometimes used for several
         # transactions, so it is required to clear the sql_string_list
         # each time a transaction starts
-        self.sql_string_list = []
+        self._emptySQLStringList()
+        self._setFinishedOrAborted(False)
 
     def _finish(self, *ignored):
-        from thread import get_ident
-        if not self._tlock.locked() or self._tthread != get_ident():
-            LOG('ZMySQLDA', INFO, "ignoring _finish")
-            return
-        # BEGIN commit
-        #LOG('ZMySQLDDA', INFO, "BEGIN commit")
-        try:
-            if self._transactions:
-                self.db.query("BEGIN")
-                self.db.store_result()
-            if self._mysql_lock:
-                self.db.query("SELECT GET_LOCK('%s',0)" % self._mysql_lock)
-                self.db.store_result()
-        except:
-            LOG('ZMySQLDDA', ERROR, "exception during _begin",
-                error=sys.exc_info())
-            self._tlock.release()
-            raise
-        # Execute SQL
-        db = self.db
-        for qs in self.sql_string_list:
-            try:
-                db.query(qs)
-                c=db.store_result()
-            except OperationalError, m:
-                if m[0] not in hosed_connection: raise
-                # Hm. maybe the db is hosed.  Let's restart it.
-                db=self.db=apply(self.Database_Connection, (), self.kwargs)
-                try:
-                    db.query(qs)
-                    c=db.store_result()
-                except OperationalError, m:
-                    raise
-            #LOG('ZMySQLDDA', INFO, "Execute %s" % qs)
-        # Finish commit
-        #LOG('ZMySQLDDA', INFO, "FINISH commit")
-        try:
-            try:
-                if self._mysql_lock:
-                    self.db.query("SELECT RELEASE_LOCK('%s')" % self._mysql_lock)
-                    self.db.store_result()
-                if self._transactions:
-                    self.db.query("COMMIT")
-                self.db.store_result()
-            except:
-                LOG('ZMySQLDDA', ERROR, "exception during _finish",
-                    error=sys.exc_info())
-                raise
-        finally:
-            self._tlock.release()
+        if self._getFinishedOrAborted():
+          return
+        self._setFinishedOrAborted(True)
+        # Ping the database to reconnect if connection was lost.
+        self._query("SELECT 1", force_reconnect=True)
+        if self._transactions:
+            self._query("BEGIN")
+        if self._mysql_lock:
+            self._query("SELECT GET_LOCK('%s',0)" % self._mysql_lock)
+        for qs in self._getSQLStringList():
+            self._query(qs)
+        if self._mysql_lock:
+            self._query("SELECT RELEASE_LOCK('%s')" % self._mysql_lock)
+        if self._transactions:
+            self._query("COMMIT")
 
     def _abort(self, *ignored):
-        from thread import get_ident
-        if not self._tlock.locked() or self._tthread != get_ident():
-            LOG('ZMySQLDDA', INFO, "ignoring _abort")
-            return
-        self._tlock.release()
+        self._setFinishedOrAborted(True)
+        pass
+




More information about the Erp5-report mailing list