Skip to content

Commit f47de21

Browse files
committed
add tests for CriteriaBuilder.extract()
this was new in JPA 3.2
1 parent 7628bd2 commit f47de21

File tree

1 file changed

+94
-0
lines changed
  • hibernate-core/src/test/java/org/hibernate/orm/test/query/criteria

1 file changed

+94
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.query.criteria;
6+
7+
import jakarta.persistence.criteria.LocalDateField;
8+
import jakarta.persistence.criteria.LocalDateTimeField;
9+
import jakarta.persistence.criteria.LocalTimeField;
10+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
11+
import org.hibernate.testing.orm.junit.Jpa;
12+
import org.junit.jupiter.api.Test;
13+
14+
import java.time.LocalDate;
15+
import java.time.LocalDateTime;
16+
import java.time.LocalTime;
17+
18+
import static org.junit.jupiter.api.Assertions.assertEquals;
19+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
20+
21+
@Jpa()
22+
class ExtractTest {
23+
@Test void testLocalDate(EntityManagerFactoryScope scope) {
24+
scope.inEntityManager( entityManager -> {
25+
var builder = entityManager.getCriteriaBuilder();
26+
var query = builder.createQuery( Object[].class );
27+
query.select( builder.array(
28+
builder.extract( LocalDateField.YEAR, builder.localDate() ),
29+
builder.extract( LocalDateField.MONTH, builder.localDate() ),
30+
builder.extract( LocalDateField.DAY, builder.localDate() )
31+
) );
32+
var result = entityManager.createQuery( query ).getSingleResult();
33+
LocalDate now = LocalDate.now();
34+
assertEquals( now.getYear(), result[0] );
35+
assertEquals( now.getMonth().getValue(), result[1] );
36+
assertEquals( now.getDayOfMonth(), result[2] );
37+
} );
38+
}
39+
40+
@Test void testLocalTime(EntityManagerFactoryScope scope) {
41+
scope.inEntityManager( entityManager -> {
42+
var builder = entityManager.getCriteriaBuilder();
43+
var query = builder.createQuery( Object[].class );
44+
final LocalTime localTime = LocalTime.of( 3, 30, 11 );
45+
query.select( builder.array(
46+
builder.extract( LocalTimeField.HOUR, builder.literal( localTime ) ),
47+
builder.extract( LocalTimeField.MINUTE, builder.literal( localTime ) ),
48+
builder.extract( LocalTimeField.SECOND, builder.literal( localTime ) )
49+
) );
50+
var result = entityManager.createQuery( query ).getSingleResult();
51+
assertEquals( localTime.getHour(), result[0] );
52+
assertEquals( localTime.getMinute(), result[1] );
53+
assertEquals( localTime.getSecond(), ((Double) result[2]).intValue() );
54+
} );
55+
}
56+
57+
@Test void testLocalDateTime(EntityManagerFactoryScope scope) {
58+
scope.inEntityManager( entityManager -> {
59+
var builder = entityManager.getCriteriaBuilder();
60+
var query = builder.createQuery( Object[].class );
61+
final LocalDateTime localDateTime =
62+
LocalDateTime.of(2020, 10, 10, 3, 30, 11 );
63+
query.select( builder.array(
64+
builder.extract( LocalDateTimeField.YEAR, builder.literal( localDateTime ) ),
65+
builder.extract( LocalDateTimeField.MONTH, builder.literal( localDateTime ) ),
66+
builder.extract( LocalDateTimeField.DAY, builder.literal( localDateTime ) ),
67+
builder.extract( LocalDateTimeField.HOUR, builder.literal( localDateTime ) ),
68+
builder.extract( LocalDateTimeField.MINUTE, builder.literal( localDateTime ) ),
69+
builder.extract( LocalDateTimeField.SECOND, builder.literal( localDateTime ) ),
70+
builder.extract( LocalDateTimeField.QUARTER, builder.literal( localDateTime ) ),
71+
builder.extract( LocalDateTimeField.DATE, builder.literal( localDateTime ) ),
72+
builder.extract( LocalDateTimeField.TIME, builder.literal( localDateTime ) )
73+
) );
74+
var result = entityManager.createQuery( query ).getSingleResult();
75+
assertEquals( localDateTime.getYear(), result[0] );
76+
assertEquals( localDateTime.getMonth().getValue(), result[1] );
77+
assertEquals( localDateTime.getDayOfMonth(), result[2] );
78+
assertEquals( localDateTime.getHour(), result[3] );
79+
assertEquals( localDateTime.getMinute(), result[4] );
80+
assertEquals( localDateTime.getSecond(), ((Double) result[5]).intValue() );
81+
assertEquals( 4, result[6] );
82+
assertInstanceOf( LocalDate.class, result[7] );
83+
LocalDate date = (LocalDate) result[7];
84+
assertEquals( localDateTime.getYear(), date.getYear() );
85+
assertEquals( localDateTime.getMonth(), date.getMonth() );
86+
assertEquals( localDateTime.getDayOfMonth(), date.getDayOfMonth() );
87+
assertInstanceOf( LocalTime.class, result[8] );
88+
LocalTime time = (LocalTime) result[8];
89+
assertEquals( localDateTime.getHour(), time.getHour() );
90+
assertEquals( localDateTime.getMinute(), time.getMinute() );
91+
assertEquals( localDateTime.getSecond(), time.getSecond() );
92+
} );
93+
}
94+
}

0 commit comments

Comments
 (0)