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); + } +}