This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 08668c56746b CAMEL-23481: Replace retired Apache Derby with HSQL and
MariaDB in camel-sql
08668c56746b is described below
commit 08668c56746b1943e31835f18ebe621e409b8b69
Author: Torsten Mielke <[email protected]>
AuthorDate: Sat May 30 08:24:17 2026 +0200
CAMEL-23481: Replace retired Apache Derby with HSQL and MariaDB in camel-sql
Replace Apache Derby (retired) with HSQL for stored procedure tests and
MariaDB4j for stored function tests in camel-sql. HSQL does not support
SQL stored functions, so MariaDB4j is used for SqlFunctionDataSourceTest
only, with platform restrictions to skip on architectures without native
MariaDB binaries (ppc64le, s390x, Linux ARM64).
Closes #23597
---
components/camel-sql/pom.xml | 41 ++++---
.../sql/SqlConsumerMaxMessagesPerPollTest.java | 8 +-
.../camel/component/sql/SqlGeneratedKeysTest.java | 1 -
.../sql/stored/CallableStatementWrapperTest.java | 44 +++----
.../sql/stored/ProducerBatchInvalidTest.java | 2 +-
.../component/sql/stored/ProducerBatchTest.java | 2 +-
.../sql/stored/ProducerBodyArrayTest.java | 2 +-
.../component/sql/stored/ProducerInOutTest.java | 16 ++-
.../sql/stored/ProducerNamedParameterTest.java | 2 +-
.../camel/component/sql/stored/ProducerTest.java | 21 +++-
.../ProducerUseMessageBodyForTemplateTest.java | 2 +-
.../sql/stored/SqlFunctionDataSourceTest.java | 126 ++++++++++++++++++---
.../sql/stored/SqlStoredDataSourceTest.java | 2 +-
.../component/sql/stored/TemplateCacheTest.java | 2 +-
.../component/sql/stored/TestStoredFunction.java | 7 +-
.../component/sql/stored/TestStoredProcedure.java | 8 +-
.../JdbcLoopTransactedSplitterStackSizeTest.java | 37 +++---
.../processor/idempotent/jdbc/cached-spring.xml | 36 +++---
.../idempotent/jdbc/customized-spring.xml | 42 +++----
.../jdbc/customized-tablename-spring.xml | 34 +++---
.../camel/processor/idempotent/jdbc/spring.xml | 36 +++---
.../resources/sql/createAndPopulateDatabase3.sql | 5 +-
.../resources/sql/createAndPopulateDatabase4.sql | 4 +-
...lateDatabase4.sql => storedFunctionMariaDB.sql} | 11 +-
.../src/test/resources/sql/storedProcedureTest.sql | 48 ++++----
parent/pom.xml | 2 +
26 files changed, 320 insertions(+), 221 deletions(-)
diff --git a/components/camel-sql/pom.xml b/components/camel-sql/pom.xml
index cdb0227c310a..abac5452be81 100644
--- a/components/camel-sql/pom.xml
+++ b/components/camel-sql/pom.xml
@@ -36,7 +36,6 @@
</properties>
<dependencies>
-
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId>
@@ -70,17 +69,10 @@
<version>${hamcrest-version}</version>
<scope>test</scope>
</dependency>
- <!-- derby used for stored procedure tests -->
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>${derby-version}</version>
- <scope>test</scope>
- </dependency>
<dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derbytools</artifactId>
- <version>${derby-version}</version>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>${h2-version}</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -89,17 +81,25 @@
<version>${hsqldb-version}</version>
<scope>test</scope>
</dependency>
+ <!-- MariaDB4j only used for SQL stored function tests -->
<dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <version>2.4.240</version>
+ <groupId>ch.vorburger.mariaDB4j</groupId>
+ <artifactId>mariaDB4j</artifactId>
+ <version>${mariadb4j-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>${mariadb-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
+ <!-- This is necessary when debugging tests to enable HSQLDB to find
+ the classes in the classpath. -->
<plugins>
-
<!-- generate source code from grammar for the stored procedure
component -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
@@ -120,7 +120,16 @@
</execution>
</executions>
</plugin>
-
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <!-- This is necessary when debugging tests to enable
HSQLDB to find
+ the classes in the classpath. -->
+
<hsqldb.method_class_names>org.apache.camel.component.sql.stored.*</hsqldb.method_class_names>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
</plugins>
</build>
</project>
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlConsumerMaxMessagesPerPollTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlConsumerMaxMessagesPerPollTest.java
index 60f3116567f7..9cadb24d0a8d 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlConsumerMaxMessagesPerPollTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlConsumerMaxMessagesPerPollTest.java
@@ -39,7 +39,7 @@ public class SqlConsumerMaxMessagesPerPollTest extends
CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/createAndPopulateDatabase4.sql")
.build();
@@ -60,19 +60,19 @@ public class SqlConsumerMaxMessagesPerPollTest extends
CamelTestSupport {
MockEndpoint.assertIsSatisfied(context);
List<Exchange> exchanges = mock.getReceivedExchanges();
- assertBodyMapValue(1, "ID", exchanges.get(0));
+ assertBodyMapValue(0, "ID", exchanges.get(0));
assertBodyMapValue("Camel", "PROJECT", exchanges.get(0));
assertProperty(0, "CamelBatchIndex", exchanges.get(0));
assertProperty(2, "CamelBatchSize", exchanges.get(0));
assertProperty(Boolean.FALSE, "CamelBatchComplete", exchanges.get(0));
- assertBodyMapValue(2, "ID", exchanges.get(1));
+ assertBodyMapValue(1, "ID", exchanges.get(1));
assertBodyMapValue("AMQ", "PROJECT", exchanges.get(1));
assertProperty(1, "CamelBatchIndex", exchanges.get(1));
assertProperty(2, "CamelBatchSize", exchanges.get(1));
assertProperty(Boolean.TRUE, "CamelBatchComplete", exchanges.get(1));
// end of the first batch
- assertBodyMapValue(3, "ID", exchanges.get(2));
+ assertBodyMapValue(2, "ID", exchanges.get(2));
assertBodyMapValue("Linux", "PROJECT", exchanges.get(2));
assertProperty(0, "CamelBatchIndex", exchanges.get(2)); // the second
batch
assertProperty(1, "CamelBatchSize", exchanges.get(2)); // only one
entry in this batch
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java
index 5d4445df24ac..7ecb0b3ec97e 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java
@@ -163,7 +163,6 @@ public class SqlGeneratedKeysTest extends CamelTestSupport {
List<Map<String, Object>> generatedKeys =
out.getMessage().getHeader(SqlConstants.SQL_GENERATED_KEYS_DATA, List.class);
assertNotNull(generatedKeys, "out body could not be converted to a
List - was: " + out.getMessage().getBody());
- // it seems not to work with Derby...
assertEquals(4, generatedKeys.size());
int id = 3;
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/CallableStatementWrapperTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/CallableStatementWrapperTest.java
index c8cf78b53708..f54841dd6892 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/CallableStatementWrapperTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/CallableStatementWrapperTest.java
@@ -35,17 +35,28 @@ import static
org.junit.jupiter.api.Assertions.assertNotNull;
public class CallableStatementWrapperTest extends CamelTestSupport {
+ /* This is necessary when debugging tests to enable HSQLDB to find
+ the classes in the classpath. */
+ /*
+ static {
+ if (System.getProperty("hsqldb.method_class_names") == null) {
+ System.setProperty(
+ "hsqldb.method_class_names",
+ "org.apache.camel.component.sql.stored.*");
+ }
+ }
+ */
+
private TemplateParser templateParser;
private EmbeddedDatabase db;
private JdbcTemplate jdbcTemplate;
private CallableStatementWrapperFactory factory;
@Override
-
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
jdbcTemplate = new JdbcTemplate(db);
@@ -60,32 +71,7 @@ public class CallableStatementWrapperTest extends
CamelTestSupport {
@Test
public void shouldExecuteStoredProcedure() throws Exception {
CallableStatementWrapper wrapper = new CallableStatementWrapper(
- "SUBNUMBERS"
- +
"(INTEGER ${header.v1},INTEGER ${header.v2},OUT INTEGER resultofsub)",
- factory);
-
- final Exchange exchange = createExchangeWithBody(null);
- exchange.getIn().setHeader("v1", 1);
- exchange.getIn().setHeader("v2", 2);
-
- wrapper.call(new WrapperExecuteCallback() {
- @Override
- public void execute(StatementWrapper statementWrapper) throws
SQLException, DataAccessException {
- statementWrapper.populateStatement(null, exchange);
-
- Map resultOfQuery = (Map) statementWrapper.executeStatement();
- assertEquals(-1, resultOfQuery.get("resultofsub"));
- }
- });
- }
-
- @Test
- public void shouldExecuteStoredFunction() throws Exception {
- CallableStatementWrapperFactory factory = new
CallableStatementWrapperFactory(jdbcTemplate, templateParser, true);
-
- CallableStatementWrapper wrapper = new CallableStatementWrapper(
- "SUBNUMBERS_FUNCTION"
- +
"(OUT INTEGER resultofsub, INTEGER ${header.v1},INTEGER ${header.v2})",
+ "SUBNUMBERS(INTEGER ${header.v1},INTEGER ${header.v2},OUT
INTEGER resultofsub)",
factory);
final Exchange exchange = createExchangeWithBody(null);
@@ -116,7 +102,6 @@ public class CallableStatementWrapperTest extends
CamelTestSupport {
//no output parameter in stored procedure NILADIC()
//Spring sets #update-count-1
assertNotNull(result.get("#update-count-1"));
-
}
});
}
@@ -127,5 +112,4 @@ public class CallableStatementWrapperTest extends
CamelTestSupport {
db.shutdown();
}
}
-
}
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchInvalidTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchInvalidTest.java
index c2cb662cb5f1..34d5db7ed481 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchInvalidTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchInvalidTest.java
@@ -40,7 +40,7 @@ public class ProducerBatchInvalidTest extends
CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchTest.java
index 53324b58a66c..6bb13ffa3136 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerBatchTest.java
@@ -42,7 +42,7 @@ public class ProducerBatchTest extends CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
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
index 5cae4169500f..58bb109b8d62 100644
---
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
@@ -39,7 +39,7 @@ public class ProducerBodyArrayTest extends CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerInOutTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerInOutTest.java
index 6f783b847645..79915cfb6408 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerInOutTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerInOutTest.java
@@ -33,6 +33,18 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
public class ProducerInOutTest extends CamelTestSupport {
+ /* This is necessary when debugging tests to enable HSQLDB to find
+ the classes in the classpath. */
+ /*
+ static {
+ if (System.getProperty("hsqldb.method_class_names") == null) {
+ System.setProperty(
+ "hsqldb.method_class_names",
+ "org.apache.camel.component.sql.stored.*");
+ }
+ }
+ */
+
EmbeddedDatabase db;
@Override
@@ -40,7 +52,7 @@ public class ProducerInOutTest extends CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
@@ -81,7 +93,7 @@ public class ProducerInOutTest extends CamelTestSupport {
getContext().getComponent("sql-stored",
SqlStoredComponent.class).setDataSource(db);
from("direct:query")
- .to("sql-stored:INOUTDEMO(INTEGER ${headers.in1},INOUT
INTEGER ${headers.in2} out1,OUT INTEGER out2)")
+ .to("sql-stored:INOUTDEMO(INTEGER ${headers.in1},
INOUT INTEGER ${headers.in2} out1, OUT INTEGER out2)")
.to("mock:query");
}
};
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerNamedParameterTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerNamedParameterTest.java
index 5f2292000c66..180cc7beb4af 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerNamedParameterTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerNamedParameterTest.java
@@ -40,7 +40,7 @@ public class ProducerNamedParameterTest extends
CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
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 fc62fb7f8530..7783188a2460 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
@@ -33,16 +33,26 @@ import static
org.junit.jupiter.api.Assertions.assertNotNull;
public class ProducerTest extends CamelTestSupport {
+ /* This is necessary when debugging tests to enable HSQLDB to find
+ the classes in the classpath. */
+ /*
+ static {
+ if (System.getProperty("hsqldb.method_class_names") == null) {
+ System.setProperty(
+ "hsqldb.method_class_names",
+ "org.apache.camel.component.sql.stored.*");
+ }
+ }
+ */
+
EmbeddedDatabase db;
@Override
-
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
-
}
@Override
@@ -78,8 +88,9 @@ public class ProducerTest extends CamelTestSupport {
// required for the sql component
getContext().getComponent("sql-stored",
SqlStoredComponent.class).setDataSource(db);
- from("direct:query").to("sql-stored:SUBNUMBERS(INTEGER
${headers.num1},INTEGER ${headers"
- + ".num2},OUT INTEGER resultofsub)")
+ from("direct:query")
+ .to("sql-stored:SUBNUMBERS(INTEGER
${headers.num1},INTEGER ${headers"
+ + ".num2},OUT INTEGER resultofsub)")
.to("mock:query");
}
};
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
index 1ce48a217f25..3165d28f73a3 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
@@ -39,7 +39,7 @@ public class ProducerUseMessageBodyForTemplateTest extends
CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
index eab747df4ec9..e8ffe8bab1c3 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
@@ -16,56 +16,147 @@
*/
package org.apache.camel.component.sql.stored;
+import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
+import javax.sql.DataSource;
+
+import ch.vorburger.mariadb4j.DB;
+import ch.vorburger.mariadb4j.DBConfigurationBuilder;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.sql.stored.template.TemplateParser;
import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import static org.junit.jupiter.api.Assertions.assertEquals;
+/**
+ * This test evaluates SQL stored function call with sql-stored component
against a MariaDB database because HSQLDB
+ * doesn't support SQL stored functions.
+ */
+@EnabledOnOs(value = { OS.LINUX, OS.WINDOWS, OS.MAC },
+ architectures = { "amd64", "x86_64", "aarch64", "aarch_64" })
+@DisabledOnOs(value = OS.LINUX, architectures = { "aarch64", "aarch_64" },
+ disabledReason = "MariaDB4j has no Linux ARM64 native binary
(mariadb4j-db-linux64 is x86_64 only)")
public class SqlFunctionDataSourceTest extends CamelTestSupport {
- private EmbeddedDatabase db;
+ private static final String DB_NAME = "test";
+ private static final Object DB_LOCK = new Object();
+ private static DB sharedMariaDb;
+ private static DataSource sharedDataSource;
+
+ private DataSource db;
+ private static JdbcTemplate jdbcTemplate;
+ private TemplateParser templateParser;
+
+ /** Initialize the shared MariaDB database for the tests. */
+ private static void initSharedMariaDb() throws Exception {
+ DBConfigurationBuilder config = DBConfigurationBuilder.newBuilder();
+ config.setPort(0);
+ sharedMariaDb = DB.newEmbeddedDB(config.build());
+ sharedMariaDb.start();
+
+ DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setDriverClassName("org.mariadb.jdbc.Driver");
+ dataSource.setUrl(sharedMariaDb.getConfiguration().getURL(DB_NAME));
+ dataSource.setUsername("root");
+ dataSource.setPassword("");
+ sharedDataSource = dataSource;
+
+ ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
+ populator.addScript(new
ClassPathResource("sql/storedFunctionMariaDB.sql"));
+ populator.setSeparator("$$");
+ populator.execute(sharedDataSource);
+
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (sharedMariaDb != null) {
+ try {
+ sharedMariaDb.stop();
+ } catch (Exception e) {
+ // best-effort cleanup on JVM shutdown
+ }
+ }
+ }));
+ jdbcTemplate = new JdbcTemplate(sharedDataSource);
+ }
+ /** Initialize the database for the tests. */
@Override
-
public void doPreSetup() throws Exception {
- db = new EmbeddedDatabaseBuilder()
- .setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
- .addScript("sql/storedProcedureTest.sql").build();
-
+ synchronized (DB_LOCK) {
+ if (sharedMariaDb == null) {
+ initSharedMariaDb();
+ }
+ }
+ db = sharedDataSource;
}
@Override
public void doPostTearDown() throws Exception {
- if (db != null) {
- db.shutdown();
- }
+ db = null;
}
+ @BeforeEach
+ void setupTest() {
+ templateParser = new TemplateParser(context().getClassResolver());
+ }
+
+ /* Testing SQL stored function call with sql-stored component against
+ MariaDB database.
+ */
@Test
- public void shouldExecuteStoredProcedure() throws InterruptedException {
+ public void shouldExecuteStoredFunction() throws InterruptedException {
MockEndpoint mock = getMockEndpoint("mock:query");
mock.expectedMessageCount(1);
Map<String, Object> headers = new HashMap<>();
- headers.put("num1", 1);
- headers.put("num2", 2);
+ headers.put("num1", 11);
+ headers.put("num2", 3);
template.requestBodyAndHeaders("direct:query", null, headers);
MockEndpoint.assertIsSatisfied(context);
Exchange exchange = mock.getExchanges().get(0);
+ assertEquals(Integer.valueOf(8),
exchange.getIn().getBody(Map.class).get("resultofsub"));
+ }
+
+ /* Test moved from CallableStatementWrapperTest to here as HSQLDB doesn't
+ support SQL stored functions. This test evaluates SQL stored function
+ call using CallableStatementWrapper against a MariaDB database.
+ */
+ @Test
+ public void shouldExecuteStoredFunctionDirect() throws Exception {
+ CallableStatementWrapperFactory factory = new
CallableStatementWrapperFactory(jdbcTemplate, templateParser, true);
+
+ CallableStatementWrapper wrapper = new CallableStatementWrapper(
+ "SUBNUMBERS_FUNCTION(OUT INTEGER resultofsub, INTEGER
${header.v1},INTEGER ${header.v2})",
+ factory);
- assertEquals(Integer.valueOf(-1),
exchange.getIn().getBody(Map.class).get("resultofsub"));
+ final Exchange exchange = createExchangeWithBody(null);
+ exchange.getIn().setHeader("v1", 12);
+ exchange.getIn().setHeader("v2", 5);
+
+ wrapper.call(new WrapperExecuteCallback() {
+ @Override
+ public void execute(StatementWrapper statementWrapper) throws
SQLException, DataAccessException {
+ statementWrapper.populateStatement(null, exchange);
+
+ Map resultOfQuery = (Map) statementWrapper.executeStatement();
+ assertEquals(7, resultOfQuery.get("resultofsub"));
+ }
+ });
}
@Override
@@ -73,7 +164,6 @@ public class SqlFunctionDataSourceTest extends
CamelTestSupport {
return new RouteBuilder() {
@Override
public void configure() {
- // required for the sql component
getContext().getComponent("sql-stored",
SqlStoredComponent.class).setDataSource(db);
from("direct:query")
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
index 5ee3c6158d78..7f0a946afa84 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
@@ -38,7 +38,7 @@ public class SqlStoredDataSourceTest extends CamelTestSupport
{
// this is the database we create with some initial data for our unit
test
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
// END SNIPPET: e2
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateCacheTest.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateCacheTest.java
index 5796f7951b75..b36b94a8b0e2 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateCacheTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateCacheTest.java
@@ -37,7 +37,7 @@ public class TemplateCacheTest extends CamelTestSupport {
public void doPreSetup() throws Exception {
db = new EmbeddedDatabaseBuilder()
.setName(getClass().getSimpleName())
- .setType(EmbeddedDatabaseType.DERBY)
+ .setType(EmbeddedDatabaseType.HSQL)
.addScript("sql/storedProcedureTest.sql").build();
}
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredFunction.java
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredFunction.java
index 03b7acb69648..48f4303a48ff 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredFunction.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TestStoredFunction.java
@@ -26,8 +26,9 @@ public final class TestStoredFunction {
private TestStoredFunction() {
}
- public static int subnumbers(int val1, int val2) {
- LOG.info("calling subnumbers:{} - {}", val1, val2);
- return val1 - val2;
+ /* HSQLDB style requires Integer instead of int for any out parameters. */
+ public static void subnumbers(Integer[] result, int val1, int val2) {
+ LOG.info("calling subnumbers: {} - {}", val1, val2);
+ result[0] = val1 - val2;
}
}
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
index 50e100a327fc..d691f8a50db2 100644
---
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
@@ -30,8 +30,9 @@ public final class TestStoredProcedure {
private TestStoredProcedure() {
}
- public static void subnumbers(int val1, int val2, int[] ret) {
- LOG.info("calling addnumbers:{} + {}", val1, val2);
+ /** HSQLDB style requires Integer instead of int for the return value. */
+ public static void subnumbers(int val1, int val2, Integer[] ret) {
+ LOG.info("calling subnumbers:{} - {}", val1, val2);
ret[0] = val1 - val2;
}
@@ -47,7 +48,8 @@ public final class TestStoredProcedure {
LOG.info("nilacid called");
}
- public static void inoutdemo(int in1, int[] inout1, int[] out1) {
+ /** HSQLDB style requires Integer instead of int for the out parameters. */
+ public static void inoutdemo(int in1, Integer[] inout1, Integer[] out1) {
LOG.info("calling inoutdemo: {}, {}", inout1[0], out1[0]);
inout1[0] = 1;
out1[0] = 2;
diff --git
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcLoopTransactedSplitterStackSizeTest.java
b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcLoopTransactedSplitterStackSizeTest.java
index 0222eec494e7..d0121ebf2d5f 100644
---
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcLoopTransactedSplitterStackSizeTest.java
+++
b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcLoopTransactedSplitterStackSizeTest.java
@@ -16,14 +16,10 @@
*/
package org.apache.camel.processor.aggregate.jdbc;
-import java.io.File;
-import java.sql.DriverManager;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.Registry;
import org.apache.camel.spring.spi.SpringTransactionPolicy;
-import org.apache.camel.util.FileUtil;
-import org.apache.derby.jdbc.EmbeddedDataSource;
+import org.hsqldb.jdbc.JDBCDataSource;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -45,7 +41,7 @@ public class JdbcLoopTransactedSplitterStackSizeTest extends
AbstractJdbcAggrega
private int total = 500;
private static final String DSNAME = "ds";
- private static EmbeddedDataSource ds;
+ private static JDBCDataSource ds;
private static PlatformTransactionManager txManager;
private static SpringTransactionPolicy txPolicy;
@@ -61,7 +57,7 @@ public class JdbcLoopTransactedSplitterStackSizeTest extends
AbstractJdbcAggrega
@Override
protected void bindToRegistry(Registry registry) throws Exception {
- ds = Derby.init(DSNAME);
+ ds = HsqlDb.init(DSNAME);
txManager = new DataSourceTransactionManager(ds);
@@ -79,7 +75,7 @@ public class JdbcLoopTransactedSplitterStackSizeTest extends
AbstractJdbcAggrega
@AfterAll
public static void tearDownOnce() {
- Derby.close("ds");
+ HsqlDb.close("ds");
}
@Test
@@ -145,30 +141,23 @@ public class JdbcLoopTransactedSplitterStackSizeTest
extends AbstractJdbcAggrega
return depth;
}
- private static class Derby {
+ private static class HsqlDb {
- public static EmbeddedDataSource init(String db) {
- deleteDatabaseFiles(db);
- EmbeddedDataSource ds = new EmbeddedDataSource();
- ds.setDataSourceName(db);
- ds.setDatabaseName(db);
- ds.setConnectionAttributes("create=true");
+ public static JDBCDataSource init(String db) {
+ JDBCDataSource ds = new JDBCDataSource();
+ ds.setUrl("jdbc:hsqldb:mem:" + db);
+ ds.setUser("sa");
+ ds.setPassword("");
return ds;
}
public static void close(String dbName) {
- // unload the driver
- try {
- DriverManager.getConnection("jdbc:derby:;shutdown=true");
- } catch (Exception e) {
- // ignore
- }
- deleteDatabaseFiles(dbName);
+ // HSQLDB in-memory databases are automatically cleaned up
+ // when all connections are closed
}
private static void deleteDatabaseFiles(String dbName) {
- FileUtil.deleteFile(new File("derby.log"));
- FileUtil.removeDir(new File(dbName));
+ // No files to delete for in-memory HSQLDB
}
}
}
diff --git
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/cached-spring.xml
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/cached-spring.xml
index 7a32a81db61a..29ffb855c242 100644
---
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/cached-spring.xml
+++
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/cached-spring.xml
@@ -26,28 +26,28 @@
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
- <!-- START SNIPPET: e1 -->
- <jdbc:embedded-database id="dataSource" type="H2" />
+ <!-- START SNIPPET: e1 -->
+ <jdbc:embedded-database id="dataSource" type="H2" />
<!-- END SNIPPET: e1 -->
-
+
<!-- START SNIPPET: e2 -->
<bean id="messageIdRepository"
class="org.apache.camel.processor.idempotent.jdbc.JdbcCachedMessageIdRepository">
- <constructor-arg ref="dataSource" />
- <constructor-arg value="myProcessorName" />
+ <constructor-arg ref="dataSource" />
+ <constructor-arg value="myProcessorName" />
</bean>
-
+
<camel:camelContext>
- <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
- <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
- </camel:errorHandler>
-
- <camel:route id="JdbcCachedMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
- <camel:from uri="direct:start" />
- <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
- <camel:header>messageId</camel:header>
- <camel:to uri="mock:result" />
- </camel:idempotentConsumer>
- </camel:route>
+ <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
+ <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
+ </camel:errorHandler>
+
+ <camel:route id="JdbcCachedMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
+ <camel:from uri="direct:start" />
+ <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
+ <camel:header>messageId</camel:header>
+ <camel:to uri="mock:result" />
+ </camel:idempotentConsumer>
+ </camel:route>
</camel:camelContext>
<!-- END SNIPPET: e2 -->
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-spring.xml
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-spring.xml
index 0ef71e927a5d..ec9964148af6 100644
---
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-spring.xml
+++
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-spring.xml
@@ -27,30 +27,30 @@
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<jdbc:embedded-database id="dataSource" type="H2" />
-
+
<!-- START SNIPPET: e1 -->
<bean id="messageIdRepository"
class="org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository">
- <constructor-arg ref="dataSource" />
- <constructor-arg value="myProcessorName" />
- <property name="tableExistsString" value="SELECT 1 FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE 1 = 0" />
- <property name="createString" value="CREATE TABLE
CUSTOMIZED_MESSAGE_REPOSITORY (processorName VARCHAR(255), messageId
VARCHAR(100), createdAt TIMESTAMP)" />
- <property name="queryString" value="SELECT COUNT(*) FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE processorName = ? AND messageId = ?" />
- <property name="insertString" value="INSERT INTO
CUSTOMIZED_MESSAGE_REPOSITORY (processorName, messageId, createdAt) VALUES (?,
?, ?)" />
- <property name="deleteString" value="DELETE FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE processorName = ? AND messageId = ?" />
+ <constructor-arg ref="dataSource" />
+ <constructor-arg value="myProcessorName" />
+ <property name="tableExistsString" value="SELECT 1 FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE 1 = 0" />
+ <property name="createString" value="CREATE TABLE
CUSTOMIZED_MESSAGE_REPOSITORY (processorName VARCHAR(255), messageId
VARCHAR(100), createdAt TIMESTAMP)" />
+ <property name="queryString" value="SELECT COUNT(*) FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE processorName = ? AND messageId = ?" />
+ <property name="insertString" value="INSERT INTO
CUSTOMIZED_MESSAGE_REPOSITORY (processorName, messageId, createdAt) VALUES (?,
?, ?)" />
+ <property name="deleteString" value="DELETE FROM
CUSTOMIZED_MESSAGE_REPOSITORY WHERE processorName = ? AND messageId = ?" />
</bean>
<!-- END SNIPPET: e1 -->
-
+
<camel:camelContext>
- <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
- <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
- </camel:errorHandler>
-
- <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
- <camel:from uri="direct:start" />
- <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
- <camel:header>messageId</camel:header>
- <camel:to uri="mock:result" />
- </camel:idempotentConsumer>
- </camel:route>
+ <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
+ <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
+ </camel:errorHandler>
+
+ <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
+ <camel:from uri="direct:start" />
+ <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
+ <camel:header>messageId</camel:header>
+ <camel:to uri="mock:result" />
+ </camel:idempotentConsumer>
+ </camel:route>
</camel:camelContext>
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-tablename-spring.xml
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-tablename-spring.xml
index b5d255f3f4f5..053660685304 100644
---
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-tablename-spring.xml
+++
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/customized-tablename-spring.xml
@@ -27,26 +27,26 @@
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<jdbc:embedded-database id="dataSource" type="H2" />
-
+
<!-- START SNIPPET: e1 -->
<bean id="messageIdRepository"
class="org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository">
- <constructor-arg ref="dataSource" />
- <constructor-arg value="myProcessorName" />
- <property name="tableName" value="FOOBAR" />
+ <constructor-arg ref="dataSource" />
+ <constructor-arg value="myProcessorName" />
+ <property name="tableName" value="FOOBAR" />
</bean>
<!-- END SNIPPET: e1 -->
-
+
<camel:camelContext>
- <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
- <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
- </camel:errorHandler>
-
- <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
- <camel:from uri="direct:start" />
- <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
- <camel:header>messageId</camel:header>
- <camel:to uri="mock:result" />
- </camel:idempotentConsumer>
- </camel:route>
+ <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
+ <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
+ </camel:errorHandler>
+
+ <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
+ <camel:from uri="direct:start" />
+ <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
+ <camel:header>messageId</camel:header>
+ <camel:to uri="mock:result" />
+ </camel:idempotentConsumer>
+ </camel:route>
</camel:camelContext>
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/spring.xml
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/spring.xml
index 4175f44ae67a..c18e08d62747 100644
---
a/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/spring.xml
+++
b/components/camel-sql/src/test/resources/org/apache/camel/processor/idempotent/jdbc/spring.xml
@@ -26,28 +26,28 @@
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
- <!-- START SNIPPET: e1 -->
- <jdbc:embedded-database id="dataSource" type="H2" />
+ <!-- START SNIPPET: e1 -->
+ <jdbc:embedded-database id="dataSource" type="H2" />
<!-- END SNIPPET: e1 -->
-
+
<!-- START SNIPPET: e2 -->
<bean id="messageIdRepository"
class="org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository">
- <constructor-arg ref="dataSource" />
- <constructor-arg value="myProcessorName" />
+ <constructor-arg ref="dataSource" />
+ <constructor-arg value="myProcessorName" />
</bean>
-
+
<camel:camelContext>
- <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
- <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
- </camel:errorHandler>
-
- <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
- <camel:from uri="direct:start" />
- <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
- <camel:header>messageId</camel:header>
- <camel:to uri="mock:result" />
- </camel:idempotentConsumer>
- </camel:route>
+ <camel:errorHandler id="deadLetterChannel" type="DeadLetterChannel"
deadLetterUri="mock:error">
+ <camel:redeliveryPolicy maximumRedeliveries="0"
maximumRedeliveryDelay="0" logStackTrace="false" />
+ </camel:errorHandler>
+
+ <camel:route id="JdbcMessageIdRepositoryTest"
errorHandlerRef="deadLetterChannel">
+ <camel:from uri="direct:start" />
+ <camel:idempotentConsumer
idempotentRepository="messageIdRepository">
+ <camel:header>messageId</camel:header>
+ <camel:to uri="mock:result" />
+ </camel:idempotentConsumer>
+ </camel:route>
</camel:camelContext>
<!-- END SNIPPET: e2 -->
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase3.sql
b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase3.sql
index 2499f1cd7902..88443226e602 100644
--- a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase3.sql
+++ b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase3.sql
@@ -16,12 +16,13 @@
--
-- START SNIPPET: e1
-create table projects (id integer primary key GENERATED ALWAYS AS IDENTITY,
project varchar(10), license varchar(5), description varchar(1000) default
null);
+create table projects (id integer primary key IDENTITY, project varchar(10),
license varchar(5), description varchar(1000) default null);
insert into projects (project, license, description) values ('Camel', 'ASF',
'');
insert into projects (project, license, description) values ('AMQ', 'ASF', '');
insert into projects (project, license, description) values ('Linux', 'XXX',
'');
-- END SNIPPET: e1
-- START SNIPPET: e2
-create table developers (id1 integer primary key GENERATED ALWAYS AS IDENTITY
(START WITH 5), name varchar(20), position varchar(20), id2 integer GENERATED
ALWAYS AS (id1+1));
+create table developers (id1 integer IDENTITY primary key, name varchar(20),
position varchar(20), id2 integer GENERATED ALWAYS AS (id1+1));
+ALTER TABLE developers ALTER COLUMN id1 RESTART WITH 5;
-- END SNIPPET: e2
\ No newline at end of file
diff --git
a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
index e62a4e082011..7eda67af0559 100644
--- a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
+++ b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
@@ -15,7 +15,7 @@
-- limitations under the License.
--
-create table projects (id integer primary key GENERATED ALWAYS AS IDENTITY,
project varchar(10), license varchar(5), description varchar(1000) default
null, processed boolean);
+create table projects (id integer primary key IDENTITY, project varchar(10),
license varchar(5), description varchar(1000) default null, processed boolean);
insert into projects (project, license, description, processed) values
('Camel', 'ASF', '', false);
insert into projects (project, license, description, processed) values ('AMQ',
'ASF', '', false);
-insert into projects (project, license, description, processed) values
('Linux', 'XXX', '', false);
+insert into projects (project, license, description, processed) values
('Linux', 'XXX', '', false);
\ No newline at end of file
diff --git
a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
b/components/camel-sql/src/test/resources/sql/storedFunctionMariaDB.sql
similarity index 62%
copy from
components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
copy to components/camel-sql/src/test/resources/sql/storedFunctionMariaDB.sql
index e62a4e082011..24d5962b3d1a 100644
--- a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase4.sql
+++ b/components/camel-sql/src/test/resources/sql/storedFunctionMariaDB.sql
@@ -15,7 +15,10 @@
-- limitations under the License.
--
-create table projects (id integer primary key GENERATED ALWAYS AS IDENTITY,
project varchar(10), license varchar(5), description varchar(1000) default
null, processed boolean);
-insert into projects (project, license, description, processed) values
('Camel', 'ASF', '', false);
-insert into projects (project, license, description, processed) values ('AMQ',
'ASF', '', false);
-insert into projects (project, license, description, processed) values
('Linux', 'XXX', '', false);
+-- MariaDB/MySQL stored procedures and functions (SQL-based; no Java EXTERNAL
NAME)
+-- Statement separator is $$ (see SqlFunctionDataSourceTest
ResourceDatabasePopulator)
+-- MariaDB4J does not support calling Java methods from the SQL stored
procedure or function.
+DROP FUNCTION IF EXISTS SUBNUMBERS_FUNCTION$$
+CREATE FUNCTION SUBNUMBERS_FUNCTION(param1 INT, param2 INT) RETURNS INT
+DETERMINISTIC
+ RETURN param1 - param2$$
diff --git
a/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql
b/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql
index a6316d04d054..d90725fcabc3 100644
--- a/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql
+++ b/components/camel-sql/src/test/resources/sql/storedProcedureTest.sql
@@ -15,33 +15,29 @@
-- limitations under the License.
--
-CREATE PROCEDURE SUBNUMBERS(VALUE1 INTEGER, VALUE2 INTEGER,OUT RESULT INTEGER)
- PARAMETER STYLE JAVA
- LANGUAGE JAVA
- EXTERNAL NAME
-'org.apache.camel.component.sql.stored.TestStoredProcedure.subnumbers';
+-- HSQLDB stored procedures using PARAMETER STYLE JAVA with OUT parameters
+-- These reference Java methods from TestStoredProcedure class
-CREATE PROCEDURE NILADIC()
- PARAMETER STYLE JAVA
- LANGUAGE JAVA
- EXTERNAL NAME
-'org.apache.camel.component.sql.stored.TestStoredProcedure.niladic';
+CREATE PROCEDURE SUBNUMBERS(IN param1 INTEGER, IN param2 INTEGER, OUT param3
INTEGER)
+LANGUAGE JAVA
+PARAMETER STYLE JAVA
+NO SQL
+EXTERNAL NAME
'CLASSPATH:org.apache.camel.component.sql.stored.TestStoredProcedure.subnumbers';
-CREATE PROCEDURE BATCHFN(VALUE1 CHAR(10))
- PARAMETER STYLE JAVA
- LANGUAGE JAVA
- EXTERNAL NAME
-'org.apache.camel.component.sql.stored.TestStoredProcedure.batchfn';
+CREATE PROCEDURE NILADIC()
+LANGUAGE JAVA
+PARAMETER STYLE JAVA
+NO SQL
+EXTERNAL NAME
'CLASSPATH:org.apache.camel.component.sql.stored.TestStoredProcedure.niladic';
-CREATE PROCEDURE INOUTDEMO(IN1 INTEGER, INOUT IN2 INTEGER, OUT OUT1 INTEGER)
- PARAMETER STYLE JAVA
- LANGUAGE JAVA
- EXTERNAL NAME
-'org.apache.camel.component.sql.stored.TestStoredProcedure.inoutdemo';
+CREATE PROCEDURE BATCHFN(IN param1 VARCHAR(100))
+LANGUAGE JAVA
+PARAMETER STYLE JAVA
+NO SQL
+EXTERNAL NAME
'CLASSPATH:org.apache.camel.component.sql.stored.TestStoredProcedure.batchfn';
-CREATE FUNCTION SUBNUMBERS_FUNCTION(VALUE1 INTEGER, VALUE2 INTEGER)
- RETURNS INTEGER
- PARAMETER STYLE JAVA
- LANGUAGE JAVA
- EXTERNAL NAME
-'org.apache.camel.component.sql.stored.TestStoredFunction.subnumbers';
+CREATE PROCEDURE INOUTDEMO(IN param1 INTEGER, INOUT param2 INTEGER, OUT param3
INTEGER)
+LANGUAGE JAVA
+PARAMETER STYLE JAVA
+NO SQL
+EXTERNAL NAME
'CLASSPATH:org.apache.camel.component.sql.stored.TestStoredProcedure.inoutdemo';
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index a7559b181cae..c0df39431ba8 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -226,6 +226,8 @@
<hibernate-validator-version>9.1.0.Final</hibernate-validator-version>
<hibernate-version>6.3.2.Final</hibernate-version>
<hsqldb-version>2.7.4</hsqldb-version>
+ <mariadb-version>3.5.8</mariadb-version>
+ <mariadb4j-version>3.3.1</mariadb4j-version>
<httpcore-version>5.4.2</httpcore-version>
<httpclient-version>5.5.2</httpclient-version>
<httpcore4-version>4.4.16</httpcore4-version>