diff --git a/schemacrawler-api/src/test/java/schemacrawler/test/ForeignKeyNamesTest.java b/schemacrawler-api/src/test/java/schemacrawler/test/ForeignKeyNamesTest.java
index 16f0511a29..53998b6f4f 100644
--- a/schemacrawler-api/src/test/java/schemacrawler/test/ForeignKeyNamesTest.java
+++ b/schemacrawler-api/src/test/java/schemacrawler/test/ForeignKeyNamesTest.java
@@ -45,7 +45,7 @@
import schemacrawler.test.utility.WithTestDatabase;
@ResolveTestContext
-@WithTestDatabase(script = "fk_dupe_name.sql")
+@WithTestDatabase(script = "/fk_dupe_name.sql")
public class ForeignKeyNamesTest {
private Catalog catalog;
diff --git a/schemacrawler-api/src/test/java/schemacrawler/test/utility/TestDatabaseConnectionParameterResolver.java b/schemacrawler-api/src/test/java/schemacrawler/test/utility/TestDatabaseConnectionParameterResolver.java
index 082fe95434..bb060a5762 100644
--- a/schemacrawler-api/src/test/java/schemacrawler/test/utility/TestDatabaseConnectionParameterResolver.java
+++ b/schemacrawler-api/src/test/java/schemacrawler/test/utility/TestDatabaseConnectionParameterResolver.java
@@ -28,16 +28,20 @@
package schemacrawler.test.utility;
+import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation;
-import static us.fatehi.utility.Utility.isBlank;
-
+import java.io.IOException;
import java.lang.reflect.Parameter;
+import java.nio.charset.StandardCharsets;
import java.sql.Connection;
+import java.sql.SQLException;
import java.util.Optional;
-
import javax.sql.DataSource;
-
import org.apache.commons.dbcp2.BasicDataSource;
+import org.apache.commons.dbutils.QueryRunner;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.hsqldb.jdbc.JDBCDataSource;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
@@ -45,9 +49,7 @@
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-
+import static us.fatehi.utility.Utility.isBlank;
import schemacrawler.testdb.TestDatabase;
import us.fatehi.utility.LoggingConfig;
import us.fatehi.utility.datasource.DatabaseConnectionSource;
@@ -130,35 +132,35 @@ public Object resolveParameter(
final String script = locateAnnotation(extensionContext).getScript();
final Parameter parameter = parameterContext.getParameter();
- if (isBlank(script)) {
- final DataSource ds = newDataSource();
- this.dataSource = DatabaseConnectionSources.fromDataSource(ds);
-
- if (isParameterConnection(parameter)) {
- return dataSource.get();
- } else if (isParameterDatabaseConnectionInfo(parameter)) {
- return new DatabaseConnectionInfo(
- testDatabase.getHost(),
- testDatabase.getPort(),
- testDatabase.getDatabase(),
- testDatabase.getConnectionUrl());
- } else if (isParameterDatabaseConnectionSource(parameter)) {
- return dataSource;
- } else {
- throw new ParameterResolutionException("Could not resolve " + parameter);
- }
- } else {
+ if (!isBlank(script)) {
final DataSource ds = newEmbeddedDatabase(script);
- this.dataSource = DatabaseConnectionSources.fromDataSource(ds);
+ dataSource = DatabaseConnectionSources.fromDataSource(ds);
if (isParameterConnection(parameter)) {
return dataSource.get();
- } else if (isParameterDatabaseConnectionSource(parameter)) {
+ }
+ if (isParameterDatabaseConnectionSource(parameter)) {
return dataSource;
- } else {
- throw new ParameterResolutionException("Could not resolve " + parameter);
}
+ throw new ParameterResolutionException("Could not resolve " + parameter);
+ }
+ final DataSource ds = newDataSource();
+ dataSource = DatabaseConnectionSources.fromDataSource(ds);
+
+ if (isParameterConnection(parameter)) {
+ return dataSource.get();
}
+ if (isParameterDatabaseConnectionInfo(parameter)) {
+ return new DatabaseConnectionInfo(
+ testDatabase.getHost(),
+ testDatabase.getPort(),
+ testDatabase.getDatabase(),
+ testDatabase.getConnectionUrl());
+ }
+ if (isParameterDatabaseConnectionSource(parameter)) {
+ return dataSource;
+ }
+ throw new ParameterResolutionException("Could not resolve " + parameter);
}
@Override
@@ -209,14 +211,27 @@ private BasicDataSource newDataSource() {
return ds;
}
- private EmbeddedDatabase newEmbeddedDatabase(final String script) {
- final EmbeddedDatabase db =
- new EmbeddedDatabaseBuilder()
- .generateUniqueName(true)
- .setScriptEncoding("UTF-8")
- .ignoreFailedDrops(true)
- .addScript(script)
- .build();
- return db;
+ private DataSource newEmbeddedDatabase(final String script) {
+ try {
+ // Create data source
+ final String randomDatabaseName = RandomStringUtils.randomAlphabetic(7);
+ final JDBCDataSource hsqlDataSource = new JDBCDataSource();
+ hsqlDataSource.setDatabase("jdbc:hsqldb:mem:" + randomDatabaseName);
+ // Read script
+ final String sql = IOUtils.resourceToString(script, StandardCharsets.UTF_8);
+ String[] statements = sql.split(";");
+ // Create a QueryRunner to execute the SQL statements
+ final QueryRunner runner = new QueryRunner(hsqlDataSource);
+ for (String statement : statements) {
+ statement = statement.trim();
+ System.out.println(statement);
+ if (!statement.isEmpty()) {
+ runner.update(statement);
+ }
+ }
+ return hsqlDataSource;
+ } catch (IOException | SQLException e) {
+ return fail("Could not create a data source", e);
+ }
}
}
diff --git a/schemacrawler-api/src/test/resources/fk_dupe_name.sql b/schemacrawler-api/src/test/resources/fk_dupe_name.sql
index 60cdd71532..ff88a3118b 100644
--- a/schemacrawler-api/src/test/resources/fk_dupe_name.sql
+++ b/schemacrawler-api/src/test/resources/fk_dupe_name.sql
@@ -1,7 +1,6 @@
CREATE SCHEMA "SCHEMA1" AUTHORIZATION DBA;
-SET SCHEMA "SCHEMA1";
-CREATE TABLE TableA
+CREATE TABLE SCHEMA1.TableA
(
Id INTEGER NOT NULL,
A VARCHAR(20) NOT NULL,
@@ -9,7 +8,7 @@ CREATE TABLE TableA
)
;
-CREATE TABLE TableB
+CREATE TABLE SCHEMA1.TableB
(
Id INTEGER NOT NULL,
B VARCHAR(20) NOT NULL,
@@ -18,9 +17,8 @@ CREATE TABLE TableB
;
CREATE SCHEMA "SCHEMA2" AUTHORIZATION DBA;
-SET SCHEMA "SCHEMA2";
-CREATE TABLE TableA
+CREATE TABLE SCHEMA2.TableA
(
Id INTEGER NOT NULL,
A VARCHAR(20) NOT NULL,
@@ -28,7 +26,7 @@ CREATE TABLE TableA
)
;
-CREATE TABLE TableB
+CREATE TABLE SCHEMA2.TableB
(
Id INTEGER NOT NULL,
B VARCHAR(20) NOT NULL,
diff --git a/schemacrawler-diagram/src/test/java/schemacrawler/integration/test/DiagramRendererOptionsAdditionalSchemasTest.java b/schemacrawler-diagram/src/test/java/schemacrawler/integration/test/DiagramRendererOptionsAdditionalSchemasTest.java
index dda0a4a277..7ec73bbd37 100644
--- a/schemacrawler-diagram/src/test/java/schemacrawler/integration/test/DiagramRendererOptionsAdditionalSchemasTest.java
+++ b/schemacrawler-diagram/src/test/java/schemacrawler/integration/test/DiagramRendererOptionsAdditionalSchemasTest.java
@@ -38,13 +38,10 @@
import static schemacrawler.test.utility.ExecutableTestUtility.hasSameContentAndTypeAs;
import static schemacrawler.test.utility.FileHasContent.classpathResource;
import static schemacrawler.test.utility.FileHasContent.outputOf;
-
import java.nio.file.Path;
-
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
-
import schemacrawler.inclusionrule.RegularExpressionExclusionRule;
import schemacrawler.schemacrawler.FilterOptions;
import schemacrawler.schemacrawler.FilterOptionsBuilder;
@@ -68,7 +65,7 @@
import us.fatehi.utility.datasource.DatabaseConnectionSource;
@ResolveTestContext
-@WithTestDatabase(script = "table-chain.sql")
+@WithTestDatabase(script = "/table-chain.sql")
public class DiagramRendererOptionsAdditionalSchemasTest {
private static final String ADDITIONAL_DIAGRAM_OPTIONS_OUTPUT =
diff --git a/schemacrawler-parent/pom.xml b/schemacrawler-parent/pom.xml
index 525188818f..4acbb044b3 100644
--- a/schemacrawler-parent/pom.xml
+++ b/schemacrawler-parent/pom.xml
@@ -198,6 +198,11 @@
2.12.0
test
+
+ commons-dbutils
+ commons-dbutils
+ 1.8.1
+
org.testcontainers
junit-jupiter