Skip to content

Commit ae9b499

Browse files
christophstroblmp911de
authored andcommitted
Fix JPQL long literal parsing.
Closes #3308 Original pull request: #3280
1 parent afe5933 commit ae9b499

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ grammar Jpql;
2323
*
2424
* @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf
2525
* @author Greg Turnquist
26+
* @author Christoph Strobl
2627
* @since 3.1
2728
*/
2829
}
@@ -621,6 +622,7 @@ literal
621622
: STRINGLITERAL
622623
| INTLITERAL
623624
| FLOATLITERAL
625+
| LONGLITERAL
624626
| boolean_literal
625627
| entity_type_literal
626628
;
@@ -650,6 +652,7 @@ escape_character
650652
numeric_literal
651653
: INTLITERAL
652654
| FLOATLITERAL
655+
| LONGLITERAL
653656
;
654657

655658
boolean_literal
@@ -855,3 +858,4 @@ IDENTIFICATION_VARIABLE : ('a' .. 'z' | 'A' .. 'Z' | '\u0080' .. '\ufffe' |
855858
STRINGLITERAL : '\'' (~ ('\'' | '\\'))* '\'' ;
856859
FLOATLITERAL : ('0' .. '9')* '.' ('0' .. '9')+ (E '0' .. '9')* ;
857860
INTLITERAL : ('0' .. '9')+ ;
861+
LONGLITERAL : ('0' .. '9')+L ;

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
* An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that renders a JPQL query without making any changes.
2525
*
2626
* @author Greg Turnquist
27+
* @author Christoph Strobl
2728
* @since 3.1
2829
*/
2930
@SuppressWarnings({ "ConstantConditions", "DuplicatedCode" })
@@ -2156,6 +2157,8 @@ public List<JpaQueryParsingToken> visitLiteral(JpqlParser.LiteralContext ctx) {
21562157
tokens.add(new JpaQueryParsingToken(ctx.INTLITERAL()));
21572158
} else if (ctx.FLOATLITERAL() != null) {
21582159
tokens.add(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
2160+
} else if(ctx.LONGLITERAL() != null) {
2161+
tokens.add(new JpaQueryParsingToken(ctx.LONGLITERAL()));
21592162
} else if (ctx.boolean_literal() != null) {
21602163
tokens.addAll(visit(ctx.boolean_literal()));
21612164
} else if (ctx.entity_type_literal() != null) {
@@ -2216,6 +2219,8 @@ public List<JpaQueryParsingToken> visitNumeric_literal(JpqlParser.Numeric_litera
22162219
return List.of(new JpaQueryParsingToken(ctx.INTLITERAL()));
22172220
} else if (ctx.FLOATLITERAL() != null) {
22182221
return List.of(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
2222+
} else if(ctx.LONGLITERAL() != null) {
2223+
return List.of(new JpaQueryParsingToken(ctx.LONGLITERAL()));
22192224
} else {
22202225
return List.of();
22212226
}

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancerUnitTests.java

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
* @author Mark Paluch
3333
* @author Diego Krupitza
3434
* @author Geoffrey Deremetz
35+
* @author Christoph Strobl
3536
*/
3637
public class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests {
3738

@@ -49,6 +50,8 @@ void shouldDeriveJpqlCountQuery(String query, String expected) {
4950

5051
assumeThat(query).as("JSQLParser does not support constructor JPQL syntax").doesNotContain(" new ");
5152

53+
assumeThat(query).as("JSQLParser does not support MOD JPQL syntax").doesNotContain("MOD(");
54+
5255
super.shouldDeriveJpqlCountQuery(query, expected);
5356
}
5457

0 commit comments

Comments
 (0)