diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarErrorListener.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarErrorListener.java index 66b64a031..a2edc2d91 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarErrorListener.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarErrorListener.java @@ -29,14 +29,21 @@ class BadJpqlGrammarErrorListener extends BaseErrorListener { private final String query; + private final String grammar; + BadJpqlGrammarErrorListener(String query) { + this(query, "JPQL"); + } + + BadJpqlGrammarErrorListener(String query, String grammar) { this.query = query; + this.grammar = grammar; } @Override public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { - throw new BadJpqlGrammarException("Line " + line + ":" + charPositionInLine + " " + msg, query, null); + throw new BadJpqlGrammarException("Line " + line + ":" + charPositionInLine + " " + msg, grammar, query, null); } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarException.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarException.java index 6cc24630e..ab3b51b7b 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarException.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/BadJpqlGrammarException.java @@ -30,7 +30,11 @@ public class BadJpqlGrammarException extends InvalidDataAccessResourceUsageExcep private final String jpql; public BadJpqlGrammarException(String message, String jpql, @Nullable Throwable cause) { - super(message + "; Bad JPQL grammar [" + jpql + "]", cause); + this(message, jpql, "JPQL", cause); + } + + BadJpqlGrammarException(String message, String grammar, String jpql, @Nullable Throwable cause) { + super(message + "; Bad " + grammar + " grammar [" + jpql + "]", cause); this.jpql = jpql; } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java index 80d8a6eb0..7f02ce3ec 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java @@ -72,7 +72,13 @@ class JpaQueryEnhancer implements QueryEnhancer { Lexer lexer = lexerFactoryFunction.apply(CharStreams.fromString(query)); P parser = parserFactoryFunction.apply(new CommonTokenStream(lexer)); - configureParser(query, lexer, parser); + String grammar = lexer.getGrammarFileName(); + int dot = grammar.lastIndexOf('.'); + if (dot != -1) { + grammar = grammar.substring(0, dot); + } + + configureParser(query, grammar.toUpperCase(), lexer, parser); return parseFunction.apply(parser); } @@ -84,9 +90,9 @@ class JpaQueryEnhancer implements QueryEnhancer { * @param lexer * @param parser */ - static void configureParser(String query, Lexer lexer, Parser parser) { + static void configureParser(String query, String grammar, Lexer lexer, Parser parser) { - BadJpqlGrammarErrorListener errorListener = new BadJpqlGrammarErrorListener(query); + BadJpqlGrammarErrorListener errorListener = new BadJpqlGrammarErrorListener(query, grammar); lexer.removeErrorListeners(); lexer.addErrorListener(errorListener);