[Erp5-report] r25473 - /erp5/trunk/products/ZMySQLDA/db.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Feb 6 14:19:20 CET 2009


Author: vincent
Date: Fri Feb  6 14:19:18 2009
New Revision: 25473

URL: http://svn.erp5.org?rev=25473&view=rev
Log:
Fix error position computation: MySQL limits the length of the output SQL chunk, requiring more tricks to find offset error correctly.

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

Modified: erp5/trunk/products/ZMySQLDA/db.py
URL: http://svn.erp5.org/erp5/trunk/products/ZMySQLDA/db.py?rev=25473&r1=25472&r2=25473&view=diff
==============================================================================
--- erp5/trunk/products/ZMySQLDA/db.py [utf8] (original)
+++ erp5/trunk/products/ZMySQLDA/db.py [utf8] Fri Feb  6 14:19:18 2009
@@ -415,10 +415,18 @@
             prefix, suffix = error_text.split("'", 1)
             if prefix == "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ":
               sql, suffix = suffix.rsplit("'", 1)
-              reference_sql = query
-              error_position = len(reference_sql) - len(sql)
-              raise ProgrammingError(exception[0], "%s '%s' HERE '%s' %s" % (prefix, reference_sql[:error_position], reference_sql[error_position:], suffix))
-          raise
+              try:
+                line_number = int(suffix.rsplit(' ', 1)[-1])
+              except TypeError:
+                pass
+              else:
+                reference_sql = query
+                split_reference_sql = reference_sql.split('\n')
+                candidate_sql = '\n'.join(split_reference_sql[line_number - 1:])
+                error_position = len(reference_sql) - len(candidate_sql) + candidate_sql.find(sql)
+                if error_position > -1:
+                  raise ProgrammingError(exception[0], "%s '%s' HERE '%s' %s" % (prefix, reference_sql[:error_position], reference_sql[error_position:], suffix))
+          raise exception
         return self.db.store_result()
 
     def query(self,query_string, max_rows=1000):




More information about the Erp5-report mailing list