#246 - ENH: Add ebean.ddl.initsql=.... to support executing a sql script prior to running the create all DDL - was - When the scripts generates the evolution, it should generate the create schema too.

This commit is contained in:
Robin Bygrave
2016-01-07 13:12:43 +13:00
parent c48008c4b2
commit c7300a1707
2 changed files with 30 additions and 5 deletions
@@ -214,6 +214,8 @@ public class ServerConfig {
private boolean ddlCreateOnly;
private String ddlInitSql;
private String ddlSeedSql;
private boolean useJtaTransactionManager;
@@ -1594,6 +1596,20 @@ public class ServerConfig {
this.ddlSeedSql = ddlSeedSql;
}
/**
* Return a SQL script to execute before the "create all" DDL has been run.
*/
public String getDdlInitSql() {
return ddlInitSql;
}
/**
* Set a SQL script to execute before the "create all" DDL has been run.
*/
public void setDdlInitSql(String ddlInitSql) {
this.ddlInitSql = ddlInitSql;
}
/**
* Return true if the DDL should be generated.
*/
@@ -2285,6 +2301,7 @@ public class ServerConfig {
ddlGenerate = p.getBoolean("ddl.generate", ddlGenerate);
ddlRun = p.getBoolean("ddl.run", ddlRun);
ddlCreateOnly = p.getBoolean("ddl.createOnly", ddlCreateOnly);
ddlInitSql = p.get("ddl.initSql", ddlInitSql);
ddlSeedSql = p.get("ddl.seedSql", ddlSeedSql);
classes = getClasses(p);
@@ -67,6 +67,7 @@ public class DdlGenerator implements SpiEbeanPlugin {
if (runDdl) {
try {
runInitSql();
runDropSql();
runCreateSql();
runSeedSql();
@@ -94,13 +95,20 @@ public class DdlGenerator implements SpiEbeanPlugin {
runScript(false, createContent, getCreateFileName());
}
protected void runSeedSql() throws IOException {
protected void runInitSql() throws IOException {
runResourceScript(server.getServerConfig().getDdlInitSql());
}
String seedSql = server.getServerConfig().getDdlSeedSql();
if (seedSql != null) {
InputStream is = getClassLoader().getResourceAsStream(seedSql);
protected void runSeedSql() throws IOException {
runResourceScript(server.getServerConfig().getDdlSeedSql());
}
protected void runResourceScript(String sqlScript) throws IOException {
if (sqlScript != null) {
InputStream is = getClassLoader().getResourceAsStream(sqlScript);
if (is != null) {
DdlRunner runner = new DdlRunner(false, seedSql);
DdlRunner runner = new DdlRunner(false, sqlScript);
String content = readContent(new InputStreamReader(is));
runner.runAll(content, server);
}