Author: mikedd
Date: Tue Apr 27 19:19:38 2010
New Revision: 938610

URL: http://svn.apache.org/viewvc?rev=938610&view=rev
Log:
OPENJPA-1641: Try JDBC standard column names as well as Sybase specific ones

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

Modified: 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java?rev=938610&r1=938609&r2=938610&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
 (original)
+++ 
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
 Tue Apr 27 19:19:38 2010
@@ -323,6 +323,35 @@ public class SybaseDictionary
         
         return ConcreteClassGenerator.newInstance(sybaseConnectionImpl, conn);
     }
+    
+    /**
+     * Helper method obtains a string value from a given column in a 
ResultSet. Strings provided are column names,
+     * jdbcName will be tried first if an SQLException occurs we'll try the 
sybase name.
+     */
+    protected String getStringFromResultSet(ResultSet rs, String jdbcName, 
String sybaseName) throws SQLException {
+        try { 
+            return rs.getString(jdbcName);
+        }
+        catch(SQLException sqle) { 
+            // if the generic JDBC identifier isn't found an SQLException will 
be thrown
+            // try the Sybase specific id
+            return rs.getString(sybaseName);
+        }
+    }
+    /**
+     * Helper method obtains a boolean value from a given column in a 
ResultSet. Strings provided are column names,
+     * jdbcName will be tried first if an SQLException occurs we'll try the 
sybase name.
+     */
+    protected boolean getBooleanFromResultSet(ResultSet rs, String jdbcName, 
String sybaseName) throws SQLException {
+        try { 
+            return rs.getBoolean(jdbcName);
+        }
+        catch(SQLException sqle) {
+            // if the generic JDBC identifier isn't found an SQLException will 
be thrown
+            // try the Sybase specific id
+            return rs.getBoolean(sybaseName);
+        }
+    }
 
     /**
      * Create a new primary key from the information in the schema metadata.
@@ -330,10 +359,14 @@ public class SybaseDictionary
     protected PrimaryKey newPrimaryKey(ResultSet pkMeta)
         throws SQLException {
         PrimaryKey pk = new PrimaryKey();
-        pk.setSchemaIdentifier(fromDBName(pkMeta.getString("table_owner"), 
DBIdentifierType.SCHEMA));
-        pk.setTableIdentifier(fromDBName(pkMeta.getString("table_name"), 
DBIdentifierType.TABLE));
-        pk.setColumnIdentifier(fromDBName(pkMeta.getString("column_name"), 
DBIdentifierType.COLUMN));
-        pk.setIdentifier(fromDBName(pkMeta.getString("index_name"), 
DBIdentifierType.CONSTRAINT));
+        pk.setSchemaIdentifier(fromDBName(getStringFromResultSet(pkMeta, 
"TABLE_SCHEM", "table_owner"),
+            DBIdentifierType.SCHEMA));
+        pk.setTableIdentifier(fromDBName(getStringFromResultSet(pkMeta, 
"TABLE_NAME", "table_name"),
+            DBIdentifierType.TABLE));
+        pk.setColumnIdentifier(fromDBName(getStringFromResultSet(pkMeta, 
"COLUMN_NAME", "column_name"),
+            DBIdentifierType.COLUMN));
+        pk.setIdentifier(fromDBName(getStringFromResultSet(pkMeta, "PK_NAME", 
"index_name"),
+            DBIdentifierType.CONSTRAINT));
         return pk;
     }
 
@@ -343,11 +376,15 @@ public class SybaseDictionary
     protected Index newIndex(ResultSet idxMeta)
         throws SQLException {
         Index idx = new Index();
-        idx.setSchemaIdentifier(fromDBName(idxMeta.getString("table_owner"), 
DBIdentifierType.SCHEMA));
-        idx.setTableIdentifier(fromDBName(idxMeta.getString("table_name"), 
DBIdentifierType.TABLE));
-        idx.setColumnIdentifier(fromDBName(idxMeta.getString("column_name"), 
DBIdentifierType.COLUMN));
-        idx.setIdentifier(fromDBName(idxMeta.getString("index_name"), 
DBIdentifierType.INDEX));
-        idx.setUnique(!idxMeta.getBoolean("non_unique"));
+        idx.setSchemaIdentifier(fromDBName(getStringFromResultSet(idxMeta, 
"TABLE_SCHEM", "table_owner"),
+            DBIdentifierType.SCHEMA));
+        idx.setTableIdentifier(fromDBName(getStringFromResultSet(idxMeta, 
"TABLE_NAME", "table_name"),
+            DBIdentifierType.TABLE));
+        idx.setColumnIdentifier(fromDBName(getStringFromResultSet(idxMeta, 
"COLUMN_NAME", "column_name"),
+            DBIdentifierType.COLUMN));
+        idx.setIdentifier(fromDBName(getStringFromResultSet(idxMeta, 
"INDEX_NAME", "index_name"),
+            DBIdentifierType.INDEX));
+        idx.setUnique(!getBooleanFromResultSet(idxMeta, "NON_UNIQUE", 
"non_unique"));
         return idx;
     }
 


Reply via email to