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 <davscl...@apache.org> Authored: Tue Aug 12 11:28:01 2014 +0200 Committer: Claus Ibsen <davscl...@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; } }