Fix parsing entity names in HQL query with package names that contain reserved exp keyword.
Resolves: #3451 Original pull request: #3457
This commit is contained in:
committed by
Mark Paluch
parent
268809768f
commit
f3918d8349
@@ -737,6 +737,7 @@ reservedWord
|
||||
| EXCEPT
|
||||
| EXCLUDE
|
||||
| EXISTS
|
||||
| EXP
|
||||
| EXTRACT
|
||||
| FETCH
|
||||
| FILTER
|
||||
|
||||
@@ -18,11 +18,15 @@ package org.springframework.data.jpa.repository.query;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
|
||||
/**
|
||||
@@ -57,6 +61,10 @@ class HqlQueryRendererTests {
|
||||
return render(new HqlQueryRenderer().visit(parsedQuery));
|
||||
}
|
||||
|
||||
public static Stream<Arguments> reservedWords() {
|
||||
return Stream.of("abs", "exp", "any", "case", "else", "index", "time").map(Arguments::of);
|
||||
}
|
||||
|
||||
private void assertQuery(String query) {
|
||||
|
||||
String slimmedDownQuery = reduceWhitespace(query);
|
||||
@@ -1661,4 +1669,12 @@ class HqlQueryRendererTests {
|
||||
void signedExpressionsShouldWork(String query) {
|
||||
assertQuery(query);
|
||||
}
|
||||
|
||||
@ParameterizedTest // GH-3451
|
||||
@MethodSource({"reservedWords"})
|
||||
void entityNameWithPackageContainingReservedWord(String reservedWord) {
|
||||
|
||||
String source = "select new com.company.%s.thing.stuff.ClassName(e.id) from Experience e".formatted(reservedWord);
|
||||
assertQuery(source);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user