From 98fb0524013fecddada3cc3068044943a94d9573 Mon Sep 17 00:00:00 2001 From: Tobias Lindaaker Date: Fri, 8 Jun 2018 14:20:49 +0200 Subject: [PATCH] Allow passing parameters to apoc.cypher.runFile (#813) --- src/main/java/apoc/cypher/Cypher.java | 6 ++++-- src/test/java/apoc/cypher/CypherTest.java | 21 +++++++++++++++++++++ src/test/resources/parameterized.cypher | 3 +++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/parameterized.cypher diff --git a/src/main/java/apoc/cypher/Cypher.java b/src/main/java/apoc/cypher/Cypher.java index 58b1f95dbf..db59c3e8b5 100644 --- a/src/main/java/apoc/cypher/Cypher.java +++ b/src/main/java/apoc/cypher/Cypher.java @@ -64,7 +64,7 @@ public Stream run(@Name("cypher") String statement, @Name("params") M } @Procedure(mode = WRITE) - @Description("apoc.cypher.runFile(file or url,[{statistics:true,timeout:10}]) - runs each statement in the file, all semicolon separated - currently no schema operations") + @Description("apoc.cypher.runFile(file or url,[{statistics:true,timeout:10,parameters:{}}]) - runs each statement in the file, all semicolon separated - currently no schema operations") public Stream runFile(@Name("file") String fileName, @Name(value = "config",defaultValue = "{}") Map config) { return runFiles(singletonList(fileName),config); } @@ -75,8 +75,10 @@ public Stream runFiles(@Name("file") List fileNames, @Name(va boolean addStatistics = Util.toBoolean(config.getOrDefault("statistics",true)); int timeout = Util.toInteger(config.getOrDefault("timeout",10)); List result = new ArrayList<>(); + @SuppressWarnings( "unchecked" ) + Map parameters = (Map)config.getOrDefault("parameters",Collections.emptyMap()); for (String f : fileNames) { - List rowResults = runManyStatements(readerForFile(f), Collections.emptyMap(), false, addStatistics, timeout).collect(Collectors.toList()); + List rowResults = runManyStatements(readerForFile(f), parameters, false, addStatistics, timeout).collect(Collectors.toList()); result.addAll(rowResults); } return result.stream(); diff --git a/src/test/java/apoc/cypher/CypherTest.java b/src/test/java/apoc/cypher/CypherTest.java index 198b5fa8fa..56e4fdd1b6 100644 --- a/src/test/java/apoc/cypher/CypherTest.java +++ b/src/test/java/apoc/cypher/CypherTest.java @@ -20,6 +20,7 @@ import static apoc.util.TestUtil.testCall; import static apoc.util.TestUtil.testResult; import static java.util.Collections.singletonMap; +import static org.hamcrest.Matchers.hasEntry; import static org.junit.Assert.*; /** @@ -240,6 +241,26 @@ public void testRunFileWithResults() throws Exception { assertEquals(false, r.hasNext()); }); } + @Test + public void testRunFileWithParameters() throws Exception { + testResult(db, "CALL apoc.cypher.runFile('src/test/resources/parameterized.cypher', {statistics:false,parameters:{foo:123,bar:'baz'}})", + r -> { + assertTrue("first row",r.hasNext()); + Map result = (Map)r.next().get("result"); + assertEquals(result.toString(), 1, result.size()); + assertThat( result, hasEntry("one", 123L)); + assertTrue("second row",r.hasNext()); + result = (Map)r.next().get("result"); + assertEquals(result.toString(), 1, result.size()); + assertThat(result, hasEntry("two", "baz")); + assertTrue("third row",r.hasNext()); + result = (Map)r.next().get("result"); + assertEquals(result.toString(), 2, result.size()); + assertThat(result, hasEntry("foo", 123L)); + assertThat(result, hasEntry("bar", "baz")); + assertFalse("fourth row",r.hasNext()); + }); + } @Test public void testRunFilesMultiple() throws Exception { diff --git a/src/test/resources/parameterized.cypher b/src/test/resources/parameterized.cypher new file mode 100644 index 0000000000..8229ef2059 --- /dev/null +++ b/src/test/resources/parameterized.cypher @@ -0,0 +1,3 @@ +RETURN $foo AS one; +RETURN $bar AS two; +RETURN $foo AS foo, $bar AS bar;