Repository: camel Updated Branches: refs/heads/camel-2.12.x 88b77a363 -> 0c228d788 refs/heads/camel-2.13.x 9928f5de9 -> ab57d3f03 refs/heads/master ccc566d65 -> 5b2d3d647
[CAMEL-7313] Retrieve generated keys as plain list of maps We don't force user to depend on spring-jdbc interfaces. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2ea69fcc Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2ea69fcc Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2ea69fcc Branch: refs/heads/master Commit: 2ea69fcc201ec4ef866fb74d59d5482dc2aa2262 Parents: ccc566d Author: Grzegorz Grzybek <[email protected]> Authored: Mon Mar 31 09:18:44 2014 +0200 Committer: Willem Jiang <[email protected]> Committed: Tue Apr 1 13:54:27 2014 +0800 ---------------------------------------------------------------------- .../camel/component/sql/SqlConstants.java | 7 +- .../apache/camel/component/sql/SqlProducer.java | 8 +-- .../component/sql/SqlGeneratedKeysTest.java | 71 ++++++++++---------- 3 files changed, 42 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2ea69fcc/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java index e2fef78..dc9f65e 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java @@ -45,12 +45,9 @@ public final class SqlConstants { public static final String SQL_GENERATED_COLUMNS = "CamelGeneratedColumns"; /** - * <tt>org.springframework.jdbc.support.KeyHolder</tt> output header containing the generated keys retrieved - * - * @see <a href="http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/jdbc/support/KeyHolder.html"> - * org.springframework.jdbc.support.KeyHolder</a> + * <tt>List<Map<String, Object>></tt> output header containing the generated keys retrieved */ - public static final String SQL_GENERATED_KEY_HOLDER = "CamelSqlGeneratedKeyHolder"; + public static final String SQL_GENERATED_KEYS_DATA = "CamelSqlGeneratedKeyRows"; private SqlConstants() { // Utility class http://git-wip-us.apache.org/repos/asf/camel/blob/2ea69fcc/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java index 2df7941..c09d58f 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java @@ -21,6 +21,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -30,8 +31,6 @@ import org.apache.camel.impl.DefaultProducer; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.jdbc.core.PreparedStatementCreator; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; public class SqlProducer extends DefaultProducer { private String query; @@ -159,11 +158,10 @@ public class SqlProducer extends DefaultProducer { if (shouldRetrieveGeneratedKeys) { if (isResultSet) { // we won't return generated keys for SELECT statements - exchange.getOut().setHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, new GeneratedKeyHolder()); + exchange.getOut().setHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, Collections.EMPTY_LIST); } else { List<Map<String, Object>> generatedKeys = getEndpoint().queryForList(ps.getGeneratedKeys()); - KeyHolder holder = new GeneratedKeyHolder(generatedKeys); - exchange.getOut().setHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, holder); + exchange.getOut().setHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, generatedKeys); } } http://git-wip-us.apache.org/repos/asf/camel/blob/2ea69fcc/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java index ce3326e..97e5061 100644 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java @@ -30,8 +30,6 @@ import org.junit.Test; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.jdbc.support.KeyHolder; - public class SqlGeneratedKeysTest extends CamelTestSupport { @@ -70,6 +68,7 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { } @Test + @SuppressWarnings("unchecked") public void testRetrieveGeneratedKey() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:insert"); @@ -84,20 +83,21 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // assertions of the response assertNotNull(out); assertNotNull(out.getOut()); - assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER)); + assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA)); - KeyHolder generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertNotNull("out body could not be converted to a KeyHolder - was: " + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertNotNull("out body could not be converted to a List - was: " + out.getIn().getBody(), generatedKeys); - assertEquals(1, generatedKeys.getKeyList().get(0).size()); + assertEquals(1, generatedKeys.get(0).size()); - Map<String, Object> row = generatedKeys.getKeys(); + Map<String, Object> row = generatedKeys.get(0); assertEquals("auto increment value should be 3", Integer.valueOf(3), row.get("ID")); - assertEquals("generated keys row count should be one", 1, generatedKeys.getKeyList().size()); + assertEquals("generated keys row count should be one", 1, generatedKeys.size()); } @Test + @SuppressWarnings("unchecked") public void testRetrieveGeneratedKeys() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:insert2"); @@ -113,21 +113,22 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // assertions of the response assertNotNull(out); assertNotNull(out.getOut()); - assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER)); + assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA)); - KeyHolder generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertNotNull("out body could not be converted to a KeyHolder - was: " + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertNotNull("out body could not be converted to a List - was: " + out.getIn().getBody(), generatedKeys); - assertEquals(2, generatedKeys.getKeyList().get(0).size()); + assertEquals(2, generatedKeys.get(0).size()); - Map<String, Object> row = generatedKeys.getKeys(); + Map<String, Object> row = generatedKeys.get(0); assertEquals("auto increment value of ID1 should be 5", Integer.valueOf(5), row.get("ID1")); assertEquals("auto increment value of ID2 should be 6", Integer.valueOf(6), row.get("ID2")); - assertEquals("generated keys row count should be one", 1, generatedKeys.getKeyList().size()); + assertEquals("generated keys row count should be one", 1, generatedKeys.size()); } @Test + @SuppressWarnings("unchecked") public void testRetrieveGeneratedKeysForBatch() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:batch"); @@ -147,23 +148,24 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // assertions of the response assertNotNull(out); assertNotNull(out.getOut()); - assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER)); + assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA)); - KeyHolder generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertNotNull("out body could not be converted to a KeyHolder - was: " + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertNotNull("out body could not be converted to a List - was: " + out.getIn().getBody(), generatedKeys); // it seems not to work with Derby... - assertEquals(4, generatedKeys.getKeyList().size()); + assertEquals(4, generatedKeys.size()); int id = 3; - for (Map<String, Object> row: generatedKeys.getKeyList()) { + for (Map<String, Object> row: generatedKeys) { assertEquals("auto increment value should be " + id, Integer.valueOf(id++), row.get("ID")); } } @Test + @SuppressWarnings("unchecked") public void testRetrieveGeneratedKeyWithStringGeneratedColumns() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:insert"); @@ -179,20 +181,21 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // assertions of the response assertNotNull(out); assertNotNull(out.getOut()); - assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER)); + assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA)); - KeyHolder generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertNotNull("out body could not be converted to a KeyHolder - was: " + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertNotNull("out body could not be converted to a List - was: " + out.getIn().getBody(), generatedKeys); - assertEquals(1, generatedKeys.getKeyList().get(0).size()); + assertEquals(1, generatedKeys.get(0).size()); - Map<String, Object> row = generatedKeys.getKeys(); + Map<String, Object> row = generatedKeys.get(0); assertEquals("auto increment value should be 3", Integer.valueOf(3), row.get("ID")); - assertEquals("generated keys row count should be one", 1, generatedKeys.getKeyList().size()); + assertEquals("generated keys row count should be one", 1, generatedKeys.size()); } @Test + @SuppressWarnings("unchecked") public void testRetrieveGeneratedKeyWithIntGeneratedColumns() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:insert"); @@ -207,17 +210,17 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // assertions of the response assertNotNull(out); - assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER)); + assertNotNull(out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA)); - KeyHolder generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertNotNull("out body could not be converted to a KeyHolder - was: " + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertNotNull("out body could not be converted to a List - was: " + out.getIn().getBody(), generatedKeys); - assertEquals(1, generatedKeys.getKeyList().get(0).size()); + assertEquals(1, generatedKeys.get(0).size()); - Map<String, Object> row = generatedKeys.getKeys(); + Map<String, Object> row = generatedKeys.get(0); assertEquals("auto increment value should be 3", Integer.valueOf(3), row.get("ID")); - assertEquals("generated keys row count should be one", 1, generatedKeys.getKeyList().size()); + assertEquals("generated keys row count should be one", 1, generatedKeys.size()); } @Test @@ -240,6 +243,7 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { } @Test + @SuppressWarnings("unchecked") public void testNoKeysForSelect() throws Exception { // first we create our exchange using the endpoint Endpoint endpoint = context.getEndpoint("direct:select"); @@ -251,11 +255,10 @@ public class SqlGeneratedKeysTest extends CamelTestSupport { // now we send the exchange to the endpoint, and receives the response from Camel Exchange out = template.send(endpoint, exchange); - @SuppressWarnings("unchecked") List<Map<String, Object>> result = out.getIn().getBody(List.class); assertEquals("We should get 3 projects", 3, result.size()); - KeyHolder holder = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEY_HOLDER, KeyHolder.class); - assertEquals("We should not get any keys", 0, holder.getKeyList().size()); + List<Map<String, Object>> generatedKeys = out.getIn().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class); + assertEquals("We should not get any keys", 0, generatedKeys.size()); } }
