Author: dwoods
Date: Thu Apr  8 19:17:53 2010
New Revision: 932068

URL: http://svn.apache.org/viewvc?rev=932068&view=rev
Log:
OPENJPA-1616 Fix TestTimeoutException test failures on MySQL

Modified:
    
openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java

Modified: 
openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java?rev=932068&r1=932067&r2=932068&view=diff
==============================================================================
--- 
openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
 (original)
+++ 
openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
 Thu Apr  8 19:17:53 2010
@@ -27,6 +27,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
@@ -423,6 +424,24 @@ public class MySQLDictionary
     }
     
     @Override
+    protected int matchErrorState(Map<Integer,Set<String>> errorStates, 
SQLException ex) {
+        int state = super.matchErrorState(errorStates, ex);
+        // OPENJPA-1616 - Special case for MySQL not returning a SQLState for 
timeouts
+        if (state == StoreException.GENERAL && ex.getErrorCode() == 0 && 
ex.getSQLState() == null) {
+            // look at the nested MySQL exception for more details
+            SQLException sqle = ex.getNextException();
+            if (sqle != null && 
sqle.toString().startsWith("com.mysql.jdbc.exceptions.MySQLTimeoutException")) {
+                if (conf != null && conf.getLockTimeout() != -1) {
+                    state = StoreException.LOCK;
+                } else {
+                    state = StoreException.QUERY;
+                }
+            }
+        }
+        return state;
+    }
+
+    @Override
     public boolean isFatalException(int subtype, SQLException ex) {
         if ((subtype == StoreException.LOCK  && ex.getErrorCode() == 1205)
           ||(subtype == StoreException.QUERY && ex.getErrorCode() == 1317)) {


Reply via email to