Fix JPQL long literal parsing.

Closes #3308
Original pull request: #3280
This commit is contained in:
Christoph Strobl
2023-12-20 10:29:39 +01:00
committed by Mark Paluch
parent 5309fa551c
commit 1610f6b871
3 changed files with 12 additions and 0 deletions

View File

@@ -23,6 +23,7 @@ grammar Jpql;
*
* @see https://github.com/jakartaee/persistence/blob/master/spec/src/main/asciidoc/ch04-query-language.adoc#bnf
* @author Greg Turnquist
* @author Christoph Strobl
* @since 3.1
*/
}
@@ -621,6 +622,7 @@ literal
: STRINGLITERAL
| INTLITERAL
| FLOATLITERAL
| LONGLITERAL
| boolean_literal
| entity_type_literal
;
@@ -650,6 +652,7 @@ escape_character
numeric_literal
: INTLITERAL
| FLOATLITERAL
| LONGLITERAL
;
boolean_literal
@@ -855,3 +858,4 @@ IDENTIFICATION_VARIABLE : ('a' .. 'z' | 'A' .. 'Z' | '\u0080' .. '\ufffe' |
STRINGLITERAL : '\'' (~ ('\'' | '\\'))* '\'' ;
FLOATLITERAL : ('0' .. '9')* '.' ('0' .. '9')+ (E '0' .. '9')* ;
INTLITERAL : ('0' .. '9')+ ;
LONGLITERAL : ('0' .. '9')+L ;

View File

@@ -24,6 +24,7 @@ import java.util.List;
* An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that renders a JPQL query without making any changes.
*
* @author Greg Turnquist
* @author Christoph Strobl
* @since 3.1
*/
class JpqlQueryRenderer extends JpqlBaseVisitor<List<JpaQueryParsingToken>> {
@@ -2155,6 +2156,8 @@ class JpqlQueryRenderer extends JpqlBaseVisitor<List<JpaQueryParsingToken>> {
tokens.add(new JpaQueryParsingToken(ctx.INTLITERAL()));
} else if (ctx.FLOATLITERAL() != null) {
tokens.add(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
} else if(ctx.LONGLITERAL() != null) {
tokens.add(new JpaQueryParsingToken(ctx.LONGLITERAL()));
} else if (ctx.boolean_literal() != null) {
tokens.addAll(visit(ctx.boolean_literal()));
} else if (ctx.entity_type_literal() != null) {
@@ -2215,6 +2218,8 @@ class JpqlQueryRenderer extends JpqlBaseVisitor<List<JpaQueryParsingToken>> {
return List.of(new JpaQueryParsingToken(ctx.INTLITERAL()));
} else if (ctx.FLOATLITERAL() != null) {
return List.of(new JpaQueryParsingToken(ctx.FLOATLITERAL()));
} else if(ctx.LONGLITERAL() != null) {
return List.of(new JpaQueryParsingToken(ctx.LONGLITERAL()));
} else {
return List.of();
}

View File

@@ -32,6 +32,7 @@ import org.springframework.data.domain.Sort;
* @author Mark Paluch
* @author Diego Krupitza
* @author Geoffrey Deremetz
* @author Christoph Strobl
*/
public class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests {
@@ -49,6 +50,8 @@ public class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests {
assumeThat(query).as("JSQLParser does not support constructor JPQL syntax").doesNotContain(" new ");
assumeThat(query).as("JSQLParser does not support MOD JPQL syntax").doesNotContain("MOD(");
super.shouldDeriveJpqlCountQuery(query, expected);
}