Allow nilacid stored procedure function.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f0738bbf Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f0738bbf Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f0738bbf Branch: refs/heads/master Commit: f0738bbfae35b7cdbd22a51d9a5ecdf2c5c87e0f Parents: 3ee2bb4 Author: Sami Nurminen <snurm...@gmail.com> Authored: Mon Jan 4 21:27:17 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Jan 9 10:59:46 2016 +0100 ---------------------------------------------------------------------- .../sql/stored/SqlStoredComponent.java | 26 +++++++++++++++++--- .../component/sql/stored/SqlStoredEndpoint.java | 3 ++- .../TemplateStoredProcedureFactory.java | 4 +-- .../sql/stored/template/grammar/sspt.jj | 4 +-- .../component/sql/stored/ProducerTest.java | 1 + .../sql/stored/SimpleStoredProcedureUdf.java | 15 ----------- .../sql/stored/TemplateStoredProcedureTest.java | 16 +++++++++++- .../sql/stored/TestStoredProcedure.java | 24 ++++++++++++++++++ .../test/resources/sql/storedProcedureTest.sql | 8 +++++- 9 files changed, 74 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java index da2850a..9fdb45d 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java @@ -2,9 +2,9 @@ package org.apache.camel.component.sql.stored; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; -import org.apache.camel.RuntimeCamelException; import org.apache.camel.component.sql.stored.template.TemplateStoredProcedureFactory; import org.apache.camel.impl.UriEndpointComponent; +import org.apache.camel.util.CamelContextHelper; import javax.sql.DataSource; import java.util.Map; @@ -21,7 +21,6 @@ public class SqlStoredComponent extends UriEndpointComponent { } - TemplateStoredProcedureFactory templateStoredProcedureFactory = new TemplateStoredProcedureFactory(); public SqlStoredComponent(CamelContext context, Class<? extends Endpoint> endpointClass) { @@ -30,8 +29,27 @@ public class SqlStoredComponent extends UriEndpointComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - - return new SqlStoredEndpoint(templateStoredProcedureFactory,dataSource,remaining); + DataSource target = null; + + // endpoint options overrule component configured datasource + DataSource ds = resolveAndRemoveReferenceParameter(parameters, "dataSource", DataSource.class); + if (ds != null) { + target = ds; + } + String dataSourceRef = getAndRemoveParameter(parameters, "dataSourceRef", String.class); + if (target == null && dataSourceRef != null) { + target = CamelContextHelper.mandatoryLookup(getCamelContext(), dataSourceRef, DataSource.class); + } + if (target == null) { + // fallback and use component + target = dataSource; + } + if (target == null) { + throw new IllegalArgumentException("DataSource must be configured"); + } + + + return new SqlStoredEndpoint(templateStoredProcedureFactory, target, remaining); } public DataSource getDataSource() { http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java index cee6223..844e9e5 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java @@ -6,6 +6,7 @@ import org.apache.camel.impl.DefaultPollingEndpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriPath; +import org.apache.camel.util.UnsafeUriCharactersEncoder; import javax.sql.DataSource; @@ -40,6 +41,6 @@ public class SqlStoredEndpoint extends DefaultPollingEndpoint { @Override protected String createEndpointUri() { - return "sql-stored:" + template; + return "sql-stored:" + UnsafeUriCharactersEncoder.encode(template); } } http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java index f1b4da3..2229a4e 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java @@ -28,9 +28,7 @@ public class TemplateStoredProcedureFactory { } private Template validate(Template input) { - if (input.getOutParameterList().isEmpty()) { - throw new ParseRuntimeException("At least one OUT parameter must be given."); - } + //TODO:remove validation ? return input; } http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj index 764764c..edd9f17 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj @@ -27,9 +27,9 @@ public Template parse() : Object parameter = null; } { - (procudureName = <IDENTIFIER> "(" (parameter = Parameter() { template.addParameter(parameter);}) ("," + (procudureName = <IDENTIFIER> "(" ( (parameter = Parameter() { template.addParameter(parameter);}) ("," parameter - = Parameter(){template.addParameter(parameter);})* ")" <EOF>) + = Parameter(){template.addParameter(parameter);})*)? ")" <EOF>) { template.setProcedureName(procudureName.toString()); return template; http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java index 969bca1..f7efd87 100644 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerTest.java @@ -23,6 +23,7 @@ public class ProducerTest extends CamelTestSupport { private EmbeddedDatabase db; + @Before public void setUp() throws Exception { db = new EmbeddedDatabaseBuilder() http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SimpleStoredProcedureUdf.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SimpleStoredProcedureUdf.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SimpleStoredProcedureUdf.java deleted file mode 100644 index 2802b70..0000000 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SimpleStoredProcedureUdf.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.apache.camel.component.sql.stored; - -/** - * Created by snurmine on 12/20/15. - */ -public class SimpleStoredProcedureUdf { - - public static void addnumbers(int VALUE1, int VALUE2, int[] RESULT) { - System.out.println("calling addnumbers:" + VALUE1 + "," + VALUE2); - - RESULT[0] = VALUE1 + VALUE2; - - - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java index 752dcaa..73e9711 100644 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java @@ -33,7 +33,7 @@ public class TemplateStoredProcedureTest extends CamelTestSupport { @Test - public void shouldExecuteStoredProcedure() { + public void shouldExecuteStoredProcedure() { TemplateStoredProcedure sp = new TemplateStoredProcedure(db, parser.parseTemplate("ADDNUMBERS" + "(INTEGER ${header.v1},INTEGER ${header.v2},OUT INTEGER resultofsum)")); @@ -49,6 +49,20 @@ public class TemplateStoredProcedureTest extends CamelTestSupport { } + + @Test + public void shouldExecuteNilacidProcedure() { + TemplateStoredProcedure sp = new TemplateStoredProcedure(db, parser.parseTemplate("NILADIC" + + "()")); + + Exchange exchange = createExchangeWithBody(null); + exchange.getIn().setHeader("v1", 1); + exchange.getIn().setHeader("v2", 2); + + + sp.execute(exchange); + } + @After public void tearDown() throws Exception { super.tearDown(); http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredProcedure.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredProcedure.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredProcedure.java new file mode 100644 index 0000000..cc514e3 --- /dev/null +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredProcedure.java @@ -0,0 +1,24 @@ +package org.apache.camel.component.sql.stored; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Created by snurmine on 12/20/15. + */ +public class TestStoredProcedure { + + private static final Logger LOG = LoggerFactory.getLogger(TestStoredProcedure.class); + + + public static void addnumbers(int val1, int val2, int[] ret) { + LOG.info("calling addnumbers:{} + {}", val1, val2); + + ret[0] = val1 + val2; + + } + + public static void niladic() { + LOG.info("nilacid called"); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f0738bbf/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql b/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql index 3f6ed74..807768e 100644 --- a/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql +++ b/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql @@ -19,4 +19,10 @@ CREATE PROCEDURE ADDNUMBERS(VALUE1 INTEGER, VALUE2 INTEGER,OUT RESULT INTEGER) PARAMETER STYLE JAVA LANGUAGE JAVA EXTERNAL NAME -'org.apache.camel.component.sql.stored.SimpleStoredProcedureUdf.addnumbers'; \ No newline at end of file +'org.apache.camel.component.sql.stored.TestStoredProcedure.addnumbers'; + +CREATE PROCEDURE NILADIC() + PARAMETER STYLE JAVA + LANGUAGE JAVA + EXTERNAL NAME +'org.apache.camel.component.sql.stored.TestStoredProcedure.niladic'; \ No newline at end of file