You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/03/08 09:55:03 UTC
[camel] branch camel-3.x updated: Adding support to named parameters on queries provided by using the C… (#9480)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.x by this push:
new a561c7260ae Adding support to named parameters on queries provided by using the C… (#9480)
a561c7260ae is described below
commit a561c7260ae078e9e1ef6e7bbdcb9dc1fc0ddaeb
Author: Adriano Machado <60...@users.noreply.github.com>
AuthorDate: Wed Mar 8 04:54:47 2023 -0500
Adding support to named parameters on queries provided by using the C… (#9480)
* Adding support to named parameters on queries provided by using the CamelSqlQuery header
* Fixing failing test
---------
Co-authored-by: Adriano Machado <ad...@redhat.com>
---
.../org/apache/camel/component/sql/SqlHelper.java | 30 +++++++++++++---------
.../apache/camel/component/sql/SqlProducer.java | 7 ++++-
.../apache/camel/component/sql/SqlRouteTest.java | 15 +++++++++++
3 files changed, 39 insertions(+), 13 deletions(-)
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlHelper.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlHelper.java
index 12ff82a0b6d..28df085074f 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlHelper.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlHelper.java
@@ -39,20 +39,26 @@ public final class SqlHelper {
try (InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, query)) {
answer = camelContext.getTypeConverter().mandatoryConvertTo(String.class, is);
}
- if (placeholder != null) {
- answer = answer.replaceAll(placeholder, "?");
- }
- // skip lines with comments
- StringJoiner sj = new StringJoiner("\n");
- String[] lines = answer.split("\n");
- for (String line : lines) {
- String trim = line.trim();
- if (!trim.isEmpty() && !trim.startsWith("--")) {
- sj.add(line);
- }
+ answer = resolvePlaceholders(answer, placeholder);
+ }
+ return answer;
+ }
+
+ public static String resolvePlaceholders(String query, String placeholder) {
+ String answer = query;
+ if (placeholder != null) {
+ answer = answer.replaceAll(placeholder, "?");
+ }
+ // skip lines with comments
+ StringJoiner sj = new StringJoiner("\n");
+ String[] lines = answer.split("\n");
+ for (String line : lines) {
+ String trim = line.trim();
+ if (!trim.isEmpty() && !trim.startsWith("--")) {
+ sj.add(line);
}
- answer = sj.toString();
}
+ answer = sj.toString();
return answer;
}
}
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
index 7af835a77fb..60ce63382a5 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
@@ -98,7 +98,12 @@ public class SqlProducer extends DefaultProducer {
sql = exchange.getIn().getBody(String.class);
} else {
String queryHeader = exchange.getIn().getHeader(SqlConstants.SQL_QUERY, String.class);
- sql = queryHeader != null ? queryHeader : resolvedQuery;
+ if (queryHeader != null) {
+ String placeholder = getEndpoint().isUsePlaceholder() ? getEndpoint().getPlaceholder() : null;
+ sql = SqlHelper.resolvePlaceholders(queryHeader, placeholder);
+ } else {
+ sql = resolvedQuery;
+ }
}
final String preparedQuery
= sqlPrepareStatementStrategy.prepareQuery(sql, getEndpoint().isAllowNamedParameters(), exchange);
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
index 6e2381cbb8b..317c6445c26 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
@@ -23,9 +23,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.camel.Exchange;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.support.DefaultExchange;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -82,6 +84,19 @@ public class SqlRouteTest extends CamelTestSupport {
row = assertIsInstanceOf(Map.class, received.get(0));
assertEquals("Linux", row.get("PROJECT"));
assertEquals("XXX", row.get("license"));
+ mock.reset();
+
+ mock.expectedMessageCount(1);
+ Exchange exchange = new DefaultExchange(context);
+ exchange.getMessage().setHeader(SqlConstants.SQL_QUERY, "select * from projects where id = :#id order by id");
+ exchange.getMessage().setHeader("id", 1);
+ template.send("direct:simple", exchange);
+ mock.assertIsSatisfied();
+ received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
+ row = assertIsInstanceOf(Map.class, received.get(0));
+ assertEquals(1, row.get("id"));
+ assertEquals("ASF", row.get("license"));
+ mock.reset();
}
@Test