CAMEL-5383: Added header with column names to jdbc component. Thanks to 
Devendra Khanolkar for the patch.


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

Branch: refs/heads/master
Commit: e9b6cfbdb57bf34b93342fd1fc2701a4f2f336fd
Parents: 1afb4fc
Author: Claus Ibsen <davscl...@apache.org>
Authored: Sat May 25 09:42:15 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Sat May 25 09:42:15 2013 +0200

----------------------------------------------------------------------
 .../apache/camel/component/jdbc/JdbcConstants.java |    2 +
 .../apache/camel/component/jdbc/JdbcProducer.java  |    3 +-
 .../camel/component/jdbc/JdbcRSMetaDataTest.java   |   66 +++++++++++++++
 3 files changed, 70 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e9b6cfbd/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcConstants.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcConstants.java
 
b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcConstants.java
index 0c17663..3a1589a 100644
--- 
a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcConstants.java
+++ 
b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcConstants.java
@@ -25,6 +25,8 @@ public final class JdbcConstants {
 
     public static final String JDBC_ROW_COUNT = "CamelJdbcRowCount";
 
+    public static final String JDBC_COLUMN_NAMES = "CamelJdbcColumnNames";
+
     /**
      * Boolean input header.
      * Set its value to true to retrieve generated keys, default is false

http://git-wip-us.apache.org/repos/asf/camel/blob/e9b6cfbd/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 3045ec0..fff89fc 100755
--- 
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
@@ -35,7 +35,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * @version 
+ * @version
  */
 public class JdbcProducer extends DefaultProducer {
     private static final transient Logger LOG = 
LoggerFactory.getLogger(JdbcProducer.class);
@@ -223,6 +223,7 @@ public class JdbcProducer extends DefaultProducer {
         List<Map<String, Object>> data = extractResultSetData(rs);
 
         exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, data.size());
+        exchange.getOut().setHeader(JdbcConstants.JDBC_COLUMN_NAMES, 
data.get(0).keySet());
         exchange.getOut().setBody(data);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/e9b6cfbd/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRSMetaDataTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRSMetaDataTest.java
 
b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRSMetaDataTest.java
new file mode 100644
index 0000000..06bec20
--- /dev/null
+++ 
b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcRSMetaDataTest.java
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jdbc;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class JdbcRSMetaDataTest extends AbstractJdbcTestSupport {
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testJdbcRSMetaData() {
+        Endpoint directHelloEndpoint = context.getEndpoint("direct:hello");
+        Exchange directHelloExchange = directHelloEndpoint.createExchange();
+
+        directHelloExchange.getIn().setBody("select * from customer order by 
ID");
+
+        Exchange out = template.send(directHelloEndpoint, directHelloExchange);
+        assertNotNull(out);
+        assertNotNull(out.getOut());
+
+        List<Map<String, Object>> returnValues = 
out.getOut().getBody(List.class);
+        assertNotNull(returnValues);
+        assertEquals(3, returnValues.size());
+        Map<String, Object> row = returnValues.get(0);
+        assertEquals("cust1", row.get("ID"));
+        assertEquals("jstrachan", row.get("NAME"));
+
+        Set<String> columnNames = (Set<String>) 
out.getOut().getHeader(JdbcConstants.JDBC_COLUMN_NAMES);
+        assertNotNull(columnNames);
+        assertEquals(2, columnNames.size());
+        assertTrue(columnNames.contains("ID"));
+        assertTrue(columnNames.contains("NAME"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:hello").to("jdbc:testdb?readSize=100");
+            }
+        };
+    }
+
+}

Reply via email to