From c7300a1707dc02bbe4e5117c4e8e5f9ab74b5cc7 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 7 Jan 2016 13:12:43 +1300 Subject: [PATCH] #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. --- .../com/avaje/ebean/config/ServerConfig.java | 17 +++++++++++++++++ .../avaje/ebean/dbmigration/DdlGenerator.java | 18 +++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/avaje/ebean/config/ServerConfig.java b/src/main/java/com/avaje/ebean/config/ServerConfig.java index 39f2c2c04..a4e2e1168 100644 --- a/src/main/java/com/avaje/ebean/config/ServerConfig.java +++ b/src/main/java/com/avaje/ebean/config/ServerConfig.java @@ -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); diff --git a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java index ee4c7432c..5bef9300e 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java @@ -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); }