diff --git a/pom.xml b/pom.xml index b7f501997..3ebc82d28 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ 3.0.3 6.2.1.Final 2.7.1 +

2.1.214

4.5 8.0.31 42.5.0 diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml index f4560082c..4f2c403f7 100644 --- a/spring-data-jpa/pom.xml +++ b/spring-data-jpa/pom.xml @@ -100,6 +100,13 @@ test + + com.h2database + h2 + ${h2} + test + + com.mysql diff --git a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4 b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4 index 731bb16c7..b702bad0c 100644 --- a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4 +++ b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4 @@ -579,7 +579,7 @@ dealingWithNullExpression // https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-like-predicate stringPatternMatching - : expression NOT? (LIKE | ILIKE) expression (ESCAPE expression)? + : expression NOT? (LIKE | ILIKE) expression (ESCAPE (character|parameter))? ; // https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-elements-indices diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java index 5446173ca..17458b20e 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java @@ -2124,7 +2124,11 @@ class HqlQueryRenderer extends HqlBaseVisitor> { if (ctx.ESCAPE() != null) { tokens.add(new JpaQueryParsingToken(ctx.ESCAPE())); - tokens.addAll(visit(ctx.expression(2))); + if (ctx.character() != null) { + tokens.addAll(visit(ctx.character())); + } else if (ctx.parameter() != null) { + tokens.addAll(visit(ctx.parameter())); + } } return tokens; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java index 1b6bc2a7b..473331252 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java @@ -23,8 +23,9 @@ import org.springframework.test.context.ContextConfiguration; * https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477. * * @author Oliver Gierke + * @author Greg Turnquist */ -@ContextConfiguration("classpath:eclipselink.xml") +@ContextConfiguration("classpath:eclipselink-h2.xml") class EclipseLinkUserRepositoryFinderTests extends UserRepositoryFinderTests { @Disabled @@ -35,21 +36,4 @@ class EclipseLinkUserRepositoryFinderTests extends UserRepositoryFinderTests { @Override void executesInKeywordForPageCorrectly() {} - @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955") - @Override - void escapingInLikeSpels() { - super.escapingInLikeSpels(); - } - - @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955") - @Override - void escapingInLikeSpelsInThePresenceOfEscapeCharacters() { - super.escapingInLikeSpelsInThePresenceOfEscapeCharacters(); - } - - @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955") - @Override - void escapingInLikeSpelsInThePresenceOfEscapedWildcards() { - super.escapingInLikeSpelsInThePresenceOfEscapedWildcards(); - } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java index bccc417ea..4b6c4bb9e 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java @@ -52,10 +52,11 @@ import org.springframework.transaction.annotation.Transactional; * * @author Oliver Gierke * @author Krzysztof Krason + * @author Greg Turnquist * @see QueryLookupStrategy */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(locations = "classpath:config/namespace-application-context.xml") +@ContextConfiguration(locations = "classpath:config/namespace-application-context-h2.xml") @Transactional class UserRepositoryFinderTests { diff --git a/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml b/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml new file mode 100644 index 000000000..9cb3eab27 --- /dev/null +++ b/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/spring-data-jpa/src/test/resources/eclipselink-h2.xml b/spring-data-jpa/src/test/resources/eclipselink-h2.xml new file mode 100644 index 000000000..71d4ab637 --- /dev/null +++ b/spring-data-jpa/src/test/resources/eclipselink-h2.xml @@ -0,0 +1,21 @@ + + + + + + + + org.h2.Driver + jdbc:h2:mem:hades + sa + + create-tables + false + SEVERE + + + diff --git a/spring-data-jpa/src/test/resources/infrastructure-h2.xml b/spring-data-jpa/src/test/resources/infrastructure-h2.xml new file mode 100644 index 000000000..723454c01 --- /dev/null +++ b/spring-data-jpa/src/test/resources/infrastructure-h2.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-jpa/src/test/resources/scripts/h2-init.sql b/spring-data-jpa/src/test/resources/scripts/h2-init.sql new file mode 100644 index 000000000..1c8a0e797 --- /dev/null +++ b/spring-data-jpa/src/test/resources/scripts/h2-init.sql @@ -0,0 +1 @@ +; \ No newline at end of file diff --git a/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql b/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql new file mode 100644 index 000000000..1023dc1a3 --- /dev/null +++ b/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql @@ -0,0 +1,9 @@ +/; +DROP alias IF EXISTS plus1inout +/; +CREATE alias plus1inout AS $$ +Integer plus1inout(Integer arg) { + return arg + 1; +} +$$ +/;