From 99b49083ecf56fd4d1b236179d0facfaf24c1c46 Mon Sep 17 00:00:00 2001 From: wea_ondara Date: Wed, 23 Nov 2022 17:13:39 +0100 Subject: [PATCH] added SqlPlatform class with getters to platform specific implementations --- core/pom.xml | 1 - core/src/main/java/jef/model/DbContext.java | 2 +- .../main/java/jef/model/DbContextOptions.java | 2 +- .../main/java/jef/platform/SqlPlatform.java | 14 ++++++++++ .../jef/{ => platform/base}/Database.java | 3 ++- .../{ => platform/base}/DatabaseOptions.java | 2 +- .../base/MigrationOperationTranslator.java | 11 ++++++++ .../base}/SqlTypeMapper.java | 2 +- .../base}/migration/MigrationApplier.java | 8 +++--- .../java/jef/platform/nul/NullDatabase.java | 14 ++++++++++ .../java/jef/platform/nul/NullPlatform.java | 26 +++++++++++++++++++ .../java/jef/platform/nul/NullTypeMapper.java | 12 +++++++++ 12 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 core/src/main/java/jef/platform/SqlPlatform.java rename core/src/main/java/jef/{ => platform/base}/Database.java (91%) rename core/src/main/java/jef/{ => platform/base}/DatabaseOptions.java (98%) create mode 100644 core/src/main/java/jef/platform/base/MigrationOperationTranslator.java rename core/src/main/java/jef/{model => platform/base}/SqlTypeMapper.java (95%) rename core/src/main/java/jef/{mysql => platform/base}/migration/MigrationApplier.java (94%) create mode 100644 core/src/main/java/jef/platform/nul/NullDatabase.java create mode 100644 core/src/main/java/jef/platform/nul/NullPlatform.java create mode 100644 core/src/main/java/jef/platform/nul/NullTypeMapper.java diff --git a/core/pom.xml b/core/pom.xml index 1eed43f..a356273 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -16,5 +16,4 @@ 17 UTF-8 - \ No newline at end of file diff --git a/core/src/main/java/jef/model/DbContext.java b/core/src/main/java/jef/model/DbContext.java index 86e1f8e..267670d 100644 --- a/core/src/main/java/jef/model/DbContext.java +++ b/core/src/main/java/jef/model/DbContext.java @@ -1,9 +1,9 @@ package jef.model; -import jef.Database; import jef.DbSet; import jef.model.annotations.Clazz; import jef.model.constraints.ForeignKeyConstraint; +import jef.platform.base.Database; import jef.serializable.SerializableObject; import lombok.Getter; diff --git a/core/src/main/java/jef/model/DbContextOptions.java b/core/src/main/java/jef/model/DbContextOptions.java index 3afe0f2..60e59e3 100644 --- a/core/src/main/java/jef/model/DbContextOptions.java +++ b/core/src/main/java/jef/model/DbContextOptions.java @@ -1,6 +1,6 @@ package jef.model; -import jef.DatabaseOptions; +import jef.platform.base.DatabaseOptions; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/core/src/main/java/jef/platform/SqlPlatform.java b/core/src/main/java/jef/platform/SqlPlatform.java new file mode 100644 index 0000000..4120553 --- /dev/null +++ b/core/src/main/java/jef/platform/SqlPlatform.java @@ -0,0 +1,14 @@ +package jef.platform; + +import jef.platform.base.SqlTypeMapper; +import jef.platform.base.DatabaseOptions; +import jef.platform.base.migration.MigrationApplier; +import jef.platform.base.MigrationOperationTranslator; + +import java.sql.Connection; + +public interface SqlPlatform { + MigrationOperationTranslator getTranslator(); + SqlTypeMapper getTypeMapper(); + MigrationApplier getMigrationApplier(Connection connection, DatabaseOptions options); +} diff --git a/core/src/main/java/jef/Database.java b/core/src/main/java/jef/platform/base/Database.java similarity index 91% rename from core/src/main/java/jef/Database.java rename to core/src/main/java/jef/platform/base/Database.java index 8bebe6a..9208fe1 100644 --- a/core/src/main/java/jef/Database.java +++ b/core/src/main/java/jef/platform/base/Database.java @@ -1,5 +1,6 @@ -package jef; +package jef.platform.base; +import jef.MigrationException; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/core/src/main/java/jef/DatabaseOptions.java b/core/src/main/java/jef/platform/base/DatabaseOptions.java similarity index 98% rename from core/src/main/java/jef/DatabaseOptions.java rename to core/src/main/java/jef/platform/base/DatabaseOptions.java index 868afc8..20c989a 100644 --- a/core/src/main/java/jef/DatabaseOptions.java +++ b/core/src/main/java/jef/platform/base/DatabaseOptions.java @@ -1,4 +1,4 @@ -package jef; +package jef.platform.base; import lombok.Getter; diff --git a/core/src/main/java/jef/platform/base/MigrationOperationTranslator.java b/core/src/main/java/jef/platform/base/MigrationOperationTranslator.java new file mode 100644 index 0000000..3af8400 --- /dev/null +++ b/core/src/main/java/jef/platform/base/MigrationOperationTranslator.java @@ -0,0 +1,11 @@ +package jef.platform.base; + +import jef.model.migration.operation.MigrationOperation; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public interface MigrationOperationTranslator { + PreparedStatement translate(Connection connection, MigrationOperation op) throws SQLException; +} diff --git a/core/src/main/java/jef/model/SqlTypeMapper.java b/core/src/main/java/jef/platform/base/SqlTypeMapper.java similarity index 95% rename from core/src/main/java/jef/model/SqlTypeMapper.java rename to core/src/main/java/jef/platform/base/SqlTypeMapper.java index f9449f7..5378e24 100644 --- a/core/src/main/java/jef/model/SqlTypeMapper.java +++ b/core/src/main/java/jef/platform/base/SqlTypeMapper.java @@ -1,4 +1,4 @@ -package jef.model; +package jef.platform.base; import java.util.Optional; diff --git a/core/src/main/java/jef/mysql/migration/MigrationApplier.java b/core/src/main/java/jef/platform/base/migration/MigrationApplier.java similarity index 94% rename from core/src/main/java/jef/mysql/migration/MigrationApplier.java rename to core/src/main/java/jef/platform/base/migration/MigrationApplier.java index 0dc1f0f..da4f7a8 100644 --- a/core/src/main/java/jef/mysql/migration/MigrationApplier.java +++ b/core/src/main/java/jef/platform/base/migration/MigrationApplier.java @@ -1,10 +1,11 @@ -package jef.mysql.migration; +package jef.platform.base.migration; -import jef.DatabaseOptions; import jef.MigrationException; import jef.model.migration.Migration; import jef.model.migration.MigrationBuilder; import jef.model.migration.operation.MigrationOperation; +import jef.platform.SqlPlatform; +import jef.platform.base.DatabaseOptions; import lombok.AllArgsConstructor; import lombok.Getter; @@ -21,6 +22,7 @@ import java.util.stream.Collectors; public abstract class MigrationApplier { protected final Connection connection; protected final DatabaseOptions options; + protected final SqlPlatform sqlPlatform; public void migrate() throws MigrationException { var migrations = findMigrations(options.getMigrationsPackage()); //TODO find all migrations, support multiple db contexts @@ -47,7 +49,7 @@ public abstract class MigrationApplier { connection.setAutoCommit(false); try { for (MigrationOperation op : operations) { - var stmt = MysqlMigrationOperationTranslator.translate(connection, op); + var stmt = sqlPlatform.getTranslator().translate(connection, op); try { stmt.execute(); } catch (SQLException e) { diff --git a/core/src/main/java/jef/platform/nul/NullDatabase.java b/core/src/main/java/jef/platform/nul/NullDatabase.java new file mode 100644 index 0000000..9cd8620 --- /dev/null +++ b/core/src/main/java/jef/platform/nul/NullDatabase.java @@ -0,0 +1,14 @@ +package jef.platform.nul; + +import jef.MigrationException; +import jef.platform.base.Database; + +public class NullDatabase extends Database { + public NullDatabase() { + super(null, null); + } + + @Override + public void migrate() throws MigrationException { + } +} diff --git a/core/src/main/java/jef/platform/nul/NullPlatform.java b/core/src/main/java/jef/platform/nul/NullPlatform.java new file mode 100644 index 0000000..8437e75 --- /dev/null +++ b/core/src/main/java/jef/platform/nul/NullPlatform.java @@ -0,0 +1,26 @@ +package jef.platform.nul; + +import jef.platform.SqlPlatform; +import jef.platform.base.DatabaseOptions; +import jef.platform.base.MigrationOperationTranslator; +import jef.platform.base.SqlTypeMapper; +import jef.platform.base.migration.MigrationApplier; + +import java.sql.Connection; + +public class NullPlatform implements SqlPlatform { + @Override + public MigrationOperationTranslator getTranslator() { + return null; + } + + @Override + public SqlTypeMapper getTypeMapper() { + return new NullTypeMapper(); + } + + @Override + public MigrationApplier getMigrationApplier(Connection connection, DatabaseOptions options) { + return null; + } +} diff --git a/core/src/main/java/jef/platform/nul/NullTypeMapper.java b/core/src/main/java/jef/platform/nul/NullTypeMapper.java new file mode 100644 index 0000000..c481527 --- /dev/null +++ b/core/src/main/java/jef/platform/nul/NullTypeMapper.java @@ -0,0 +1,12 @@ +package jef.platform.nul; + +import jef.platform.base.SqlTypeMapper; + +import java.util.Optional; + +public class NullTypeMapper extends SqlTypeMapper { + @Override + public Optional map(String typeName) { + return Optional.ofNullable(typeName); + } +}