diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Condition.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Condition.java index bacb5e84a..956d2c686 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Condition.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Condition.java @@ -23,7 +23,7 @@ package org.springframework.data.relational.core.sql; * @since 1.1 * @see Conditions */ -public interface Condition extends Segment { +public interface Condition extends Segment, Expression { /** * Combine another {@link Condition} using {@code AND}. diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/ComparisonVisitor.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/ComparisonVisitor.java index 186c0601c..476f1223b 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/ComparisonVisitor.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/ComparisonVisitor.java @@ -52,14 +52,14 @@ class ComparisonVisitor extends FilteredSubtreeVisitor { @Override Delegation enterNested(Visitable segment) { - if (segment instanceof Expression) { - ExpressionVisitor visitor = new ExpressionVisitor(context); + if (segment instanceof Condition) { + ConditionVisitor visitor = new ConditionVisitor(context); current = visitor; return Delegation.delegateTo(visitor); } - if (segment instanceof Condition) { - ConditionVisitor visitor = new ConditionVisitor(context); + if (segment instanceof Expression) { + ExpressionVisitor visitor = new ExpressionVisitor(context); current = visitor; return Delegation.delegateTo(visitor); } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FilteredSingleConditionRenderSupport.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FilteredSingleConditionRenderSupport.java index 0a148c8d6..8f23b672f 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FilteredSingleConditionRenderSupport.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/FilteredSingleConditionRenderSupport.java @@ -28,6 +28,7 @@ import org.springframework.util.Assert; * and delegate nested {@link Expression} and {@link Condition} rendering. * * @author Mark Paluch + * @author Jens Schauder * @since 1.1 */ abstract class FilteredSingleConditionRenderSupport extends FilteredSubtreeVisitor { @@ -55,18 +56,19 @@ abstract class FilteredSingleConditionRenderSupport extends FilteredSubtreeVisit @Override Delegation enterNested(Visitable segment) { - if (segment instanceof Expression) { - ExpressionVisitor visitor = new ExpressionVisitor(context); + if (segment instanceof Condition) { + ConditionVisitor visitor = new ConditionVisitor(context); current = visitor; return Delegation.delegateTo(visitor); } - if (segment instanceof Condition) { - ConditionVisitor visitor = new ConditionVisitor(context); + if (segment instanceof Expression) { + ExpressionVisitor visitor = new ExpressionVisitor(context); current = visitor; return Delegation.delegateTo(visitor); } + throw new IllegalStateException("Cannot provide visitor for " + segment); } diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java index bcb5a87a2..fc4e6cd82 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/render/SelectRendererUnitTests.java @@ -480,6 +480,20 @@ class SelectRendererUnitTests { assertThat(rendered).isEqualTo("SELECT CAST(User.name AS VARCHAR2) FROM User"); } + @Test // GH-1007 + void shouldRenderConditionAsExpression() { + + Table table = SQL.table("User"); + Select select = StatementBuilder.select( // + Conditions.isGreater(table.column("age"), SQL.literalOf(18)) // + ) // + .from(table) // + .build(); + + final String rendered = SqlRenderer.toString(select); + assertThat(rendered).isEqualTo("SELECT User.age > 18 FROM User"); + } + @Test // GH-968 void rendersFullyQualifiedNamesInOrderBy() {