diff --git a/sadu-core/src/main/java/de/chojo/sadu/updater/SqlVersion.java b/sadu-core/src/main/java/de/chojo/sadu/updater/SqlVersion.java
index da1f90d7..a3e2ccf4 100644
--- a/sadu-core/src/main/java/de/chojo/sadu/updater/SqlVersion.java
+++ b/sadu-core/src/main/java/de/chojo/sadu/updater/SqlVersion.java
@@ -8,6 +8,9 @@
import org.jetbrains.annotations.NotNull;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
/**
* Class representing a version maintained by the SqlUpdaterBuilder
*
@@ -85,4 +88,19 @@ public int compareTo(@NotNull SqlVersion o) {
}
return Integer.compare(patch, o.patch);
}
+
+ public static SqlVersion load() throws IOException {
+ return load(SqlVersion.class.getClassLoader());
+ }
+
+ public static SqlVersion load(ClassLoader classLoader) throws IOException {
+ var version = "";
+ try (var versionFile = classLoader.getResourceAsStream("database/version")) {
+ version = new String(versionFile.readAllBytes(), StandardCharsets.UTF_8).trim();
+ }
+
+ var ver = version.split("\\.");
+ return new SqlVersion(Integer.parseInt(ver[0]), Integer.parseInt(ver[1]));
+
+ }
}
diff --git a/sadu-core/src/main/java/de/chojo/sadu/updater/UpdaterBuilder.java b/sadu-core/src/main/java/de/chojo/sadu/updater/UpdaterBuilder.java
index 92f1abc5..73652d29 100644
--- a/sadu-core/src/main/java/de/chojo/sadu/updater/UpdaterBuilder.java
+++ b/sadu-core/src/main/java/de/chojo/sadu/updater/UpdaterBuilder.java
@@ -13,6 +13,21 @@
@ApiStatus.Internal
public interface UpdaterBuilder, S extends UpdaterBuilder> {
- void setSource(DataSource source);
- void setVersion(SqlVersion version);
+ /**
+ * Set the datasource that should be used
+ * @param source source
+ */
+ S setSource(DataSource source);
+
+ /**
+ * Set the current db version that is expected
+ * @param version version
+ */
+ S setVersion(SqlVersion version);
+
+ /**
+ * Set the Classloader that should be used to load resourced.
+ * @param classLoader classloader
+ */
+ S withClassLoader(ClassLoader classLoader);
}
diff --git a/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdater.java b/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdater.java
index 513d9df5..cd8cff4b 100644
--- a/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdater.java
+++ b/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdater.java
@@ -28,8 +28,8 @@ public class PostgreSqlUpdater extends SqlUpdater type, String[] schemas, Map> preUpdateHook, Map> postUpdateHook) {
- super(source, config, versionTable, replacements, version, type, preUpdateHook, postUpdateHook);
+ protected PostgreSqlUpdater(DataSource source, QueryBuilderConfig config, String versionTable, QueryReplacement[] replacements, SqlVersion version, Database type, String[] schemas, Map> preUpdateHook, Map> postUpdateHook, ClassLoader classLoader) {
+ super(source, config, versionTable, replacements, version, type, preUpdateHook, postUpdateHook, classLoader);
this.schemas = schemas;
}
diff --git a/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdaterBuilder.java b/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdaterBuilder.java
index c0869115..816be7d9 100644
--- a/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdaterBuilder.java
+++ b/sadu-postgresql/src/main/java/de/chojo/sadu/update/PostgreSqlUpdaterBuilder.java
@@ -39,7 +39,7 @@ public PostgreSqlUpdaterBuilder setSchemas(String... schemas) {
@Override
public void execute() throws SQLException, IOException {
- var updater = new PostgreSqlUpdater(source, config, versionTable, replacements, version, type, schemas, preUpdateHook, postUpdateHook);
+ var updater = new PostgreSqlUpdater(source, config, versionTable, replacements, version, type, schemas, preUpdateHook, postUpdateHook, classLoader);
updater.init();
}
}
diff --git a/sadu-updater/src/main/java/de/chojo/sadu/updater/BaseSqlUpdaterBuilder.java b/sadu-updater/src/main/java/de/chojo/sadu/updater/BaseSqlUpdaterBuilder.java
index d2749ba1..74f284c9 100644
--- a/sadu-updater/src/main/java/de/chojo/sadu/updater/BaseSqlUpdaterBuilder.java
+++ b/sadu-updater/src/main/java/de/chojo/sadu/updater/BaseSqlUpdaterBuilder.java
@@ -34,17 +34,20 @@ public class BaseSqlUpdaterBuilder, S extends BaseSqlUpd
protected String versionTable = "version";
protected QueryReplacement[] replacements = new QueryReplacement[0];
protected QueryBuilderConfig config = QueryBuilderConfig.builder().throwExceptions().build();
+ protected ClassLoader classLoader = getClass().getClassLoader();
public BaseSqlUpdaterBuilder(Database type) {
this.type = type;
}
- public void setSource(DataSource source) {
+ public S setSource(DataSource source) {
this.source = source;
+ return self();
}
- public void setVersion(SqlVersion version) {
+ public S setVersion(SqlVersion version) {
this.version = version;
+ return self();
}
/**
@@ -96,6 +99,13 @@ public S postUpdateHook(SqlVersion version, Consumer consumer) {
return self();
}
+
+ @Override
+ public S withClassLoader(ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ return self();
+ }
+
/**
* Build the updater and start the update process.
*
@@ -103,7 +113,8 @@ public S postUpdateHook(SqlVersion version, Consumer consumer) {
* @throws IOException If the scripts can't be read.
*/
public void execute() throws SQLException, IOException {
- var sqlUpdater = new SqlUpdater<>(source, config, versionTable, replacements, version, type, preUpdateHook, postUpdateHook);
+ if (version == null) version = SqlVersion.load(classLoader);
+ var sqlUpdater = new SqlUpdater<>(source, config, versionTable, replacements, version, type, preUpdateHook, postUpdateHook, classLoader);
sqlUpdater.init();
}
diff --git a/sadu-updater/src/main/java/de/chojo/sadu/updater/SqlUpdater.java b/sadu-updater/src/main/java/de/chojo/sadu/updater/SqlUpdater.java
index 53a67fd5..d7abed91 100644
--- a/sadu-updater/src/main/java/de/chojo/sadu/updater/SqlUpdater.java
+++ b/sadu-updater/src/main/java/de/chojo/sadu/updater/SqlUpdater.java
@@ -109,8 +109,9 @@ public class SqlUpdater, U extends BaseSqlUpdaterBuilder
private final String versionTable;
private final QueryReplacement[] replacements;
private final Database type;
+ private final ClassLoader classLoader;
- protected SqlUpdater(DataSource source, QueryBuilderConfig config, String versionTable, QueryReplacement[] replacements, SqlVersion version, Database type, Map> preUpdateHook, Map> postUpdateHook) {
+ protected SqlUpdater(DataSource source, QueryBuilderConfig config, String versionTable, QueryReplacement[] replacements, SqlVersion version, Database type, Map> preUpdateHook, Map> postUpdateHook, ClassLoader classLoader) {
super(source, config);
this.source = source;
this.versionTable = versionTable;
@@ -119,6 +120,7 @@ protected SqlUpdater(DataSource source, QueryBuilderConfig config, String versio
this.version = version;
this.preUpdateHook = preUpdateHook;
this.postUpdateHook = postUpdateHook;
+ this.classLoader = classLoader;
}
/**
@@ -134,13 +136,7 @@ protected SqlUpdater(DataSource source, QueryBuilderConfig config, String versio
*/
@CheckReturnValue
public static , U extends UpdaterBuilder> U builder(DataSource dataSource, Database type) throws IOException {
- var version = "";
- try (var versionFile = SqlUpdater.class.getClassLoader().getResourceAsStream("database/version")) {
- version = new String(versionFile.readAllBytes(), StandardCharsets.UTF_8).trim();
- }
-
- var ver = version.split("\\.");
- return builder(dataSource, new SqlVersion(Integer.parseInt(ver[0]), Integer.parseInt(ver[1])), type);
+ return (U) type.newSqlUpdaterBuilder().setSource(dataSource);
}
/**
@@ -151,7 +147,9 @@ protected SqlUpdater(DataSource source, QueryBuilderConfig config, String versio
* @param type the sql type of the database
* @param type of the database defined by the {@link Database}
* @return builder instance
+ * @deprecated Use {{@link #builder(DataSource, Database)}} and use {@link UpdaterBuilder#setVersion(SqlVersion)}.
*/
+ @Deprecated(forRemoval = true)
public static , U extends UpdaterBuilder> U builder(DataSource dataSource, SqlVersion version, Database type) {
var builder = type.newSqlUpdaterBuilder();
builder.setSource(dataSource);
@@ -318,8 +316,7 @@ private List getPatchesFrom(int major, int patch) throws IOException {
}
private boolean patchExists(int major, int patch) {
- return getClass().getClassLoader()
- .getResource("database/" + type.name() + "/" + major + "/patch_" + patch + ".sql") != null;
+ return classLoader.getResource("database/" + type.name() + "/" + major + "/patch_" + patch + ".sql") != null;
}
private String loadPatch(int major, int patch) throws IOException {
@@ -328,7 +325,7 @@ private String loadPatch(int major, int patch) throws IOException {
private String loadFromResource(Object... path) throws IOException {
var patch = Arrays.stream(path).map(Object::toString).collect(Collectors.joining("/"));
- try (var patchFile = getClass().getClassLoader().getResourceAsStream("database/" + type.name() + "/" + patch)) {
+ try (var patchFile = classLoader.getResourceAsStream("database/" + type.name() + "/" + patch)) {
log.info("Loading resource {}", "database/" + type.name() + "/" + patch);
return new String(patchFile.readAllBytes(), StandardCharsets.UTF_8);
}