Author: ppoddar
Date: Mon Dec 10 12:11:22 2007
New Revision: 603028

URL: http://svn.apache.org/viewvc?rev=603028&view=rev
Log:
OPENJPA-462: Adding SQLState in DerbyDictionary to demonstrate specialization

Modified:
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=603028&r1=603027&r2=603028&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
 Mon Dec 10 12:11:22 2007
@@ -4033,7 +4033,11 @@
      * [EMAIL PROTECTED] StoreException}.<br>
      * JDBC Drivers are not uniform in return values of SQLState for the same
      * error and hence each database specific Dictionary can specialize.<br>
-     * Default behavior is to return an empty list. 
+     * 
+     * 
+     * @return an <em>unmodifiable</em> list of Strings representing 
supposedly 
+     * uniform SQL States for a given type of StoreException. 
+     * Default behavior is to return an empty list.
      */
     public List/*<String>*/ getSQLStates(int exceptionType) {
        if (exceptionType>=0 && exceptionType<SQL_STATE_CODES.length)

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java?rev=603028&r1=603027&r2=603028&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java
 Mon Dec 10 12:11:22 2007
@@ -20,9 +20,14 @@
 
 import java.sql.DriverManager;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
+
 import javax.sql.DataSource;
 
+import org.apache.openjpa.util.StoreException;
+
 /**
  * Dictionary for Apache Derby (formerly Cloudscape).
  */
@@ -93,4 +98,26 @@
             }
         }
     }
+    
+    /**
+     * Adds extra SQLState code that Derby JDBC Driver uses. In JDBC 4.0,
+     * SQLState will follow either XOPEN or SQL 2003 convention. A compliant
+     * driver can be queries via DatabaseMetaData.getSQLStateType() to detect
+     * the convention type.<br>
+     * This method is overwritten to highlight that a) the SQL State is ideally
+     * uniform across JDBC Drivers but not practically and b) the overwritten
+     * method must crate a new list to return as the super classes list is
+     * unmodifable.
+     */
+    public List getSQLStates(int exceptionType) {
+       List original = super.getSQLStates(exceptionType);
+       if (exceptionType == StoreException.LOCK) {
+               // Can not add new codes to unmodifable list of the super class
+               List newStates = new ArrayList(original);
+               newStates.add("40XL1");
+               return newStates;
+       }
+       return original;
+    }
+    
 }


Reply via email to