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);