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