diff --git a/mysql/pom.xml b/mysql/pom.xml
index c9bf3ca..57bf1bb 100644
--- a/mysql/pom.xml
+++ b/mysql/pom.xml
@@ -10,14 +10,6 @@
4.0.0
mysql
-
-
- jef
- core
- 0.1
- compile
-
-
17
@@ -25,4 +17,17 @@
UTF-8
+
+
+ jef
+ core
+ ${project.parent.version}
+
+
+ jef
+ migration-creator
+ ${project.parent.version}
+ test
+
+
\ No newline at end of file
diff --git a/mysql/src/main/java/jef/mysql/MysqlDatabase.java b/mysql/src/main/java/jef/platform/mysql/MysqlDatabase.java
similarity index 50%
rename from mysql/src/main/java/jef/mysql/MysqlDatabase.java
rename to mysql/src/main/java/jef/platform/mysql/MysqlDatabase.java
index 9e08991..1f826ee 100644
--- a/mysql/src/main/java/jef/mysql/MysqlDatabase.java
+++ b/mysql/src/main/java/jef/platform/mysql/MysqlDatabase.java
@@ -1,19 +1,20 @@
-package jef.mysql;
+package jef.platform.mysql;
-import jef.Database;
-import jef.DatabaseOptions;
import jef.MigrationException;
-import jef.mysql.migration.MysqlMigrationApplier;
+import jef.platform.base.Database;
+import jef.platform.base.DatabaseOptions;
import java.sql.Connection;
public class MysqlDatabase extends Database {
- public MysqlDatabase(Connection connection, DatabaseOptions options) {
+ private final MysqlPlatform platform;
+ public MysqlDatabase(Connection connection, DatabaseOptions options, MysqlPlatform platform) {
super(connection, options);
+ this.platform = platform;
}
@Override
public void migrate() throws MigrationException {
- new MysqlMigrationApplier(connection, options).migrate();
+ platform.getMigrationApplier(connection, options).migrate();
}
}
diff --git a/mysql/src/main/java/jef/platform/mysql/MysqlPlatform.java b/mysql/src/main/java/jef/platform/mysql/MysqlPlatform.java
new file mode 100644
index 0000000..90ccbfb
--- /dev/null
+++ b/mysql/src/main/java/jef/platform/mysql/MysqlPlatform.java
@@ -0,0 +1,27 @@
+package jef.platform.mysql;
+
+import jef.platform.SqlPlatform;
+import jef.platform.base.DatabaseOptions;
+import jef.platform.base.SqlTypeMapper;
+import jef.platform.base.migration.MigrationApplier;
+import jef.platform.mysql.migration.MysqlMigrationApplier;
+import jef.platform.mysql.migration.MysqlMigrationOperationTranslator;
+
+import java.sql.Connection;
+
+public class MysqlPlatform implements SqlPlatform {
+ @Override
+ public MysqlMigrationOperationTranslator getTranslator() {
+ return new MysqlMigrationOperationTranslator();
+ }
+
+ @Override
+ public SqlTypeMapper getTypeMapper() {
+ return new MysqlTypeMapper();
+ }
+
+ @Override
+ public MigrationApplier getMigrationApplier(Connection connection, DatabaseOptions options) {
+ return new MysqlMigrationApplier(connection, options, this);
+ }
+}
diff --git a/mysql/src/main/java/jef/platform/mysql/MysqlTypeMapper.java b/mysql/src/main/java/jef/platform/mysql/MysqlTypeMapper.java
new file mode 100644
index 0000000..1342ec9
--- /dev/null
+++ b/mysql/src/main/java/jef/platform/mysql/MysqlTypeMapper.java
@@ -0,0 +1,7 @@
+package jef.platform.mysql;
+
+import jef.platform.base.SqlTypeMapper;
+
+public class MysqlTypeMapper extends SqlTypeMapper {
+
+}
diff --git a/mysql/src/main/java/jef/mysql/migration/MysqlMigrationApplier.java b/mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationApplier.java
similarity index 88%
rename from mysql/src/main/java/jef/mysql/migration/MysqlMigrationApplier.java
rename to mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationApplier.java
index 61ed3cd..9a546ef 100644
--- a/mysql/src/main/java/jef/mysql/migration/MysqlMigrationApplier.java
+++ b/mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationApplier.java
@@ -1,11 +1,13 @@
-package jef.mysql.migration;
+package jef.platform.mysql.migration;
-import jef.DatabaseOptions;
+import jef.platform.base.DatabaseOptions;
import jef.model.migration.Migration;
import jef.model.migration.operation.AddFieldOperation;
import jef.model.migration.operation.AddTableOperation;
import jef.model.migration.operation.AddUniqueKeyOperation;
import jef.model.migration.operation.MigrationOperation;
+import jef.platform.SqlPlatform;
+import jef.platform.base.migration.MigrationApplier;
import java.sql.Connection;
import java.sql.SQLException;
@@ -13,8 +15,8 @@ import java.util.ArrayList;
import java.util.List;
public class MysqlMigrationApplier extends MigrationApplier {
- public MysqlMigrationApplier(Connection connection, DatabaseOptions options) {
- super(connection, options);
+ public MysqlMigrationApplier(Connection connection, DatabaseOptions options, SqlPlatform sqlPlatform) {
+ super(connection, options, sqlPlatform);
}
@Override
@@ -50,7 +52,7 @@ public class MysqlMigrationApplier extends MigrationApplier {
new AddUniqueKeyOperation.Builder("U_" + table + "_name", table, List.of("name"))
);
for (MigrationOperation.Builder extends MigrationOperation> e : ops) {
- try (var stmt = MysqlMigrationOperationTranslator.translate(connection, e.build())) {
+ try (var stmt = sqlPlatform.getTranslator().translate(connection, e.build())) {
stmt.executeUpdate();
}
}
diff --git a/mysql/src/main/java/jef/mysql/migration/MysqlMigrationOperationTranslator.java b/mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationOperationTranslator.java
similarity index 95%
rename from mysql/src/main/java/jef/mysql/migration/MysqlMigrationOperationTranslator.java
rename to mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationOperationTranslator.java
index cb5093d..b9043e6 100644
--- a/mysql/src/main/java/jef/mysql/migration/MysqlMigrationOperationTranslator.java
+++ b/mysql/src/main/java/jef/platform/mysql/migration/MysqlMigrationOperationTranslator.java
@@ -1,4 +1,4 @@
-package jef.mysql.migration;
+package jef.platform.mysql.migration;
import jef.model.migration.operation.AddFieldOperation;
import jef.model.migration.operation.AddForeignKeyOperation;
@@ -14,6 +14,7 @@ import jef.model.migration.operation.MigrationOperation;
import jef.model.migration.operation.RenameFieldOperation;
import jef.model.migration.operation.RenameTableOperation;
import jef.model.migration.operation.UpdateFieldOperation;
+import jef.platform.base.MigrationOperationTranslator;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -24,7 +25,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
-public class MysqlMigrationOperationTranslator {
+public class MysqlMigrationOperationTranslator implements MigrationOperationTranslator {
private static final Map, Mapper> translators;
static {
@@ -45,10 +46,14 @@ public class MysqlMigrationOperationTranslator {
translators = Collections.unmodifiableMap(map);
}
- public static PreparedStatement translate(Connection connection, MigrationOperation operation) throws SQLException {
+ public static PreparedStatement translateS(Connection connection, MigrationOperation operation) throws SQLException {
return Optional.ofNullable(translators.get(operation.getClass())).orElseThrow().apply(connection, operation);
}
+ public PreparedStatement translate(Connection connection, MigrationOperation operation) throws SQLException {
+ return translateS(connection, operation);
+ }
+
private static PreparedStatement translateAddFieldOperation(Connection connection, MigrationOperation operation) throws SQLException {
AddFieldOperation op = (AddFieldOperation) operation;
return connection.prepareStatement("ALTER TABLE `" + op.getTable() + "`"
diff --git a/core/src/test/java/jef/mysql/migration/MysqlMigrationTest.java b/mysql/src/test/java/jef/platform/mysql/migration/MysqlMigrationTest.java
similarity index 75%
rename from core/src/test/java/jef/mysql/migration/MysqlMigrationTest.java
rename to mysql/src/test/java/jef/platform/mysql/migration/MysqlMigrationTest.java
index 42f7f3f..36fec12 100644
--- a/core/src/test/java/jef/mysql/migration/MysqlMigrationTest.java
+++ b/mysql/src/test/java/jef/platform/mysql/migration/MysqlMigrationTest.java
@@ -1,13 +1,16 @@
-package jef.mysql.migration;
+package jef.platform.mysql.migration;
-import jef.Database;
-import jef.DatabaseOptions;
import jef.DbSet;
import jef.model.DbContext;
import jef.model.DbContextOptions;
+import jef.model.ModelBuilder;
import jef.model.annotations.Clazz;
import jef.model.annotations.ForeignKey;
-import jef.mysql.MysqlDatabase;
+import jef.model.migration.creator.MigrationCreator;
+import jef.platform.base.Database;
+import jef.platform.base.DatabaseOptions;
+import jef.platform.mysql.MysqlDatabase;
+import jef.platform.mysql.MysqlPlatform;
import jef.serializable.SerializableObject;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
@@ -18,6 +21,10 @@ import lombok.ToString;
import org.junit.jupiter.api.Test;
import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.Arrays;
@@ -42,7 +49,8 @@ public class MysqlMigrationTest {
var dboptions = new DatabaseOptions("jdbc:mysql://localhost/test", "test", "password", getClass().getSimpleName());
var ctxoptions = new DbContextOptions(dboptions);
var conn = DriverManager.getConnection(dboptions.getUrl(), dboptions.getUser(), dboptions.getPassword());
- var db = new MysqlDatabase(conn, dboptions);
+ var sqlPlatform = new MysqlPlatform();
+ var db = new MysqlDatabase(conn, dboptions, sqlPlatform);
var ctx = new Ctx(db, ctxoptions);
ctx.getDatabase().migrate();
var result = ctx.getCompanies().filter(e -> e.getName().equals("foobar")).toString();
@@ -65,18 +73,18 @@ public class MysqlMigrationTest {
private void generateInitialMigration() {
try {
- var javaHome = System.getProperty("java.home");
- var isWindows = System.getProperty("os.name").toLowerCase(Locale.ROOT).equals("win");
- var java = new File(javaHome, "bin/java" + (isWindows ? ".exe" : ""));
- var process = new ProcessBuilder()
- .command(java.getAbsolutePath(),
- "-cp", "target/classes", "jef.main.Main",
- "migration", "add", "--cp", "target/test-classes", "-c", "MysqlMigrationTest$Ctx", "-o", GENERATE_MIGRATIONS_FOLDER_SRC + "MysqlMigrationTest", "Initial")
- .inheritIO()
- .start();
- process.waitFor();
- var exitCode = process.exitValue();
- assertEquals(0, exitCode, "Initial migration generation failed");
+ var sqlPlatform = new MysqlPlatform();
+ var from = new ModelBuilder();
+ var to = ModelBuilder.from(Ctx.class);
+ var result = new MigrationCreator(sqlPlatform, from, to, "Initial", "MysqlMigrationTest", null).createMigration();
+
+ var dir = Path.of(GENERATE_MIGRATIONS_FOLDER_SRC, "MysqlMigrationTest").toFile();
+ dir.mkdirs();
+
+ var fileOptions = new OpenOption[]{StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE};
+ Files.writeString(Path.of(dir.toString(), result.getMigrationClassName() + ".java"), result.getMigration(), fileOptions);
+ Files.writeString(Path.of(dir.toString(), result.getMigrationSnapshotClassName() + ".java"), result.getMigrationSnapshot(), fileOptions);
+ Files.writeString(Path.of(dir.toString(), result.getCurrentSnapshotClassName() + ".java"), result.getCurrentSnapshot(), fileOptions);
} catch (AssertionError | RuntimeException e) {
throw e;
} catch (Throwable t) {
@@ -91,7 +99,7 @@ public class MysqlMigrationTest {
var javac = new File(javaHome, "bin/javac" + (isWindows ? ".exe" : ""));
var params = new ArrayList<>(List.of(
javac.getAbsolutePath(),
- "-cp", "target/classes" + File.pathSeparator + "target/test-classes",
+ "-cp", "target/classes" + File.pathSeparator + "target/test-classes" + File.pathSeparator + "../core/target/classes",
"-encoding", "UTF8",
"-g", //debug symbols
"-d", GENERATE_MIGRATIONS_FOLDER_TARGET //target
@@ -118,6 +126,9 @@ public class MysqlMigrationTest {
@Clazz(Employee.class)
private DbSet employees;
+ public Ctx() {
+ }
+
public Ctx(Database database, DbContextOptions options) {
super(database, options);
}