You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/08/12 11:28:12 UTC

git commit: CAMEL-7686: camel-jdbc - Fix this issue report about retriving generated keys

Repository: camel
Updated Branches:
  refs/heads/master 5a5f66155 -> c475fb661


CAMEL-7686: camel-jdbc - Fix this issue report about retriving generated keys


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c475fb66
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c475fb66
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c475fb66

Branch: refs/heads/master
Commit: c475fb661bdf74bbd596fcd0ee2ec73cef9756af
Parents: 5a5f661
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Aug 12 11:28:01 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Aug 12 11:28:01 2014 +0200

----------------------------------------------------------------------
 .../camel/component/jdbc/JdbcProducer.java      | 70 ++++++++++----------
 1 file changed, 34 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c475fb66/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
index 5440b87..c23a5f1 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
@@ -163,8 +163,7 @@ public class JdbcProducer extends DefaultProducer {
             boolean stmtExecutionResult = ps.execute();
             if (stmtExecutionResult) {
                 rs = ps.getResultSet();
-                setResultSet(exchange, rs);
-                shouldCloseResources = false;
+                shouldCloseResources = setResultSet(exchange, rs);
             } else {
                 int updateCount = ps.getUpdateCount();
                 // preserve headers
@@ -220,8 +219,7 @@ public class JdbcProducer extends DefaultProducer {
 
             if (stmtExecutionResult) {
                 rs = stmt.getResultSet();
-                setResultSet(exchange, rs);
-                shouldCloseResources = false;
+                shouldCloseResources = setResultSet(exchange, rs);
             } else {
                 int updateCount = stmt.getUpdateCount();
                 exchange.getOut().setHeader(JdbcConstants.JDBC_UPDATE_COUNT, updateCount);
@@ -299,8 +297,12 @@ public class JdbcProducer extends DefaultProducer {
 
     /**
      * Sets the result from the ResultSet to the Exchange as its OUT body.
+     *
+     * @return whether to close resources
      */
-    protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException {
+    protected boolean setResultSet(Exchange exchange, ResultSet rs) throws SQLException {
+        boolean answer = true;
+
         ResultSetIterator iterator = new ResultSetIterator(rs, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics());
 
         // preserve headers
@@ -311,6 +313,8 @@ public class JdbcProducer extends DefaultProducer {
         if (outputType == JdbcOutputType.StreamList) {
             exchange.getOut().setBody(iterator);
             exchange.addOnCompletion(new ResultSetIteratorCompletion(iterator));
+            // do not close resources as we are in streaming mode
+            answer = false;
         } else if (outputType == JdbcOutputType.SelectList) {
             List<?> list = extractRows(iterator);
             exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, list.size());
@@ -318,47 +322,41 @@ public class JdbcProducer extends DefaultProducer {
         } else if (outputType == JdbcOutputType.SelectOne) {
             exchange.getOut().setBody(extractSingleRow(iterator));
         }
+
+        return answer;
     }
 
     @SuppressWarnings("unchecked")
     private List extractRows(ResultSetIterator iterator) throws SQLException {
-        try {
-            List result = new ArrayList();
-            int maxRowCount = readSize == 0 ? Integer.MAX_VALUE : readSize;
-            for (int i = 0; iterator.hasNext() && i < maxRowCount; i++) {
-                Map<String, Object> row = iterator.next();
-                Object value;
-                if (getEndpoint().getOutputClass() != null) {
-                    value = newBeanInstance(row);
-                } else {
-                    value = row;
-                }
-                result.add(value);
+        List result = new ArrayList();
+        int maxRowCount = readSize == 0 ? Integer.MAX_VALUE : readSize;
+        for (int i = 0; iterator.hasNext() && i < maxRowCount; i++) {
+            Map<String, Object> row = iterator.next();
+            Object value;
+            if (getEndpoint().getOutputClass() != null) {
+                value = newBeanInstance(row);
+            } else {
+                value = row;
             }
-            return result;
-        } finally {
-            iterator.close();
+            result.add(value);
         }
+        return result;
     }
 
     private Object extractSingleRow(ResultSetIterator iterator) throws SQLException {
-        try {
-            if (!iterator.hasNext()) {
-                return null;
-            }
+        if (!iterator.hasNext()) {
+            return null;
+        }
 
-            Map<String, Object> row = iterator.next();
-            if (iterator.hasNext()) {
-                throw new SQLDataException("Query result not unique for outputType=SelectOne.");
-            } else if (getEndpoint().getOutputClass() != null) {
-                return newBeanInstance(row);
-            } else if (row.size() == 1) {
-                return row.values().iterator().next();
-            } else {
-                return row;
-            }
-        } finally {
-            iterator.close();
+        Map<String, Object> row = iterator.next();
+        if (iterator.hasNext()) {
+            throw new SQLDataException("Query result not unique for outputType=SelectOne.");
+        } else if (getEndpoint().getOutputClass() != null) {
+            return newBeanInstance(row);
+        } else if (row.size() == 1) {
+            return row.values().iterator().next();
+        } else {
+            return row;
         }
     }