Author: rickette Date: Sun Apr 10 21:29:49 2011 New Revision: 1090893 URL: http://svn.apache.org/viewvc?rev=1090893&view=rev Log: CAMEL-3800: Added header to specify (per exchange) SQL query.
Modified: camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java Modified: camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java?rev=1090893&r1=1090892&r2=1090893&view=diff ============================================================================== --- camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java (original) +++ camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java Sun Apr 10 21:29:49 2011 @@ -21,6 +21,8 @@ package org.apache.camel.component.sql; */ public final class SqlConstants { + public static final String SQL_QUERY = "CamelSqlQuery"; + public static final String SQL_UPDATE_COUNT = "CamelSqlUpdateCount"; public static final String SQL_ROW_COUNT = "CamelSqlRowCount"; Modified: camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java?rev=1090893&r1=1090892&r2=1090893&view=diff ============================================================================== --- camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java (original) +++ camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java Sun Apr 10 21:29:49 2011 @@ -16,11 +16,6 @@ */ package org.apache.camel.component.sql; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.Iterator; -import java.util.List; - import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultProducer; import org.springframework.dao.DataAccessException; @@ -29,6 +24,11 @@ import org.springframework.jdbc.core.Jdb import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.jdbc.core.RowMapperResultSetExtractor; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Iterator; +import java.util.List; + public class SqlProducer extends DefaultProducer { private String query; private JdbcTemplate jdbcTemplate; @@ -41,7 +41,8 @@ public class SqlProducer extends Default @SuppressWarnings("unchecked") public void process(final Exchange exchange) throws Exception { - jdbcTemplate.execute(query, new PreparedStatementCallback() { + String queryHeader = exchange.getIn().getHeader(SqlConstants.SQL_QUERY, String.class); + jdbcTemplate.execute(queryHeader != null ? queryHeader : query, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException { int argNumber = 1; Modified: camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java?rev=1090893&r1=1090892&r2=1090893&view=diff ============================================================================== --- camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java (original) +++ camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java Sun Apr 10 21:29:49 2011 @@ -16,12 +16,6 @@ */ package org.apache.camel.component.sql; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.sql.DataSource; - import org.apache.camel.RuntimeCamelException; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; @@ -34,6 +28,11 @@ import org.springframework.dao.EmptyResu import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.SingleConnectionDataSource; +import javax.sql.DataSource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * @version */ @@ -57,6 +56,28 @@ public class SqlRouteTest extends CamelT } @Test + public void testQueryAsHeader() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(1); + + template.sendBodyAndHeader("direct:simple", "Camel", SqlConstants.SQL_QUERY, "select * from projects where project = ? order by id"); + mock.assertIsSatisfied(); + List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody()); + Map row = assertIsInstanceOf(Map.class, received.get(0)); + assertEquals(1, row.get("id")); + assertEquals("ASF", row.get("license")); + mock.reset(); + + mock.expectedMessageCount(1); + template.sendBodyAndHeader("direct:simple", 3, SqlConstants.SQL_QUERY, "select * from projects where id = ? order by id"); + mock.assertIsSatisfied(); + received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody()); + row = assertIsInstanceOf(Map.class, received.get(0)); + assertEquals("Linux", row.get("PROJECT")); + assertEquals("XXX", row.get("license")); + } + + @Test public void testListBody() throws Exception { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(1);