Skip to content

Commit d5743ef

Browse files
committed
Polishing.
Add test for correct IS NULL rendering in keyset-based scrolling queries. See #4275
1 parent 476e9d8 commit d5743ef

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutorUnitTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
import java.sql.Date;
2424
import java.time.LocalDate;
25+
import java.util.LinkedHashMap;
2526
import java.util.List;
27+
import java.util.Map;
2628
import java.util.stream.Stream;
2729

2830
import org.hibernate.LazyInitializationException;
@@ -31,9 +33,11 @@
3133
import org.junit.jupiter.api.extension.ExtendWith;
3234

3335
import org.springframework.dao.IncorrectResultSizeDataAccessException;
36+
import org.springframework.data.domain.KeysetScrollPosition;
3437
import org.springframework.data.domain.Page;
3538
import org.springframework.data.domain.PageRequest;
3639
import org.springframework.data.domain.Pageable;
40+
import org.springframework.data.domain.ScrollPosition;
3741
import org.springframework.data.domain.Slice;
3842
import org.springframework.data.domain.Sort;
3943
import org.springframework.data.domain.Sort.Direction;
@@ -42,6 +46,7 @@
4246
import org.springframework.data.jpa.domain.sample.QUser;
4347
import org.springframework.data.jpa.domain.sample.Role;
4448
import org.springframework.data.jpa.domain.sample.User;
49+
import org.springframework.data.jpa.repository.query.KeysetScrollDelegate;
4550
import org.springframework.data.querydsl.QPageRequest;
4651
import org.springframework.data.querydsl.QSort;
4752
import org.springframework.data.querydsl.SimpleEntityPathResolver;
@@ -53,6 +58,8 @@
5358
import com.querydsl.core.types.dsl.BooleanExpression;
5459
import com.querydsl.core.types.dsl.PathBuilder;
5560
import com.querydsl.core.types.dsl.PathBuilderFactory;
61+
import com.querydsl.jpa.HQLTemplates;
62+
import com.querydsl.jpa.JPQLSerializer;
5663

5764
/**
5865
* Integration test for {@link QuerydslJpaPredicateExecutor}.
@@ -65,6 +72,7 @@
6572
* @author Malte Mauelshagen
6673
* @author Greg Turnquist
6774
* @author Krzysztof Krason
75+
* @author Ilya Bakaev
6876
*/
6977
@ExtendWith(SpringExtension.class)
7078
@ContextConfiguration("classpath:hibernate-infrastructure.xml")
@@ -562,6 +570,28 @@ void deleteShouldDeleteUsers() {
562570
assertThat(predicateExecutor.findAll(user.dateOfBirth.isNull())).isEmpty();
563571
}
564572

573+
@Test // GH-4275
574+
void keysetPredicateRendersIsNullCorrectly() {
575+
576+
Map<String, Object> keys = new LinkedHashMap<>();
577+
keys.put("firstname", "Jane");
578+
keys.put("lastname", null);
579+
keys.put("emailAddress", "jane@doe2.com");
580+
581+
KeysetScrollPosition keyset = ScrollPosition.forward(keys);
582+
Sort sort = Sort.by(Order.asc("firstname"), Order.asc("lastname"), Order.asc("emailAddress"));
583+
584+
var strategy = predicateExecutor.new QuerydslQueryStrategy();
585+
BooleanExpression predicate = KeysetScrollDelegate.of(keyset.getDirection()).createPredicate(keyset, sort,
586+
strategy);
587+
588+
JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT);
589+
serializer.handle(predicate);
590+
String jpql = serializer.toString();
591+
592+
assertThat(jpql).contains("lastname is null").contains("lastname is not null").doesNotContain("= null");
593+
}
594+
565595
private interface UserProjectionInterfaceBased {
566596

567597
String getFirstname();

0 commit comments

Comments
 (0)