Polishing.
Improve BadJpqlGrammarException by including the underlying grammar.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user