Repository: camel Updated Branches: refs/heads/master b1e7639f2 -> 5db412baa
CAMEL-11106: allow using $simple in camel-sql Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5db412ba Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5db412ba Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5db412ba Branch: refs/heads/master Commit: 5db412baa693ad1ae0dab74dea5e0e0626021d71 Parents: b1e7639 Author: Nicola Ferraro <ni.ferr...@gmail.com> Authored: Wed Apr 5 16:04:46 2017 +0200 Committer: Nicola Ferraro <ni.ferr...@gmail.com> Committed: Wed Apr 5 16:04:56 2017 +0200 ---------------------------------------------------------------------- .../sql/DefaultSqlPrepareStatementStrategy.java | 10 +++--- .../sql/SqlProducerExpressionParameterTest.java | 19 ++++++++++ .../sql/SqlProducerInSimpleExpressionTest.java | 38 ++++++++++++++++++++ .../sql/selectProjectsInSimpleExpression.sql | 5 +++ 4 files changed, 67 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5db412ba/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java ---------------------------------------------------------------------- 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 72f8ac3..cc64fda 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 @@ -44,9 +44,9 @@ import org.springframework.util.CompositeIterator; public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementStrategy { private static final Logger LOG = LoggerFactory.getLogger(DefaultSqlPrepareStatementStrategy.class); - private static final Pattern REPLACE_IN_PATTERN = Pattern.compile("\\:\\?in\\:(\\w+|\\$\\{[^\\}]+\\})", Pattern.MULTILINE); - private static final Pattern REPLACE_PATTERN = Pattern.compile("\\:\\?\\w+|\\:\\?\\$\\{[^\\}]+\\}", Pattern.MULTILINE); - private static final Pattern NAME_PATTERN = Pattern.compile("\\:\\?((in\\:(\\w+|\\$\\{[^\\}]+\\}))|(\\w+|\\$\\{[^\\}]+\\}))", Pattern.MULTILINE); + private static final Pattern REPLACE_IN_PATTERN = Pattern.compile("\\:\\?in\\:(\\w+|\\$\\{[^\\}]+\\}|\\$simple\\{[^\\}]+\\})", Pattern.MULTILINE); + private static final Pattern REPLACE_PATTERN = Pattern.compile("\\:\\?\\w+|\\:\\?\\$\\{[^\\}]+\\}|\\:\\?\\$simple\\{[^\\}]+\\}", Pattern.MULTILINE); + private static final Pattern NAME_PATTERN = Pattern.compile("\\:\\?((in\\:(\\w+|\\$\\{[^\\}]+\\}|\\$simple\\{[^\\}]+\\}))|(\\w+|\\$\\{[^\\}]+\\}|\\$simple\\{[^\\}]+\\}))", Pattern.MULTILINE); private final char separator; public DefaultSqlPrepareStatementStrategy() { @@ -186,7 +186,7 @@ public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt Map<?, ?> headersMap = safeMap(exchange.getIn().getHeaders()); Object answer = null; - if (nextParam.startsWith("${") && nextParam.endsWith("}")) { + if ((nextParam.startsWith("$simple{") || nextParam.startsWith("${")) && nextParam.endsWith("}")) { answer = SimpleLanguage.expression(nextParam).evaluate(exchange, Object.class); } else if (bodyMap.containsKey(nextParam)) { answer = bodyMap.get(nextParam); @@ -201,7 +201,7 @@ public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt Map<?, ?> bodyMap = safeMap(exchange.getContext().getTypeConverter().tryConvertTo(Map.class, body)); Map<?, ?> headersMap = safeMap(exchange.getIn().getHeaders()); - if (nextParam.startsWith("${") && nextParam.endsWith("}")) { + if ((nextParam.startsWith("$simple{") || nextParam.startsWith("${")) && nextParam.endsWith("}")) { return true; } else if (bodyMap.containsKey(nextParam)) { return true; http://git-wip-us.apache.org/repos/asf/camel/blob/5db412ba/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java index b99aaf4..ee634a4 100644 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java @@ -37,6 +37,9 @@ public class SqlProducerExpressionParameterTest extends CamelTestSupport { @EndpointInject(uri = "mock:result") MockEndpoint result; + @EndpointInject(uri = "mock:result-simple") + MockEndpoint resultSimple; + private EmbeddedDatabase db; @Before @@ -69,6 +72,20 @@ public class SqlProducerExpressionParameterTest extends CamelTestSupport { assertEquals("AMQ", row.get("PROJECT")); } + @Test + public void testNamedParameterFromSimpleExpression() throws Exception { + resultSimple.expectedMessageCount(1); + + template.sendBodyAndProperty("direct:start-simple", "This is a dummy body", "license", "XXX"); + + resultSimple.assertIsSatisfied(); + + List<?> received = assertIsInstanceOf(List.class, resultSimple.getReceivedExchanges().get(0).getIn().getBody()); + assertEquals(1, received.size()); + Map<?, ?> row = assertIsInstanceOf(Map.class, received.get(0)); + assertEquals("Linux", row.get("PROJECT")); + } + @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @@ -76,6 +93,8 @@ public class SqlProducerExpressionParameterTest extends CamelTestSupport { getContext().getComponent("sql", SqlComponent.class).setDataSource(db); from("direct:start").to("sql:select * from projects where license = :#${property.license} order by id").to("mock:result"); + + from("direct:start-simple").to("sql:select * from projects where license = :#$simple{property.license} order by id").to("mock:result-simple"); } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/5db412ba/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInSimpleExpressionTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInSimpleExpressionTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInSimpleExpressionTest.java new file mode 100644 index 0000000..34a359e --- /dev/null +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerInSimpleExpressionTest.java @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.sql; + +import org.apache.camel.builder.RouteBuilder; + +public class SqlProducerInSimpleExpressionTest extends SqlProducerInTest { + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + // required for the sql component + getContext().getComponent("sql", SqlComponent.class).setDataSource(db); + + from("direct:query") + .to("sql:classpath:sql/selectProjectsInSimpleExpression.sql") + .to("log:query") + .to("mock:query"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/5db412ba/components/camel-sql/src/test/resources/sql/selectProjectsInSimpleExpression.sql ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/resources/sql/selectProjectsInSimpleExpression.sql b/components/camel-sql/src/test/resources/sql/selectProjectsInSimpleExpression.sql new file mode 100644 index 0000000..de9bf0a --- /dev/null +++ b/components/camel-sql/src/test/resources/sql/selectProjectsInSimpleExpression.sql @@ -0,0 +1,5 @@ +-- this is a comment +select * +from projects +where project in (:#in:$simple{header.names}) +order by id \ No newline at end of file