Polishing.
Introduce doWithPlainSelect(…) callback for easier filtering of Select subtypes. Add test for known (previously) failing case. See: #3869 Original pull request: #3870
This commit is contained in:
@@ -360,7 +360,7 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer {
|
||||
return applySortingToSetOperationList(setOperationList, sort);
|
||||
}
|
||||
|
||||
doWithPlainSelect (selectStatement , it -> {
|
||||
doWithPlainSelect(selectStatement, it -> {
|
||||
|
||||
List<OrderByElement> orderByElements = new ArrayList<>(16);
|
||||
for (Sort.Order order : sort) {
|
||||
|
||||
@@ -245,6 +245,17 @@ class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests {
|
||||
assertThat(queryEnhancer.hasConstructorExpression()).isFalse();
|
||||
}
|
||||
|
||||
@Test // GH-3869
|
||||
void shouldWorkWithParenthesedSelect() {
|
||||
|
||||
DefaultEntityQuery query = new TestEntityQuery("(SELECT is_contained_in(:innerId, :outerId))", true);
|
||||
QueryEnhancer queryEnhancer = QueryEnhancerFactory.forQuery(query).create(query);
|
||||
|
||||
assertThat(query.getQueryString()).isEqualTo("(SELECT is_contained_in(:innerId, :outerId))");
|
||||
assertThat(query.getAlias()).isNull();
|
||||
assertThat(queryEnhancer.getProjection()).isEqualTo("is_contained_in(:innerId, :outerId)");
|
||||
}
|
||||
|
||||
@ParameterizedTest // GH-2641
|
||||
@MethodSource("mergeStatementWorksSource")
|
||||
void mergeStatementWorksWithJSqlParser(String queryString, String alias) {
|
||||
@@ -271,31 +282,9 @@ class JSqlParserQueryEnhancerUnitTests extends QueryEnhancerTckTests {
|
||||
null));
|
||||
}
|
||||
|
||||
@Test // GH-3869
|
||||
void shouldWorkWithParenthesedSelect() {
|
||||
|
||||
String query = "(SELECT is_contained_in(:innerId, :outerId))";
|
||||
|
||||
StringQuery stringQuery = new StringQuery(query, true);
|
||||
QueryEnhancer queryEnhancer = QueryEnhancerFactory.forQuery(stringQuery);
|
||||
|
||||
assertThat(stringQuery.getQueryString()).isEqualTo(query);
|
||||
assertThat(stringQuery.getAlias()).isNull();
|
||||
assertThat(queryEnhancer.getProjection()).isEqualTo("is_contained_in(:innerId, :outerId)");
|
||||
}
|
||||
|
||||
private static DefaultQueryRewriteInformation getRewriteInformation(Sort sort) {
|
||||
return new DefaultQueryRewriteInformation(sort,
|
||||
ReturnedType.of(Object.class, Object.class, new SpelAwareProxyProjectionFactory()));
|
||||
}
|
||||
|
||||
@Test // GH-3869
|
||||
void shouldWorkWithoutFromClause() {
|
||||
String query = "SELECT is_contained_in(:innerId, :outerId)";
|
||||
|
||||
StringQuery stringQuery = new StringQuery(query, true);
|
||||
|
||||
assertThat(stringQuery.getQueryString()).isEqualTo(query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user