From e4700a66216761b6f862e335c0646dff35c5f97b Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 3 Nov 2021 18:15:39 +0100 Subject: [PATCH 1/2] 1007-selectbuild-accept-conditions - Prepare branch --- pom.xml | 2 +- spring-data-jdbc-distribution/pom.xml | 2 +- spring-data-jdbc/pom.xml | 4 ++-- spring-data-relational/pom.xml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index eeaa0b9e93..985e2dc047 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index 03d6a5c2a0..ec9cd6b8c4 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index af9ad0904e..86817b43b1 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-jdbc - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 4e42a006ec..fae872c09e 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-relational - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 2.3.0-SNAPSHOT + 2.3.0-1007-selectbuild-accept-conditions-SNAPSHOT From 787c9324d2d64dda4c81c69a98b3806f94362f58 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Thu, 4 Nov 2021 07:18:40 +0100 Subject: [PATCH 2/2] Conditions are Expressions. This is supported by at least some database. Closes #1007 --- .../data/relational/core/sql/Condition.java | 2 +- .../core/sql/render/ComparisonVisitor.java | 8 ++++---- .../FilteredSingleConditionRenderSupport.java | 10 ++++++---- .../core/sql/render/SelectRendererUnitTests.java | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 9 deletions(-) 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 bacb5e84aa..956d2c6860 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 @@ * @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 186c0601c2..476f1223b5 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 0a148c8d64..8f23b672f6 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 @@ * 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 7a223c1564..3bf9953936 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 @@ -467,4 +467,18 @@ void shouldRenderCast() { final String rendered = SqlRenderer.toString(select); 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"); + } }