Skip to content

Commit

Permalink
Use Apache Commons instead of Spring to reduce dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
sualeh committed Jun 15, 2024
1 parent b2f06e7 commit 5b6bfa4
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,28 @@

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;
import org.junit.jupiter.api.extension.ExtensionContext;
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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}
}
10 changes: 4 additions & 6 deletions schemacrawler-api/src/test/resources/fk_dupe_name.sql
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
CREATE SCHEMA "SCHEMA1" AUTHORIZATION DBA;
SET SCHEMA "SCHEMA1";

CREATE TABLE TableA
CREATE TABLE SCHEMA1.TableA
(
Id INTEGER NOT NULL,
A VARCHAR(20) NOT NULL,
CONSTRAINT PK_TableA PRIMARY KEY (Id)
)
;

CREATE TABLE TableB
CREATE TABLE SCHEMA1.TableB
(
Id INTEGER NOT NULL,
B VARCHAR(20) NOT NULL,
Expand All @@ -18,17 +17,16 @@ 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,
CONSTRAINT PK_TableA PRIMARY KEY (Id)
)
;

CREATE TABLE TableB
CREATE TABLE SCHEMA2.TableB
(
Id INTEGER NOT NULL,
B VARCHAR(20) NOT NULL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 =
Expand Down
5 changes: 5 additions & 0 deletions schemacrawler-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@
<version>2.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
Expand Down

0 comments on commit 5b6bfa4

Please sign in to comment.