diff --git a/ebean-api/src/main/java/io/ebean/ScriptRunner.java b/ebean-api/src/main/java/io/ebean/ScriptRunner.java
index 15057741e..ff2e9d668 100644
--- a/ebean-api/src/main/java/io/ebean/ScriptRunner.java
+++ b/ebean-api/src/main/java/io/ebean/ScriptRunner.java
@@ -1,6 +1,7 @@
package io.ebean;
import java.net.URL;
+import java.nio.file.Path;
import java.util.Map;
/**
@@ -23,10 +24,10 @@ public interface ScriptRunner {
/**
* Run a script given the resource path (that should start with "/").
*/
- void run(String path);
+ void run(String resourcePath);
/**
- * Run a script given the resource path (that should start with "/") and place holders.
+ * Run a script given the resource path (that should start with "/") and place-holders.
*
*
{@code
*
@@ -38,7 +39,7 @@ public interface ScriptRunner {
*
* }
*/
- void run(String path, Map placeholderMap);
+ void run(String resourcePath, Map placeholderMap);
/**
* Run a DDL or SQL script given the resource.
@@ -46,10 +47,20 @@ public interface ScriptRunner {
void run(URL resource);
/**
- * Run a DDL or SQL script given the resource and place holders.
+ * Run a DDL or SQL script given the resource and place-holders.
*/
void run(URL resource, Map placeholderMap);
+ /**
+ * Run a DDL or SQL script given the file.
+ */
+ void run(Path file);
+
+ /**
+ * Run a DDL or SQL script given the file and place-holders.
+ */
+ void run(Path file, Map placeholderMap);
+
/**
* Run the raw provided DDL or SQL script.
*
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
index fb2fbd0a2..fdb24bd0d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
@@ -8,15 +8,15 @@ import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.util.UrlHelper;
import javax.persistence.PersistenceException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.LineNumberReader;
-import java.io.Reader;
+import java.io.*;
import java.net.URL;
+import java.nio.file.Path;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
+import static java.util.Objects.requireNonNull;
+
final class DScriptRunner implements ScriptRunner {
private static final String NEWLINE = "\n";
@@ -30,8 +30,8 @@ final class DScriptRunner implements ScriptRunner {
}
@Override
- public void run(String path) {
- run(path, null);
+ public void run(String resourcePath) {
+ run(resourcePath, null);
}
@Override
@@ -49,27 +49,42 @@ final class DScriptRunner implements ScriptRunner {
run(resource, null, placeholderMap);
}
+ @Override
+ public void run(Path file) {
+ run(file, null);
+ }
+
+ @Override
+ public void run(Path file, Map placeholderMap) {
+ requireNonNull(file);
+ String scriptName = file.toFile().getName();
+ String content = fileContent(file);
+ runScript(content, scriptName, placeholderMap, false);
+ }
+
private void run(URL resource, String scriptName, Map placeholderMap) {
- if (resource == null) {
- throw new IllegalArgumentException("resource is null?");
- }
+ requireNonNull(resource);
if (scriptName == null) {
scriptName = resource.getFile();
}
-
String content = content(resource);
runScript(content, scriptName, placeholderMap, false);
}
- private String content(URL resource) {
- if (resource == null) {
- throw new IllegalArgumentException("resource is null?");
- }
-
- try (InputStream inputStream = UrlHelper.openNoCache(resource);
- Reader reader = IOUtils.newReader(inputStream)) {
+ private String fileContent(Path file) {
+ try (InputStream inputStream = new FileInputStream(file.toFile());
+ Reader reader = IOUtils.newReader(inputStream)) {
return readContent(reader);
+ } catch (IOException e) {
+ throw new PersistenceException("Failed to read script content", e);
+ }
+ }
+ private String content(URL resource) {
+ requireNonNull(resource);
+ try (InputStream inputStream = UrlHelper.openNoCache(resource);
+ Reader reader = IOUtils.newReader(inputStream)) {
+ return readContent(reader);
} catch (IOException e) {
throw new PersistenceException("Failed to read script content", e);
}
@@ -85,10 +100,9 @@ final class DScriptRunner implements ScriptRunner {
*/
private void runScript(String content, String scriptName, Map placeholderMap, boolean useAutoCommit) {
try {
- if (placeholderMap != null) {
+ if (placeholderMap != null && !placeholderMap.isEmpty()) {
content = ScriptTransform.build(null, placeholderMap).transform(content);
}
-
try (Connection connection = obtainConnection()) {
DdlRunner runner = new DdlRunner(useAutoCommit, scriptName, platformName);
runner.runAll(content, connection);
@@ -110,7 +124,6 @@ final class DScriptRunner implements ScriptRunner {
}
private String readContent(Reader reader) throws IOException {
-
StringBuilder buf = new StringBuilder();
try (LineNumberReader lineReader = new LineNumberReader(reader)) {
String line;
diff --git a/ebean-test/src/test/java/io/ebean/EbeanServer_refresh.java b/ebean-test/src/test/java/io/ebean/EbeanServer_refresh.java
index 86c25de9b..1ff650b7d 100644
--- a/ebean-test/src/test/java/io/ebean/EbeanServer_refresh.java
+++ b/ebean-test/src/test/java/io/ebean/EbeanServer_refresh.java
@@ -6,18 +6,39 @@ import org.tests.model.basic.Order;
import org.tests.model.basic.OrderDetail;
import org.tests.model.basic.ResetBasicData;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.OpenOption;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
-public class EbeanServer_refresh {
+class EbeanServer_refresh {
+
+ private Path createSqlFile() throws IOException {
+ File f = File.createTempFile("test-script", ".sql");
+ Path path = f.toPath();
+ List lines = new ArrayList<>();
+ lines.add("select * from o_customer;");
+ Files.write(path, lines, StandardOpenOption.TRUNCATE_EXISTING);
+ return path;
+ }
@Test
- public void basic() {
+ void script_run_asFile() throws IOException {
+ ResetBasicData.reset();
+ Path path = createSqlFile();
+ DB.script().run(path);
+ DB.script().run(path, Collections.emptyMap());
+ }
+
+ @Test
+ void basic() {
Map map = new HashMap<>();
map.put("tableName", "e_basic");
@@ -47,8 +68,7 @@ public class EbeanServer_refresh {
}
@Test
- public void refresh_when_oneToManyLoaded() {
-
+ void refresh_when_oneToManyLoaded() {
ResetBasicData.reset();
Order order = DB.find(Order.class, 1);
@@ -59,8 +79,7 @@ public class EbeanServer_refresh {
}
@Test
- public void refresh_when_oneToManyVanilla() {
-
+ void refresh_when_oneToManyVanilla() {
ResetBasicData.reset();
Order order = DB.find(Order.class, 1);
@@ -71,8 +90,7 @@ public class EbeanServer_refresh {
}
@Test
- public void refresh_when_oneToManyNull() {
-
+ void refresh_when_oneToManyNull() {
ResetBasicData.reset();
Order order = DB.find(Order.class, 1);
@@ -82,15 +100,11 @@ public class EbeanServer_refresh {
DB.refresh(order);
}
-
-
@Test
- public void refresh_on_details_new() {
-
+ void refresh_on_details_new() {
ResetBasicData.reset();
Order order = DB.find(Order.class, 1);
-
DB.refresh(order); // call refresh BEFORE first access on "getDetail";
assertThat(order.getDetails()).hasSize(3);
@@ -100,13 +114,9 @@ public class EbeanServer_refresh {
DB.save(detail);
try {
-
assertThat(order.getDetails()).hasSize(3);
-
DB.refresh(order);
-
assertThat(order.getDetails()).hasSize(4);
-
} finally {
DB.delete(detail); // restore old state
}
@@ -116,13 +126,9 @@ public class EbeanServer_refresh {
assertThat(order.getDetails()).hasSize(3);
}
-
-
@Test
- public void refresh_on_details_changed() {
-
+ void refresh_on_details_changed() {
ResetBasicData.reset();
-
Order order = DB.find(Order.class, 1);
DB.refresh(order); // call refresh BEFORE first access on "getDetail"
@@ -139,11 +145,8 @@ public class EbeanServer_refresh {
try {
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(5);
-
DB.refresh(order);
-
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(42);
-
} finally {
// restore old value
detail.setOrderQty(5);
@@ -151,8 +154,6 @@ public class EbeanServer_refresh {
}
DB.refresh(order);
-
assertThat(order.getDetails().get(0).getOrderQty()).isEqualTo(5);
-
}
}