You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2006/09/27 18:09:36 UTC

svn commit: r450491 - in /incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl: ConnectionImpl.java Statement.java

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: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org