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


Reply via email to