CAMEL-9932: sql-stored - Add support for arrays in grammar so you can refer to arrays when using simple tokens.
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
index 15a9347..8b3c31b 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java
@@ -291,7 +291,7 @@
{
case 10:
case 14:
- if ((0x2ffffffe87fffffeL & l) == 0L)
+ if ((0x2ffffffeaffffffeL & l) == 0L)
break;
if (kind > 14)
kind = 14;
@@ -302,7 +302,7 @@
jjCheckNAdd(8);
break;
case 8:
- if ((0x2ffffffe87fffffeL & l) != 0L)
+ if ((0x2ffffffeaffffffeL & l) != 0L)
jjCheckNAddTwoStates(8, 9);
break;
case 9:
@@ -310,7 +310,7 @@
kind = 12;
break;
case 12:
- if ((0x2ffffffe87fffffeL & l) == 0L)
+ if ((0x2ffffffeaffffffeL & l) == 0L)
break;
if (kind > 13)
kind = 13;
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 d078591..bd3546f 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
@@ -142,7 +142,7 @@
}
TOKEN: {
- <#SPECIAL: (["#","_","-","'",".","$","{","}","\""])>
+ <#SPECIAL: (["#","_","-","'",".","$","{","}","\"","[","]"])>
}
TOKEN: {
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java
new file mode 100644
index 0000000..c9612dc
--- /dev/null
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBodyArrayTest.java
@@ -0,0 +1,78 @@
+/**
+ * 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.stored;
+
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+
+public class ProducerBodyArrayTest extends CamelTestSupport {
+
+ EmbeddedDatabase db;
+
+ @Before
+ public void setUp() throws Exception {
+ db = new EmbeddedDatabaseBuilder()
+ .setType(EmbeddedDatabaseType.DERBY).addScript("sql/storedProcedureTest.sql").build();
+ super.setUp();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ db.shutdown();
+ }
+
+ @Test
+ public void shouldExecuteStoredProcedure() throws InterruptedException {
+ MockEndpoint mock = getMockEndpoint("mock:query");
+ mock.expectedMessageCount(1);
+
+ Integer[] numbers = new Integer[]{1, 2};
+ template.requestBody("direct:query", numbers);
+
+ assertMockEndpointsSatisfied();
+
+ Exchange exchange = mock.getExchanges().get(0);
+
+ assertEquals(Integer.valueOf(-1), exchange.getIn().getBody(Map.class).get("resultofsub"));
+ assertNotNull(exchange.getIn().getHeader(SqlStoredConstants.SQL_STORED_UPDATE_COUNT));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // required for the sql component
+ getContext().getComponent("sql-stored", SqlStoredComponent.class).setDataSource(db);
+
+ from("direct:query").to("sql-stored:SUBNUMBERS(INTEGER ${body[0]},INTEGER ${body[1]},OUT INTEGER resultofsub)").to("mock:query");
+ }
+ };
+ }
+
+}
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 8eb704b..0ff0c87 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
@@ -52,7 +52,6 @@
MockEndpoint mock = getMockEndpoint("mock:query");
mock.expectedMessageCount(1);
-
Map<String, Object> headers = new HashMap<>();
headers.put("num1", 1);
headers.put("num2", 2);