From e5ec1aa0d3f879fa8b856f68815ba290e0c2273d Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Mon, 28 Aug 2023 12:05:57 -0500 Subject: [PATCH] NEW should be legal as a token in a state field path expression in JPQL. A multi-node token that has NEW as one of its elements should work just fine in a JPQL query. See #3128 --- .../data/jpa/repository/query/Jpql.g4 | 1 + .../repository/query/HqlQueryRendererTests.java | 16 ++++++++++++++++ .../repository/query/JpqlQueryRendererTests.java | 16 ++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 index 5c63a543b..271e9d168 100644 --- a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 +++ b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 @@ -602,6 +602,7 @@ identification_variable | INNER | KEY | LEFT + | NEW | ORDER | OUTER | FLOOR 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 d95edc11e..0feaf2cdd 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 @@ -1584,4 +1584,20 @@ class HqlQueryRendererTests { order by CTM_UTLRAW_NLSSORT_LOWER(b.nome) ASC """); } + + @Test // GH-3128 + void newShouldBeLegalAsPartOfAStateFieldPathExpression() { + + assertQuery(""" + SELECT j + FROM AgentUpdateTask j + WHERE j.creationTimestamp < :date + AND (j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.NEW + OR + j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.STARTED + OR + j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.QUEUED) + ORDER BY j.id + """); + } } 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 c30dcbf71..d738ccac3 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 @@ -967,4 +967,20 @@ class JpqlQueryRendererTests { WHERE L.isLocked = FALSE OR L.forceUnlockTime < :time """); } + + @Test // GH-3128 + void newShouldBeLegalAsPartOfAStateFieldPathExpression() { + + assertQuery(""" + SELECT j + FROM AgentUpdateTask j + WHERE j.creationTimestamp < :date + AND (j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.NEW + OR + j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.STARTED + OR + j.status = com.ca.apm.acc.configserver.core.domain.jobs.AgentUpdateTaskStatus.QUEUED) + ORDER BY j.id + """); + } }