Skip to content

Commit 1610f6b

Browse files
christophstroblmp911de
authored andcommitted
Fix JPQL long literal parsing.
Closes #3308 Original pull request: #3280
1 parent 5309fa5 commit 1610f6b

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
class JpqlQueryRenderer extends JpqlBaseVisitor<List<JpaQueryParsingToken>> {
@@ -2155,6 +2156,8 @@ public List<JpaQueryParsingToken> visitLiteral(JpqlParser.LiteralContext ctx) {
21552156
tokens.add(new JpaQueryParsingToken(ctx.INTLITERAL()));
21562157
} else if (ctx.FLOATLITERAL() != null) {
21572158
tokens.add(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
2159+
} else if(ctx.LONGLITERAL() != null) {
2160+
tokens.add(new JpaQueryParsingToken(ctx.LONGLITERAL()));
21582161
} else if (ctx.boolean_literal() != null) {
21592162
tokens.addAll(visit(ctx.boolean_literal()));
21602163
} else if (ctx.entity_type_literal() != null) {
@@ -2215,6 +2218,8 @@ public List<JpaQueryParsingToken> visitNumeric_literal(JpqlParser.Numeric_litera
22152218
return List.of(new JpaQueryParsingToken(ctx.INTLITERAL()));
22162219
} else if (ctx.FLOATLITERAL() != null) {
22172220
return List.of(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
2221+
} else if(ctx.LONGLITERAL() != null) {
2222+
return List.of(new JpaQueryParsingToken(ctx.LONGLITERAL()));
22182223
} else {
22192224
return List.of();
22202225
}

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)