From b1b5fe90da5cd4b9b13cfee3e3d2cf1dc64d5342 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 25 Oct 2021 14:18:15 +0200 Subject: [PATCH] Polishing. Remove unecessary toString calls. Make Cast.create public to align with other factory methods. Fix AbstractSegment.toString See #1066 Original pull request: #1071. --- .../relational/core/sql/AbstractSegment.java | 5 +-- .../core/sql/AliasedExpression.java | 2 +- .../data/relational/core/sql/Cast.java | 8 ++-- .../data/relational/core/sql/Comparison.java | 2 +- .../data/relational/core/sql/Expressions.java | 1 + .../data/relational/core/sql/Not.java | 2 +- .../core/sql/SubselectExpression.java | 2 +- .../core/sql/AbstractSegmentTests.java | 37 +++++++++++++++++++ .../core/sql/AbstractTestSegment.java | 2 +- 9 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractSegmentTests.java diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AbstractSegment.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AbstractSegment.java index be2147d9..76bda66d 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AbstractSegment.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AbstractSegment.java @@ -15,8 +15,6 @@ */ package org.springframework.data.relational.core.sql; -import java.util.Arrays; - import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -70,7 +68,6 @@ abstract class AbstractSegment implements Segment { @Override public String toString() { - return StringUtils.collectionToDelimitedString(Arrays.asList(children), ", ", getClass().getSimpleName() + "(", - ")"); + return getClass().getSimpleName() + "(" + StringUtils.arrayToDelimitedString(children, ", ") + ")"; } } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AliasedExpression.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AliasedExpression.java index e347ff80..068a109c 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AliasedExpression.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/AliasedExpression.java @@ -57,6 +57,6 @@ class AliasedExpression extends AbstractSegment implements Aliased, Expression { */ @Override public String toString() { - return expression.toString() + " AS " + alias; + return expression + " AS " + alias; } } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Cast.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Cast.java index 2d473ce1..b0d0941f 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Cast.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Cast.java @@ -18,7 +18,7 @@ package org.springframework.data.relational.core.sql; import org.springframework.util.Assert; /** - * Represents a CAST expression like {@code CAST(something AS JSON}. + * Represents a {@code CAST} expression like {@code CAST(something AS JSON}. * * @author Jens Schauder * @since 2.3 @@ -39,13 +39,13 @@ public class Cast extends AbstractSegment implements Expression { } /** - * Creates a new CAST expression. + * Creates a new {@code CAST} expression. * * @param expression the expression to cast. Must not be {@literal null}. * @param targetType the type to cast to. Must not be {@literal null}. - * @return guaranteed to be not {@literal null}. + * @return the {@code CAST} for {@code expression} into {@code targetType}. */ - static Expression create(Expression expression, String targetType) { + public static Expression create(Expression expression, String targetType) { return new Cast(expression, targetType); } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Comparison.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Comparison.java index c04ecb49..196315c0 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Comparison.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Comparison.java @@ -116,6 +116,6 @@ public class Comparison extends AbstractSegment implements Condition { @Override public String toString() { - return left.toString() + " " + comparator + " " + right.toString(); + return left + " " + comparator + " " + right; } } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Expressions.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Expressions.java index 571d2081..e6981f86 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Expressions.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Expressions.java @@ -55,6 +55,7 @@ public abstract class Expressions { /** * @return a new {@link Cast} expression. + * @since 2.3 */ public static Expression cast(Expression expression, String targetType) { return Cast.create(expression, targetType); diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Not.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Not.java index 502d07fa..6b86a7e5 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Not.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/Not.java @@ -45,6 +45,6 @@ public class Not extends AbstractSegment implements Condition { */ @Override public String toString() { - return "NOT " + condition.toString(); + return "NOT " + condition; } } diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SubselectExpression.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SubselectExpression.java index 00119432..d2b677dd 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SubselectExpression.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/SubselectExpression.java @@ -38,6 +38,6 @@ public class SubselectExpression extends AbstractSegment implements Expression { */ @Override public String toString() { - return "(" + subselect.toString() + ")"; + return "(" + subselect + ")"; } } diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractSegmentTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractSegmentTests.java new file mode 100644 index 00000000..85769a8e --- /dev/null +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractSegmentTests.java @@ -0,0 +1,37 @@ +/* + * Copyright 2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.relational.core.sql; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +/** + * Unit tests for {@link AbstractSegment}. + * + * @author Mark Paluch + */ +class AbstractSegmentTests { + + @Test // GH-1066 + void shouldReportToStringCorrectly() { + + Table table = Table.create("foo"); + AbstractSegment segment = new AbstractTestSegment(table.column("col1"), table.column("col2")); + + assertThat(segment).hasToString("AbstractTestSegment(foo.col1, foo.col2)"); + } +} diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractTestSegment.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractTestSegment.java index 98991efd..f8a22507 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractTestSegment.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sql/AbstractTestSegment.java @@ -20,7 +20,7 @@ package org.springframework.data.relational.core.sql; * * @author Jens Schauder */ -public class AbstractTestSegment extends AbstractSegment{ +public class AbstractTestSegment extends AbstractSegment { protected AbstractTestSegment(Segment... children) { super(children); }