From d62e720b2383479350660621533af31f9028faa1 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Mon, 19 Dec 2022 12:13:27 +0100 Subject: [PATCH] fix: Allow `match` after unwind as defined by OpenCypher. (#531) --- .../neo4j/cypherdsl/core/StatementBuilder.java | 2 +- .../org/neo4j/cypherdsl/core/IssueRelatedIT.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/neo4j-cypher-dsl/src/main/java/org/neo4j/cypherdsl/core/StatementBuilder.java b/neo4j-cypher-dsl/src/main/java/org/neo4j/cypherdsl/core/StatementBuilder.java index 8eadb52fd5..ea881dfc6c 100644 --- a/neo4j-cypher-dsl/src/main/java/org/neo4j/cypherdsl/core/StatementBuilder.java +++ b/neo4j-cypher-dsl/src/main/java/org/neo4j/cypherdsl/core/StatementBuilder.java @@ -172,7 +172,7 @@ interface OngoingReadingWithWhere extends OngoingReading, ExposesMatch, * @since 1.0 */ interface OngoingReading - extends ExposesReturning, ExposesWith, ExposesUpdatingClause, ExposesUnwind, ExposesCreate, + extends ExposesReturning, ExposesWith, ExposesUpdatingClause, ExposesUnwind, ExposesCreate, ExposesMatch, ExposesCall, ExposesSubqueryCall { } diff --git a/neo4j-cypher-dsl/src/test/java/org/neo4j/cypherdsl/core/IssueRelatedIT.java b/neo4j-cypher-dsl/src/test/java/org/neo4j/cypherdsl/core/IssueRelatedIT.java index 57b8947684..2c40b5ff2b 100644 --- a/neo4j-cypher-dsl/src/test/java/org/neo4j/cypherdsl/core/IssueRelatedIT.java +++ b/neo4j-cypher-dsl/src/test/java/org/neo4j/cypherdsl/core/IssueRelatedIT.java @@ -31,6 +31,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.neo4j.cypherdsl.core.renderer.Configuration; +import org.neo4j.cypherdsl.core.renderer.Dialect; import org.neo4j.cypherdsl.core.renderer.Renderer; /** @@ -1408,4 +1409,19 @@ void testLabelRemoval() { assertThat(correctQuery).isEqualTo("MATCH (n:`Wine`) WHERE id(n) = 1 REMOVE n:`Drink` RETURN id(n) AS id"); } + + @Test // GH-524 + void unwindWithoutWith() { + + SymbolicName id = Cypher.name("id"); + Node n = Cypher.node("Person").named("n"); + Renderer renderer = Renderer.getRenderer(Configuration.newConfig().withDialect(Dialect.NEO4J_5).build()); + Statement statement = Cypher.unwind(Cypher.parameter("ids")) + .as(id) + .match(n) + .where(n.elementId().isEqualTo(id)) + .returning(n) + .build(); + assertThat(renderer.render(statement)).isEqualTo("UNWIND $ids AS id MATCH (n:`Person`) WHERE elementId(n) = id RETURN n"); + } }