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 2016/01/09 11:44:47 UTC

[4/9] camel git commit: Allow nilacid stored procedure function.

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 <sn...@gmail.com>
Authored: Mon Jan 4 21:27:17 2016 +0200
Committer: Claus Ibsen <da...@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