Skip to content

DATAJPA-1750 - Fixes order clause creation if function with parameter… #425

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
* @author Mohammad Hewedy
* @author Andriy Redko
* @author Peter Großmann
* @author Simon Paradies
*/
public abstract class QueryUtils {

Expand Down Expand Up @@ -179,7 +180,7 @@ public abstract class QueryUtils {

builder = new StringBuilder();
// any function call including parameters within the brackets
builder.append("\\w+\\s*\\([\\w\\.,\\s'=]+\\)");
builder.append("\\w+\\s*\\([\\w\\.,\\s'=:\\?]+\\)");
// the potential alias
builder.append("\\s+[as|AS]+\\s+(([\\w\\.]+))");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
* @author Kevin Peters
* @author Jens Schauder
* @author Andrey Kovalev
* @author Simon Paradies
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application-context.xml")
Expand Down Expand Up @@ -2116,6 +2117,16 @@ public void handlesCountQueriesWithLessParametersMoreThanOneIndexed() {
repository.findAllOrderedBySpecialNameMultipleParamsIndexed("Oliver", "x", PageRequest.of(2, 3));
}

@Test // DATAJPA-1750
public void correctlyBuildSortClauseWhenSortingByFunctionAliasAndFunctionContainsPositionalParameters() {
repository.findAllAndSortByFunctionResultPositionalParameter("prefix", "suffix", Sort.by("idWithPrefixAndSuffix"));
}

@Test // DATAJPA-1750
public void correctlyBuildSortClauseWhenSortingByFunctionAliasAndFunctionContainsNamedParameters() {
repository.findAllAndSortByFunctionResultNamedParameter("prefix", "suffix", Sort.by("idWithPrefixAndSuffix"));
}

// DATAJPA-928
@Test
public void executeNativeQueryWithPage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
* @author Jeff Sheets
* @author Andrey Kovalev
* @author JyotirmoyVS
* @author Simon Paradies
*/
public interface UserRepository
extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User>, UserRepositoryCustom {
Expand Down Expand Up @@ -577,6 +578,17 @@ Page<User> findAllOrderedBySpecialNameMultipleParams(@Param("name") String name,
value = "SELECT u FROM User u WHERE ?2 = 'x' ORDER BY CASE WHEN (u.firstname >= ?1) THEN 0 ELSE 1 END, u.firstname")
Page<User> findAllOrderedBySpecialNameMultipleParamsIndexed(String name, String other, Pageable page);

// DATAJPA-1750
@Query("select concat(?1,u.id,?2) as idWithPrefixAndSuffix from #{#entityName} u")
List<String> findAllAndSortByFunctionResultPositionalParameter(
@Param("positionalParameter1") String positionalParameter1,
@Param("positionalParameter2") String positionalParameter2, Sort sort);

// DATAJPA-1750
@Query("select concat(:namedParameter1,u.id,:namedParameter2) as idWithPrefixAndSuffix from #{#entityName} u")
List<String> findAllAndSortByFunctionResultNamedParameter(@Param("namedParameter1") String namedParameter1,
@Param("namedParameter2") String namedParameter2, Sort sort);

// DATAJPA-928
Page<User> findByNativeNamedQueryWithPageable(Pageable pageable);

Expand Down