Skip to content

Commit 49e3fc8

Browse files
Support empty BooleanBuilder in QueryDSL adapter. [bug]
1 parent c8779d0 commit 49e3fc8

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

neo4j-cypher-dsl/src/main/java/org/neo4j/cypherdsl/core/QueryDSLAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.neo4j.cypherdsl.core.querydsl.CypherContext;
2626
import org.neo4j.cypherdsl.core.querydsl.ToCypherFormatStringVisitor;
2727

28+
import com.querydsl.core.BooleanBuilder;
2829
import com.querydsl.core.types.Path;
2930
import com.querydsl.core.types.Predicate;
3031

@@ -54,6 +55,10 @@ public Condition asCondition() {
5455
throw new IllegalArgumentException("Only Query-DSL predicates can be turned into Cypher-DSL's predicates.");
5556
}
5657

58+
if (expression instanceof BooleanBuilder && !((BooleanBuilder) expression).hasValue()) {
59+
return Conditions.noCondition();
60+
}
61+
5762
CypherContext context = new CypherContext();
5863
String formatString = expression.accept(ToCypherFormatStringVisitor.INSTANCE, context);
5964

neo4j-cypher-dsl/src/test/java/org/neo4j/cypherdsl/core/querydsl/QueryDSLAdapterTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.junit.jupiter.params.ParameterizedTest;
5151
import org.junit.jupiter.params.provider.Arguments;
5252
import org.junit.jupiter.params.provider.MethodSource;
53+
import org.neo4j.cypherdsl.core.Condition;
5354
import org.neo4j.cypherdsl.core.Cypher;
5455
import org.neo4j.cypherdsl.core.Literal.UnsupportedLiteralException;
5556
import org.neo4j.cypherdsl.core.Statement;
@@ -462,4 +463,32 @@ void shouldNotAdaptArbitraryThingsAsNames() {
462463
assertThatIllegalArgumentException().isThrownBy(() -> Cypher.adapt(Expressions.TWO).asName())
463464
.withMessage("Only Query-DSL paths can be turned into names.");
464465
}
466+
467+
@Test
468+
void emptyBooleanBuilder() {
469+
470+
Condition condition = Cypher.adapt(new BooleanBuilder()).asCondition();
471+
Statement statement = Cypher.match(Cypher.anyNode().named("n"))
472+
.where(condition)
473+
.returning(Cypher.name("n"))
474+
.build();
475+
476+
assertThat(statement.getParameterNames()).isEmpty();
477+
assertThat(statement.getCypher())
478+
.isEqualTo("MATCH (n) RETURN n");
479+
}
480+
481+
@Test
482+
void booleanBuilder() {
483+
484+
Condition condition = Cypher.adapt(new BooleanBuilder().and(Expressions.FALSE).and(Expressions.TRUE)).asCondition();
485+
Statement statement = Cypher.match(Cypher.anyNode().named("n"))
486+
.where(condition)
487+
.returning(Cypher.name("n"))
488+
.build();
489+
490+
assertThat(statement.getParameterNames()).isEmpty();
491+
assertThat(statement.getCypher())
492+
.isEqualTo("MATCH (n) WHERE false AND true RETURN n");
493+
}
465494
}

0 commit comments

Comments
 (0)