From 86e3cdc34b8153e713249cb2c2b42618769ab3a6 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 5 Jun 2024 09:05:16 +0200 Subject: [PATCH] Fix query parsing error for properties using reserved lateral keyword. Add tests for existing parsers and fix the HQL one. Closes #3496 Original pull request #3497 --- .../org/springframework/data/jpa/repository/query/Hql.g4 | 1 + .../data/jpa/repository/query/EqlQueryRendererTests.java | 7 +++++++ .../data/jpa/repository/query/HqlQueryRendererTests.java | 7 +++++++ .../data/jpa/repository/query/JpqlQueryRendererTests.java | 7 +++++++ 4 files changed, 22 insertions(+) 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 7984d4881..5edddf97d 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 @@ -768,6 +768,7 @@ reservedWord | JOIN | KEY | LAST + | LATERAL | LEADING | LEFT | LIKE diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java index 055940e9e..f654d5c88 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java @@ -1026,4 +1026,11 @@ class EqlQueryRendererTests { String source = "select new com.company.%s.thing.stuff.ClassName(e.id) from Experience e".formatted(reservedWord); assertQuery(source); } + + @Test // GH-3496 + void lateralShouldBeAValidParameter() { + + assertQuery("select e from Employee e where e.lateral = :_lateral"); + assertQuery("select te from TestEntity te where te.lateral = :lateral"); + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java index 2bcf467e1..a44fb4dc2 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java @@ -1568,6 +1568,13 @@ class HqlQueryRendererTests { assertQuery("select te from TestEntity te where te.type = :type"); } + @Test // GH-3496 + void lateralShouldBeAValidParameter() { + + assertQuery("select e from Employee e where e.lateral = :_lateral"); + assertQuery("select te from TestEntity te where te.lateral = :lateral"); + } + @Test // GH-3099 void functionNamesShouldSupportSchemaScoping() { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java index 2f20fe70f..aecd25dbc 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java @@ -965,6 +965,13 @@ class JpqlQueryRendererTests { assertQuery("select te from TestEntity te where te.type = :type"); } + @Test // GH-3496 + void lateralShouldBeAValidParameter() { + + assertQuery("select e from Employee e where e.lateral = :_lateral"); + assertQuery("select te from TestEntity te where te.lateral = :lateral"); + } + @Test // GH-3061 void alternateNotEqualsOperatorShouldWork() { assertQuery("select e from Employee e where e.firstName != :name");