This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch sql-var
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3a98d33a59b2966b6278fd7dc86475f0354fe13e
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Apr 19 15:33:15 2024 +0200

    CAMEL-20696: camel-sql - Add support for using variables with named query 
parameters
---
 components/camel-sql/src/main/docs/sql-component.adoc       |  6 ++++--
 .../component/sql/DefaultSqlPrepareStatementStrategy.java   |  6 ++++++
 .../org/apache/camel/component/sql/SqlProducerInTest.java   |  4 +---
 ...lProducerInTest.java => SqlProducerInVariablesTest.java} | 13 ++++++-------
 4 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/components/camel-sql/src/main/docs/sql-component.adoc 
b/components/camel-sql/src/main/docs/sql-component.adoc
index 81b408f34b3..d2016b0d357 100644
--- a/components/camel-sql/src/main/docs/sql-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-component.adoc
@@ -65,6 +65,7 @@ When using named parameters, Camel will look up the names in 
the given precedenc
 1. from a xref:languages:simple-language.adoc[Simple] expressions
 2. from message body if its a `java.util.Map`
 3. from message headers
+4. from exchange variables
 
 If a named parameter cannot be resolved, then an exception is thrown.
 
@@ -225,8 +226,9 @@ In the given route below, we want to get all the projects 
from the
 `projects` table.
 Notice the SQL query has two named parameters, `:#lic` and
 `:#min`.
-Camel will then look up for these parameters from the message body or
-message headers.
+Camel will then look up for these parameters from the message body,
+message headers and exchange variables.
+
 Notice in the example above we set two headers with
 constant value for the named parameters:
 
diff --git 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
index 143ad54e3b4..b555af13b8f 100644
--- 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
+++ 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
@@ -262,6 +262,7 @@ public class DefaultSqlPrepareStatementStrategy implements 
SqlPrepareStatementSt
     protected static Object lookupParameter(String nextParam, Exchange 
exchange, Object body) {
         Map<?, ?> bodyMap = 
safeMap(exchange.getContext().getTypeConverter().tryConvertTo(Map.class, body));
         Map<?, ?> headersMap = safeMap(exchange.getIn().getHeaders());
+        Map<?, ?> variablesMap = safeMap(exchange.getVariables());
 
         Object answer = null;
         if ((nextParam.startsWith("$simple{") || nextParam.startsWith("${")) 
&& nextParam.endsWith("}")) {
@@ -271,6 +272,8 @@ public class DefaultSqlPrepareStatementStrategy implements 
SqlPrepareStatementSt
             answer = bodyMap.get(nextParam);
         } else if (headersMap.containsKey(nextParam)) {
             answer = headersMap.get(nextParam);
+        } else if (variablesMap.containsKey(nextParam)) {
+            answer = variablesMap.get(nextParam);
         }
 
         return answer;
@@ -279,6 +282,7 @@ public class DefaultSqlPrepareStatementStrategy implements 
SqlPrepareStatementSt
     protected static boolean hasParameter(String nextParam, Exchange exchange, 
Object body) {
         Map<?, ?> bodyMap = 
safeMap(exchange.getContext().getTypeConverter().tryConvertTo(Map.class, body));
         Map<?, ?> headersMap = safeMap(exchange.getIn().getHeaders());
+        Map<?, ?> variablesMap = safeMap(exchange.getVariables());
 
         if ((nextParam.startsWith("$simple{") || nextParam.startsWith("${")) 
&& nextParam.endsWith("}")) {
             return true;
@@ -286,6 +290,8 @@ public class DefaultSqlPrepareStatementStrategy implements 
SqlPrepareStatementSt
             return true;
         } else if (headersMap.containsKey(nextParam)) {
             return true;
+        } else if (variablesMap.containsKey(nextParam)) {
+            return true;
         }
 
         return false;
diff --git 
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
 
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
index 76a1c0910fe..c860cf36d02 100644
--- 
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
+++ 
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
@@ -53,9 +53,7 @@ public class SqlProducerInTest extends CamelTestSupport {
         super.tearDown();
 
         if (db != null) {
-            if (db != null) {
-                db.shutdown();
-            }
+            db.shutdown();
         }
     }
 
diff --git 
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
 
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInVariablesTest.java
similarity index 90%
copy from 
components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
copy to 
components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInVariablesTest.java
index 76a1c0910fe..19f128bb252 100644
--- 
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInTest.java
+++ 
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInVariablesTest.java
@@ -32,7 +32,7 @@ import 
org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class SqlProducerInTest extends CamelTestSupport {
+public class SqlProducerInVariablesTest extends CamelTestSupport {
 
     EmbeddedDatabase db;
 
@@ -53,9 +53,7 @@ public class SqlProducerInTest extends CamelTestSupport {
         super.tearDown();
 
         if (db != null) {
-            if (db != null) {
-                db.shutdown();
-            }
+            db.shutdown();
         }
     }
 
@@ -64,7 +62,8 @@ public class SqlProducerInTest extends CamelTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:query");
         mock.expectedMessageCount(1);
 
-        template.requestBodyAndHeader("direct:query", "Hi there!", "names", 
new String[] { "Camel", "AMQ" });
+        fluentTemplate.to("direct:query").withBody("Hi 
there!").withVariable("names", new String[] { "Camel", "AMQ" })
+                .request();
 
         MockEndpoint.assertIsSatisfied(context);
 
@@ -85,7 +84,7 @@ public class SqlProducerInTest extends CamelTestSupport {
         names.add("Camel");
         names.add("AMQ");
 
-        template.requestBodyAndHeader("direct:query", "Hi there!", "names", 
names);
+        fluentTemplate.to("direct:query").withBody("Hi 
there!").withVariable("names", names).request();
 
         MockEndpoint.assertIsSatisfied(context);
 
@@ -102,7 +101,7 @@ public class SqlProducerInTest extends CamelTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:query");
         mock.expectedMessageCount(1);
 
-        template.requestBodyAndHeader("direct:query", "Hi there!", "names", 
"Camel,AMQ");
+        fluentTemplate.to("direct:query").withBody("Hi 
there!").withVariable("names", "Camel,AMQ").request();
 
         MockEndpoint.assertIsSatisfied(context);
 

Reply via email to