diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 7d49bf2ef..3ba39b861 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -20,6 +20,7 @@ spring.data.relational ${basedir}/.. + 4.9 @@ -100,7 +101,7 @@ com.github.jsqlparser jsqlparser - 4.6 + ${jsqlparser} test diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AliasedPattern.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AliasedPattern.java index 66b42bd02..32f5bd5d7 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AliasedPattern.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AliasedPattern.java @@ -16,7 +16,6 @@ package org.springframework.data.relational.core.sqlgeneration; -import net.sf.jsqlparser.statement.select.SelectExpressionItem; import net.sf.jsqlparser.statement.select.SelectItem; /** @@ -24,19 +23,14 @@ import net.sf.jsqlparser.statement.select.SelectItem; * * @param pattern for the expression to match * @param alias to match - * * @author Jens Schauder */ -record AliasedPattern (SelectItemPattern pattern, String alias) implements SelectItemPattern { +record AliasedPattern(SelectItemPattern pattern, String alias) implements SelectItemPattern { @Override public boolean matches(SelectItem selectItem) { - - if (selectItem instanceof SelectExpressionItem sei) { - return pattern.matches(sei) && sei.getAlias() != null && sei.getAlias().getName().equals(alias); - } - - return false; + return pattern.matches(selectItem) && selectItem.getAlias() != null + && selectItem.getAlias().getName().equals(alias); } @Override diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AnalyticFunctionPattern.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AnalyticFunctionPattern.java index a95526521..a55d3e97a 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AnalyticFunctionPattern.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AnalyticFunctionPattern.java @@ -18,7 +18,6 @@ package org.springframework.data.relational.core.sqlgeneration; import net.sf.jsqlparser.expression.AnalyticExpression; import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.statement.select.SelectExpressionItem; import net.sf.jsqlparser.statement.select.SelectItem; import java.util.List; @@ -44,19 +43,17 @@ public class AnalyticFunctionPattern extends TypedExpressionPattern { return new AnalyticFunctionPattern("count", partitionBy); } - static FunctionPattern func(String name, ExpressionPattern ... params) { + static FunctionPattern func(String name, ExpressionPattern... params) { return new FunctionPattern(name, params); } - static FunctionPattern func(String name, String ... params) { + + static FunctionPattern func(String name, String... params) { return new FunctionPattern(name, Arrays.stream(params).map(p -> col(p)).collect(Collectors.toList())); } @@ -104,7 +103,7 @@ class SqlAssert extends AbstractAssert { SqlAssert hasExactlyColumns(SelectItemPattern... columns) { - List actualSelectItems = actual.getSelectItems(); + List> actualSelectItems = actual.getSelectItems(); List unmatchedPatterns = new ArrayList<>(Arrays.asList(columns)); List unmatchedSelectItems = new ArrayList<>(); @@ -169,15 +168,18 @@ class SqlAssert extends AbstractAssert { Expression where = actual.getWhere(); return new StringAssert(where == null ? "" : where.toString()); } + public JoinAssert hasJoin() { List joins = actual.getJoins(); if (joins == null || joins.size() < 1) { - throw failureWithActualExpected(actual, "select with a join", "Expected %s to contain a join but it doesn't.", actual); + throw failureWithActualExpected(actual, "select with a join", "Expected %s to contain a join but it doesn't.", + actual); } return new JoinAssert(joins.get(0)); } + private String prepare(SelectItemPattern[] columns) { return Arrays.toString(columns); } @@ -185,7 +187,7 @@ class SqlAssert extends AbstractAssert { SqlAssert hasInlineViewSelectingFrom(String tableName) { Optional matchingSelect = getSubSelects(actual) - .filter(ps -> (ps.getFromItem()instanceof Table t) && t.getName().equals(tableName)).findFirst(); + .filter(ps -> (ps.getFromItem() instanceof Table t) && t.getName().equals(tableName)).findFirst(); if (matchingSelect.isEmpty()) { throw failureWithActualExpected(actual, "Subselect from " + tableName, @@ -195,13 +197,11 @@ class SqlAssert extends AbstractAssert { return new SqlAssert(matchingSelect.get()); } - public SqlAssert hasInlineView() { Optional matchingSelect = getSubSelects(actual).findFirst(); if (matchingSelect.isEmpty()) { - throw failureWithActualExpected(actual, "Subselect", - "%s is expected to contain a subselect", actual); + throw failureWithActualExpected(actual, "Subselect", "%s is expected to contain a subselect", actual); } return new SqlAssert(matchingSelect.get()); @@ -227,15 +227,8 @@ class SqlAssert extends AbstractAssert { } private static Stream subSelects(FromItem fromItem) { - Stream fromStream; - if (fromItem instanceof SubSelect ss) { - fromStream = Stream.of((PlainSelect) ss.getSelectBody()); - } else if (fromItem instanceof SpecialSubSelect ss) { - fromStream = Stream.of((PlainSelect) ss.getSubSelect().getSelectBody()); - } else { - fromStream = Stream.empty(); - } - return fromStream; + + return fromItem instanceof Select ss ? Stream.of(ss.getPlainSelect()) : Stream.empty(); } public StringAssert extractOrderBy() { diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/TypedExpressionPattern.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/TypedExpressionPattern.java index 094ab756e..8aec7059a 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/TypedExpressionPattern.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/TypedExpressionPattern.java @@ -17,7 +17,6 @@ package org.springframework.data.relational.core.sqlgeneration; import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.statement.select.SelectExpressionItem; import net.sf.jsqlparser.statement.select.SelectItem; /** @@ -33,15 +32,12 @@ abstract class TypedExpressionPattern implements SelectItemPattern, Expressio this.type = type; } + @Override public boolean matches(SelectItem selectItem) { - if (selectItem instanceof SelectExpressionItem sei) { - - Expression expression = sei.getExpression(); - return matches(expression); - } - return false; + Expression expression = selectItem.getExpression(); + return matches(expression); } @Override