You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/04/01 08:53:37 UTC

[5/6] git commit: [CAMEL-7313] Retrieve generated keys as plain list of maps

[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/0be26d9b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0be26d9b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0be26d9b

Branch: refs/heads/camel-2.12.x
Commit: 0be26d9bf1c9116329077b45c33b34142836eadf
Parents: 88b77a3
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Mon Mar 31 09:18:44 2014 +0200
Committer: Willem Jiang <wi...@gmail.com>
Committed: Tue Apr 1 14:52:39 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/0be26d9b/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/0be26d9b/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/0be26d9b/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());
     }
 }