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;
}
}