Skip to content

Commit 787c932

Browse files
committed
Conditions are Expressions.
This is supported by at least some database. Closes #1007
1 parent e4700a6 commit 787c932

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Condition.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* @since 1.1
2424
* @see Conditions
2525
*/
26-
public interface Condition extends Segment {
26+
public interface Condition extends Segment, Expression {
2727

2828
/**
2929
* Combine another {@link Condition} using {@code AND}.

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/ComparisonVisitor.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ class ComparisonVisitor extends FilteredSubtreeVisitor {
5252
@Override
5353
Delegation enterNested(Visitable segment) {
5454

55-
if (segment instanceof Expression) {
56-
ExpressionVisitor visitor = new ExpressionVisitor(context);
55+
if (segment instanceof Condition) {
56+
ConditionVisitor visitor = new ConditionVisitor(context);
5757
current = visitor;
5858
return Delegation.delegateTo(visitor);
5959
}
6060

61-
if (segment instanceof Condition) {
62-
ConditionVisitor visitor = new ConditionVisitor(context);
61+
if (segment instanceof Expression) {
62+
ExpressionVisitor visitor = new ExpressionVisitor(context);
6363
current = visitor;
6464
return Delegation.delegateTo(visitor);
6565
}

spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FilteredSingleConditionRenderSupport.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* and delegate nested {@link Expression} and {@link Condition} rendering.
2929
*
3030
* @author Mark Paluch
31+
* @author Jens Schauder
3132
* @since 1.1
3233
*/
3334
abstract class FilteredSingleConditionRenderSupport extends FilteredSubtreeVisitor {
@@ -55,18 +56,19 @@ abstract class FilteredSingleConditionRenderSupport extends FilteredSubtreeVisit
5556
@Override
5657
Delegation enterNested(Visitable segment) {
5758

58-
if (segment instanceof Expression) {
59-
ExpressionVisitor visitor = new ExpressionVisitor(context);
59+
if (segment instanceof Condition) {
60+
ConditionVisitor visitor = new ConditionVisitor(context);
6061
current = visitor;
6162
return Delegation.delegateTo(visitor);
6263
}
6364

64-
if (segment instanceof Condition) {
65-
ConditionVisitor visitor = new ConditionVisitor(context);
65+
if (segment instanceof Expression) {
66+
ExpressionVisitor visitor = new ExpressionVisitor(context);
6667
current = visitor;
6768
return Delegation.delegateTo(visitor);
6869
}
6970

71+
7072
throw new IllegalStateException("Cannot provide visitor for " + segment);
7173
}
7274

spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java

+14
Original file line numberDiff line numberDiff line change
@@ -467,4 +467,18 @@ void shouldRenderCast() {
467467
final String rendered = SqlRenderer.toString(select);
468468
assertThat(rendered).isEqualTo("SELECT CAST(User.name AS VARCHAR2) FROM User");
469469
}
470+
471+
@Test // GH-1007
472+
void shouldRenderConditionAsExpression() {
473+
474+
Table table = SQL.table("User");
475+
Select select = StatementBuilder.select( //
476+
Conditions.isGreater(table.column("age"), SQL.literalOf(18)) //
477+
) //
478+
.from(table) //
479+
.build();
480+
481+
final String rendered = SqlRenderer.toString(select);
482+
assertThat(rendered).isEqualTo("SELECT User.age > 18 FROM User");
483+
}
470484
}

0 commit comments

Comments
 (0)