Author: bdaniel
Date: Wed Sep 27 09:09:35 2006
New Revision: 450491

URL: http://svn.apache.org/viewvc?view=rev&rev=450491
Log:
TUSCANY-758 Support databases that don't support generated keys

Modified:
    
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
    
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java

Modified: 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java?view=diff&rev=450491&r1=450490&r2=450491
==============================================================================
--- 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
 (original)
+++ 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ConnectionImpl.java
 Wed Sep 27 09:09:35 2006
@@ -20,6 +20,7 @@
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
+import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -34,13 +35,20 @@
        private Connection connection;
 
        private boolean managingTransaction = true;
+       private final boolean supportsGeneratedKeys;
 
        public ConnectionImpl(Connection connection) {
                this.connection = connection;
-
+               
                try {
+                       DatabaseMetaData dbmd = connection.getMetaData();
+                       // Derby says they don't support generated keys, but 
they do for our purposes. 
+                       if ( dbmd.supportsGetGeneratedKeys() || 
dbmd.getDatabaseProductName().contains("Derby") )
+                               this.supportsGeneratedKeys = true;
+                       else
+                               this.supportsGeneratedKeys = false;
                        if (connection.getAutoCommit())
-                               throw new RuntimeException("AutoCommit must be 
off!");
+                               throw new RuntimeException("AutoCommit must be 
off");
                } catch (SQLException e) {
                        throw new RuntimeException(e);
                }
@@ -77,11 +85,16 @@
                }
        }
 
-       public PreparedStatement prepareStatement(String queryString) throws 
SQLException {
-        if(this.logger.isDebugEnabled())
-            this.logger.debug("Preparing Statement: " + queryString);
-
-               return connection.prepareStatement(queryString, 
java.sql.Statement.RETURN_GENERATED_KEYS);
+       public PreparedStatement prepareStatement(String queryString)
+                       throws SQLException {
+               if (this.logger.isDebugEnabled())
+                       this.logger.debug("Preparing Statement: " + 
queryString);
+
+               if (this.supportsGeneratedKeys)
+                       return connection.prepareStatement(queryString,
+                                       
java.sql.Statement.RETURN_GENERATED_KEYS);
+               else
+                       return connection.prepareStatement(queryString);
        }
 
        public PreparedStatement preparePagedStatement(String queryString) 
throws SQLException {
@@ -98,5 +111,9 @@
 
        public CallableStatement prepareCall(String queryString) throws 
SQLException {
                return connection.prepareCall(queryString);
+       }
+
+       public boolean supportsGeneratedKeys() {
+               return this.supportsGeneratedKeys;
        }
 }

Modified: 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java?view=diff&rev=450491&r1=450490&r2=450491
==============================================================================
--- 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
 (original)
+++ 
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/Statement.java
 Wed Sep 27 09:09:35 2006
@@ -44,7 +44,7 @@
     private boolean isPaging = false;
 
     public Statement(String sqlString) {
-        this.queryString = sqlString; //new QueryString(sqlString);
+        this.queryString = sqlString; 
     }
 
     public List executeQuery(Parameters parameters) throws SQLException {
@@ -152,7 +152,7 @@
                        try {
                                ParameterMetaData pmd = 
ps.getParameterMetaData();
                                ps.setNull(param.getIndex(), 
pmd.getParameterType(param.getIndex()));
-                       } catch (Exception ex) {
+                       } catch (SQLException ex) {
                                ps.setNull(param.getIndex(), 
SDODataTypeHelper.sqlTypeFor(null));
                        }
                 } else
@@ -196,9 +196,11 @@
 
     public Integer getGeneratedKey() throws SQLException {
 
-        ResultSet rs = getPreparedStatement().getGeneratedKeys();
-        if (rs.next())
-            return new Integer(rs.getInt(1));
+       if ( getConnection().supportsGeneratedKeys() ) {
+               ResultSet rs = getPreparedStatement().getGeneratedKeys();
+               if (rs.next())
+                 return new Integer(rs.getInt(1));
+       }
 
         return null;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to