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"); + } + }; + } + +}