Browse Source

Upgrading to jsqlparser 4.9

Closes #1799
pull/1805/head
Jens Schauder 2 years ago
parent
commit
abd0c85629
No known key found for this signature in database
GPG Key ID: 89F36EDF8C1BEA56
  1. 3
      spring-data-relational/pom.xml
  2. 12
      spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AliasedPattern.java
  3. 13
      spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/AnalyticFunctionPattern.java
  4. 3
      spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/LiteralPattern.java
  5. 31
      spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SqlAssert.java
  6. 10
      spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/TypedExpressionPattern.java

3
spring-data-relational/pom.xml

@ -20,6 +20,7 @@
<properties> <properties>
<java-module-name>spring.data.relational</java-module-name> <java-module-name>spring.data.relational</java-module-name>
<project.root>${basedir}/..</project.root> <project.root>${basedir}/..</project.root>
<jsqlparser>4.9</jsqlparser>
</properties> </properties>
<dependencies> <dependencies>
@ -100,7 +101,7 @@
<dependency> <dependency>
<groupId>com.github.jsqlparser</groupId> <groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId> <artifactId>jsqlparser</artifactId>
<version>4.6</version> <version>${jsqlparser}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>

12
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; package org.springframework.data.relational.core.sqlgeneration;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem; 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 pattern for the expression to match
* @param alias to match * @param alias to match
*
* @author Jens Schauder * @author Jens Schauder
*/ */
record AliasedPattern (SelectItemPattern pattern, String alias) implements SelectItemPattern { record AliasedPattern(SelectItemPattern pattern, String alias) implements SelectItemPattern {
@Override @Override
public boolean matches(SelectItem selectItem) { public boolean matches(SelectItem selectItem) {
return pattern.matches(selectItem) && selectItem.getAlias() != null
if (selectItem instanceof SelectExpressionItem sei) { && selectItem.getAlias().getName().equals(alias);
return pattern.matches(sei) && sei.getAlias() != null && sei.getAlias().getName().equals(alias);
}
return false;
} }
@Override @Override

13
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.AnalyticExpression;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectItem;
import java.util.List; import java.util.List;
@ -44,19 +43,17 @@ public class AnalyticFunctionPattern extends TypedExpressionPattern<AnalyticExpr
@Override @Override
public boolean matches(SelectItem selectItem) { public boolean matches(SelectItem selectItem) {
if (selectItem instanceof SelectExpressionItem sei) { Expression expression = selectItem.getExpression();
Expression expression = sei.getExpression(); if (expression instanceof AnalyticExpression analyticExpression) {
if (expression instanceof AnalyticExpression analyticExpression) { return matches(analyticExpression);
return matches(analyticExpression);
}
} }
return false; return false;
} }
@Override @Override
boolean matches(AnalyticExpression analyticExpression) { boolean matches(AnalyticExpression analyticExpression) {
return analyticExpression.getName().toLowerCase().equals(functionName) return analyticExpression.getName().toLowerCase().equals(functionName) && partitionByMatches(analyticExpression);
&& partitionByMatches(analyticExpression);
} }
private boolean partitionByMatches(AnalyticExpression analyticExpression) { private boolean partitionByMatches(AnalyticExpression analyticExpression) {

3
spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/LiteralPattern.java

@ -17,7 +17,6 @@
package org.springframework.data.relational.core.sqlgeneration; package org.springframework.data.relational.core.sqlgeneration;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectItem;
/** /**
@ -30,7 +29,7 @@ record LiteralPattern(Object value) implements SelectItemPattern, ExpressionPatt
@Override @Override
public boolean matches(SelectItem selectItem) { public boolean matches(SelectItem selectItem) {
return selectItem instanceof SelectExpressionItem sei && matches(sei.getExpression()); return matches(selectItem.getExpression());
} }
@Override @Override

31
spring-data-relational/src/test/java/org/springframework/data/relational/core/sqlgeneration/SqlAssert.java

@ -27,8 +27,6 @@ import net.sf.jsqlparser.statement.select.OrderByElement;
import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectItem;
import net.sf.jsqlparser.statement.select.SpecialSubSelect;
import net.sf.jsqlparser.statement.select.SubSelect;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -84,10 +82,11 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
return new AnalyticFunctionPattern("count", partitionBy); return new AnalyticFunctionPattern("count", partitionBy);
} }
static FunctionPattern func(String name, ExpressionPattern ... params) { static FunctionPattern func(String name, ExpressionPattern... params) {
return new FunctionPattern(name, 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())); return new FunctionPattern(name, Arrays.stream(params).map(p -> col(p)).collect(Collectors.toList()));
} }
@ -104,7 +103,7 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
SqlAssert hasExactlyColumns(SelectItemPattern... columns) { SqlAssert hasExactlyColumns(SelectItemPattern... columns) {
List<SelectItem> actualSelectItems = actual.getSelectItems(); List<SelectItem<?>> actualSelectItems = actual.getSelectItems();
List<SelectItemPattern> unmatchedPatterns = new ArrayList<>(Arrays.asList(columns)); List<SelectItemPattern> unmatchedPatterns = new ArrayList<>(Arrays.asList(columns));
List<SelectItem> unmatchedSelectItems = new ArrayList<>(); List<SelectItem> unmatchedSelectItems = new ArrayList<>();
@ -169,15 +168,18 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
Expression where = actual.getWhere(); Expression where = actual.getWhere();
return new StringAssert(where == null ? "" : where.toString()); return new StringAssert(where == null ? "" : where.toString());
} }
public JoinAssert hasJoin() { public JoinAssert hasJoin() {
List<Join> joins = actual.getJoins(); List<Join> joins = actual.getJoins();
if (joins == null || joins.size() < 1) { 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)); return new JoinAssert(joins.get(0));
} }
private String prepare(SelectItemPattern[] columns) { private String prepare(SelectItemPattern[] columns) {
return Arrays.toString(columns); return Arrays.toString(columns);
} }
@ -185,7 +187,7 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
SqlAssert hasInlineViewSelectingFrom(String tableName) { SqlAssert hasInlineViewSelectingFrom(String tableName) {
Optional<PlainSelect> matchingSelect = getSubSelects(actual) Optional<PlainSelect> 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()) { if (matchingSelect.isEmpty()) {
throw failureWithActualExpected(actual, "Subselect from " + tableName, throw failureWithActualExpected(actual, "Subselect from " + tableName,
@ -195,13 +197,11 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
return new SqlAssert(matchingSelect.get()); return new SqlAssert(matchingSelect.get());
} }
public SqlAssert hasInlineView() { public SqlAssert hasInlineView() {
Optional<PlainSelect> matchingSelect = getSubSelects(actual).findFirst(); Optional<PlainSelect> matchingSelect = getSubSelects(actual).findFirst();
if (matchingSelect.isEmpty()) { if (matchingSelect.isEmpty()) {
throw failureWithActualExpected(actual, "Subselect", throw failureWithActualExpected(actual, "Subselect", "%s is expected to contain a subselect", actual);
"%s is expected to contain a subselect", actual);
} }
return new SqlAssert(matchingSelect.get()); return new SqlAssert(matchingSelect.get());
@ -227,15 +227,8 @@ class SqlAssert extends AbstractAssert<SqlAssert, PlainSelect> {
} }
private static Stream<PlainSelect> subSelects(FromItem fromItem) { private static Stream<PlainSelect> subSelects(FromItem fromItem) {
Stream<PlainSelect> fromStream;
if (fromItem instanceof SubSelect ss) { return fromItem instanceof Select ss ? Stream.of(ss.getPlainSelect()) : Stream.empty();
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;
} }
public StringAssert extractOrderBy() { public StringAssert extractOrderBy() {

10
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; package org.springframework.data.relational.core.sqlgeneration;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectItem;
/** /**
@ -33,15 +32,12 @@ abstract class TypedExpressionPattern<T> implements SelectItemPattern, Expressio
this.type = type; this.type = type;
} }
@Override @Override
public boolean matches(SelectItem selectItem) { public boolean matches(SelectItem selectItem) {
if (selectItem instanceof SelectExpressionItem sei) { Expression expression = selectItem.getExpression();
return matches(expression);
Expression expression = sei.getExpression();
return matches(expression);
}
return false;
} }
@Override @Override

Loading…
Cancel
Save