Author: ppoddar
Date: Thu Jul 10 16:54:22 2008
New Revision: 675811

URL: http://svn.apache.org/viewvc?rev=675811&view=rev
Log:
OPENJPA-644 Merge 675806 from trunk to 1.0.x

Modified:
    
openjpa/branches/1.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Modified: 
openjpa/branches/1.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?rev=675811&r1=675810&r2=675811&view=diff
==============================================================================
--- 
openjpa/branches/1.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
 (original)
+++ 
openjpa/branches/1.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
 Thu Jul 10 16:54:22 2008
@@ -68,8 +68,8 @@
     private static final String useKeepExclusiveLockClause
         = "USE AND KEEP EXCLUSIVE LOCKS";
     private static final String forReadOnlyClause = "FOR READ ONLY";
-    protected String databaseProductName = null;
-    protected String databaseProductVersion = null;
+    protected String databaseProductName = "";
+    protected String databaseProductVersion = "";
     protected int maj = 0;
     protected int min = 0;
 
@@ -216,8 +216,8 @@
        super.connectedConfiguration(conn);
 
        DatabaseMetaData metaData = conn.getMetaData();
-        databaseProductName = metaData.getDatabaseProductName();
-        databaseProductVersion = metaData.getDatabaseProductVersion();
+        databaseProductName = nullSafe(metaData.getDatabaseProductName());
+        databaseProductVersion = 
nullSafe(metaData.getDatabaseProductVersion());
         
         // Determine the type of DB2 database
         // First check for AS/400
@@ -358,51 +358,32 @@
     }
 
     public boolean isDB2UDBV82OrLater() {
-        boolean match = false;
-        if (databaseProductName != null &&
-            (databaseProductVersion.indexOf("SQL") != -1
-            || databaseProductName.indexOf("DB2/") != -1)
-            && ((maj == 8 && min >= 2) || (maj >= 9)))
-            match = true;
-        return match;
+        return (databaseProductVersion.indexOf("SQL") != -1
+             || databaseProductName.indexOf("DB2/") != -1)
+             && ((maj == 8 && min >= 2) || (maj >= 9));
     }
 
     public boolean isDB2ZOSV8xOrLater() {
-       boolean match = false;
-       if (databaseProductName != null &&
-           (databaseProductVersion.indexOf("DSN") != -1
-           || databaseProductName.indexOf("DB2/") == -1)
-           && maj >= 8)
-           match = true;
-        return match;
+       return (databaseProductVersion.indexOf("DSN") != -1
+            || databaseProductName.indexOf("DB2/") == -1)
+            && maj >= 8;
+           
     }
 
     public boolean isDB2ISeriesV5R3OrEarlier() {
-       boolean match = false;
-       if (databaseProductName != null &&
-           databaseProductName.indexOf("AS") != -1
-           && ((maj == 5 && min <=3) || maj < 5))
-           match = true;
-       return match;
+       return (databaseProductName.indexOf("AS") != -1
+           && ((maj == 5 && min <=3) || maj < 5));
     }
 
     public boolean isDB2ISeriesV5R4OrLater() {
-       boolean match = false;
-       if (databaseProductName != null &&
-           databaseProductName.indexOf("AS") != -1
-           && (maj >=6 || (maj == 5 && min >=4)))
-           match = true;
-      return match;
+       return databaseProductName.indexOf("AS") != -1
+           && (maj >=6 || (maj == 5 && min >=4));
     }
 
     public boolean isDB2UDBV81OrEarlier() {
-        boolean match = false;
-        if (databaseProductName != null &&
-            (databaseProductVersion.indexOf("SQL") != -1 
-            || databaseProductName.indexOf("DB2/") != -1) &&
-            ((maj == 8 && min <= 1) || maj < 8))
-            match = true;
-        return match;
+        return (databaseProductVersion.indexOf("SQL") != -1 
+            || databaseProductName.indexOf("DB2/") != -1) 
+            && ((maj == 8 && min <= 1) || maj < 8);
     }
 
     /** Get the version Major/Minor for the ISeries
@@ -413,17 +394,37 @@
         // ISeries                               DB2 UDB for AS/400
         //   (Native)                            V5R4M0
         if (databaseProductName.indexOf("AS") != -1) {
-            String s = databaseProductVersion.substring(databaseProductVersion
-                .indexOf('V'));
-            s = s.toUpperCase();
-
-            StringTokenizer stringtokenizer = new StringTokenizer(s, "VRM"
-                , false);
-            if (stringtokenizer.countTokens() == 3) {
-                String s1 = stringtokenizer.nextToken();
-                maj = Integer.parseInt(s1);
-                String s2 =  stringtokenizer.nextToken();
-                min = Integer.parseInt(s2);
+            // default to V5R4
+            maj = 5;
+            min = 4;
+            int index = databaseProductVersion.indexOf('V');
+            if (index != -1) {
+               String s = databaseProductVersion.substring(index);
+               s = s.toUpperCase();
+
+               StringTokenizer stringtokenizer = new StringTokenizer(s, "VRM"
+                               , false);
+               if (stringtokenizer.countTokens() == 3) {
+                       String s1 = stringtokenizer.nextToken();
+                       maj = Integer.parseInt(s1);
+                       String s2 =  stringtokenizer.nextToken();
+                       min = Integer.parseInt(s2);
+               }
+            }
+            else {
+               index = databaseProductVersion.indexOf('0');
+               if (index != -1) {
+                       String s = databaseProductVersion.substring(index);
+                       s = s.toUpperCase();
+                               StringTokenizer stringtokenizer = new 
StringTokenizer(s, "0"
+                                               , false);                    
+                               if (stringtokenizer.countTokens() == 2) {
+                                       String s1 = stringtokenizer.nextToken();
+                                       maj = Integer.parseInt(s1);
+                                       String s2 =  
stringtokenizer.nextToken();
+                                       min = Integer.parseInt(s2);
+                               }
+                }
             }
         }
     }
@@ -772,4 +773,8 @@
             idx.addColumn(pkColumn);
         }
     }
+    
+    String nullSafe(String s) {
+       return s == null ? "" : s;
+    }
 }


Reply via email to