Skip to content

Commit c040cb6

Browse files
committed
HHH-9343 - Add test fro issue
1 parent 5373114 commit c040cb6

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/criteria/simplecase/BasicSimpleCaseTest.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@
1010
import javax.persistence.EntityManager;
1111
import javax.persistence.Id;
1212
import javax.persistence.Table;
13+
import javax.persistence.Tuple;
1314
import javax.persistence.criteria.CriteriaBuilder;
1415
import javax.persistence.criteria.CriteriaQuery;
16+
import javax.persistence.criteria.Expression;
1517
import javax.persistence.criteria.Path;
1618
import javax.persistence.criteria.Root;
1719

1820
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
1921

2022
import org.junit.Test;
2123

24+
import org.hibernate.testing.TestForIssue;
25+
2226
import static javax.persistence.criteria.CriteriaBuilder.SimpleCase;
2327

2428
/**
@@ -34,6 +38,88 @@ protected Class<?>[] getAnnotatedClasses() {
3438
return new Class[] {Customer.class};
3539
}
3640

41+
@Test
42+
@TestForIssue(jiraKey = "HHH-9343")
43+
public void testCaseStringResult() {
44+
EntityManager em = getOrCreateEntityManager();
45+
CriteriaBuilder builder = em.getCriteriaBuilder();
46+
47+
CriteriaQuery<Tuple> query = builder.createTupleQuery();
48+
Root<Customer> root = query.from( Customer.class );
49+
50+
Path<String> emailPath = root.get( "email" );
51+
CriteriaBuilder.Case<String> selectCase = builder.selectCase();
52+
selectCase.when( builder.greaterThan( builder.length( emailPath ), 13 ), "Long" );
53+
selectCase.when( builder.greaterThan( builder.length( emailPath ), 12 ), "Normal" );
54+
Expression<String> emailType = selectCase.otherwise( "Unknown" );
55+
56+
query.multiselect( emailPath, emailType );
57+
58+
em.createQuery( query ).getResultList();
59+
}
60+
61+
@Test
62+
@TestForIssue(jiraKey = "HHH-9343")
63+
public void testCaseIntegerResult() {
64+
EntityManager em = getOrCreateEntityManager();
65+
em.getTransaction().begin();
66+
67+
CriteriaBuilder builder = em.getCriteriaBuilder();
68+
69+
CriteriaQuery<Tuple> query = builder.createTupleQuery();
70+
Root<Customer> root = query.from( Customer.class );
71+
72+
Path<String> emailPath = root.get( "email" );
73+
CriteriaBuilder.Case<Integer> selectCase = builder.selectCase();
74+
selectCase.when( builder.greaterThan( builder.length( emailPath ), 13 ), 2 );
75+
selectCase.when( builder.greaterThan( builder.length( emailPath ), 12 ), 1 );
76+
Expression<Integer> emailType = selectCase.otherwise( 0 );
77+
78+
query.multiselect( emailPath, emailType );
79+
80+
em.createQuery( query ).getResultList();
81+
}
82+
83+
@Test
84+
@TestForIssue(jiraKey = "HHH-9343")
85+
public void testCaseLiteralResult() {
86+
EntityManager em = getOrCreateEntityManager();
87+
em.getTransaction().begin();
88+
89+
CriteriaBuilder cb = em.getCriteriaBuilder();
90+
CriteriaQuery<Boolean> cq = cb.createQuery( Boolean.class );
91+
Root<Customer> expense_ = cq.from( Customer.class );
92+
em.createQuery(
93+
cq.distinct( true ).where(
94+
cb.equal( expense_.get( "email" ), "@hibernate.com" )
95+
).multiselect(
96+
cb.selectCase()
97+
.when( cb.gt( cb.count( expense_ ), cb.literal( 0L ) ), cb.literal( true ) )
98+
.otherwise( cb.literal( false ) )
99+
)
100+
).getSingleResult();
101+
}
102+
103+
@Test
104+
@TestForIssue(jiraKey = "HHH-9343")
105+
public void testCaseLiteralResult2() {
106+
EntityManager em = getOrCreateEntityManager();
107+
em.getTransaction().begin();
108+
109+
CriteriaBuilder cb = em.getCriteriaBuilder();
110+
CriteriaQuery<Boolean> cq = cb.createQuery( Boolean.class );
111+
Root<Customer> expense_ = cq.from( Customer.class );
112+
em.createQuery(
113+
cq.distinct( true ).where(
114+
cb.equal( expense_.get( "email" ), "@hibernate.com" )
115+
).multiselect(
116+
cb.selectCase()
117+
.when( cb.gt( cb.count( expense_ ), cb.literal( 0L ) ), true )
118+
.otherwise( false )
119+
)
120+
).getSingleResult();
121+
}
122+
37123
@Test
38124
public void testCaseInOrderBy() {
39125
EntityManager em = getOrCreateEntityManager();

0 commit comments

Comments
 (0)