Skip to content

Commit

Permalink
Bug 579327: Test bug on Derby & DB2z
Browse files Browse the repository at this point in the history
Signed-off-by: Will Dazey <dazeydev.3@gmail.com>
  • Loading branch information
dazey3 committed Apr 6, 2022
1 parent 1a4d83d commit 5be5c8c
Showing 1 changed file with 261 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,15 @@
import jakarta.persistence.criteria.ParameterExpression;
import jakarta.persistence.criteria.Root;

import org.eclipse.persistence.internal.databaseaccess.Platform;
import org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl;
import org.eclipse.persistence.jpa.test.framework.DDLGen;
import org.eclipse.persistence.jpa.test.framework.Emf;
import org.eclipse.persistence.jpa.test.framework.EmfRunner;
import org.eclipse.persistence.jpa.test.framework.Property;
import org.eclipse.persistence.jpa.test.query.model.EntityTbl01;
import org.eclipse.persistence.jpa.test.query.model.EntityTbl01_;
import org.eclipse.persistence.platform.database.DatabasePlatform;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand Down Expand Up @@ -96,6 +99,67 @@ public void testQueryIsNullLiterals1() {
}
}

@Test
public void testQueryIsNullLiterals2() {
if (emf == null)
return;

if(!POPULATED)
populate();

Platform platform = getPlatform(emf);
EntityManager em = emf.createEntityManager();

// DB2 on z and Derby does not support null literal values in 'IS NULL' function
// ie. "... WHERE (NULL IS NULL)"
if(platform.isDB2Z() || platform.isDerby()) {
return;
}

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
+ "WHERE NULL IS NULL", String.class);

List<String> dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());

// equivalent CriteriaBuilder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cquery = cb.createQuery(String.class);
Root<EntityTbl01> root = cquery.from(EntityTbl01.class);
cquery.multiselect(root.get(EntityTbl01_.itemString1));

cquery.where(cb.isNull(cb.nullLiteral(String.class)));

query = em.createQuery(cquery);
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());

// equivalent, alternative CriteriaBuilder
CriteriaBuilder cb2 = em.getCriteriaBuilder();
CriteriaQuery<String> cquery2 = cb2.createQuery(String.class);
Root<EntityTbl01> root2 = cquery2.from(EntityTbl01.class);
cquery2.multiselect(root2.get(EntityTbl01_.itemString1));

cquery2.where(cb2.nullLiteral(String.class).isNull());

query = em.createQuery(cquery2);
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if(em.isOpen()) {
em.close();
}
}
}

@Test
public void testQueryIsNotNullLiterals1() {
if (emf == null)
Expand Down Expand Up @@ -150,6 +214,67 @@ public void testQueryIsNotNullLiterals1() {
}
}

@Test
public void testQueryIsNotNullLiterals2() {
if (emf == null)
return;

if(!POPULATED)
populate();

Platform platform = getPlatform(emf);
EntityManager em = emf.createEntityManager();

// DB2 on z and Derby does not support null literal values in 'IS NOT NULL' function
// ie. "... WHERE (NULL IS NOT NULL)"
if(platform.isDB2Z() || platform.isDerby()) {
return;
}

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
+ "WHERE NULL IS NOT NULL", String.class);

List<String> dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());

// equivalent CriteriaBuilder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cquery = cb.createQuery(String.class);
Root<EntityTbl01> root = cquery.from(EntityTbl01.class);
cquery.multiselect(root.get(EntityTbl01_.itemString1));

cquery.where(cb.isNotNull(cb.nullLiteral(String.class)));

query = em.createQuery(cquery);
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());

// equivalent, alternative CriteriaBuilder
CriteriaBuilder cb2 = em.getCriteriaBuilder();
CriteriaQuery<String> cquery2 = cb2.createQuery(String.class);
Root<EntityTbl01> root2 = cquery2.from(EntityTbl01.class);
cquery2.multiselect(root2.get(EntityTbl01_.itemString1));

cquery2.where(cb2.nullLiteral(String.class).isNotNull());

query = em.createQuery(cquery2);
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if(em.isOpen()) {
em.close();
}
}
}

@Test
public void testQueryIsNullParameters1() {
if (emf == null)
Expand All @@ -160,6 +285,72 @@ public void testQueryIsNullParameters1() {

EntityManager em = emf.createEntityManager();

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
+ "WHERE ?1 IS NULL", String.class);
query.setParameter(1, "HELLO");

List<String> dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());

// equivalent CriteriaBuilder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cquery = cb.createQuery(String.class);
Root<EntityTbl01> root = cquery.from(EntityTbl01.class);
cquery.multiselect(root.get(EntityTbl01_.itemString1));

ParameterExpression<String> strParam1 = cb.parameter(String.class);
cquery.where(cb.isNull(strParam1));

query = em.createQuery(cquery);
query.setParameter(strParam1, "HELLO");
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());

// equivalent, alternative CriteriaBuilder
CriteriaBuilder cb2 = em.getCriteriaBuilder();
CriteriaQuery<String> cquery2 = cb2.createQuery(String.class);
Root<EntityTbl01> root2 = cquery2.from(EntityTbl01.class);
cquery2.multiselect(root2.get(EntityTbl01_.itemString1));

ParameterExpression<String> strParam2 = cb.parameter(String.class);
cquery2.where(strParam2.isNull());

query = em.createQuery(cquery2);
query.setParameter(strParam2, "HELLO");
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(0, dto01.size());
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if(em.isOpen()) {
em.close();
}
}
}

@Test
public void testQueryIsNullParameters2() {
if (emf == null)
return;

if(!POPULATED)
populate();

Platform platform = getPlatform(emf);
EntityManager em = emf.createEntityManager();

// DB2 on z and Derby does not support null literal values in 'IS NULL' function
// ie. "... WHERE (NULL IS NULL)"
if(platform.isDB2Z() || platform.isDerby()) {
return;
}

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
Expand Down Expand Up @@ -219,6 +410,72 @@ public void testQueryIsNotNullParameters1() {

EntityManager em = emf.createEntityManager();

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
+ "WHERE ?1 IS NOT NULL", String.class);
query.setParameter(1, "HELLO");

List<String> dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());

// equivalent CriteriaBuilder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cquery = cb.createQuery(String.class);
Root<EntityTbl01> root = cquery.from(EntityTbl01.class);
cquery.multiselect(root.get(EntityTbl01_.itemString1));

ParameterExpression<String> strParam1 = cb.parameter(String.class);
cquery.where(cb.isNotNull(strParam1));

query = em.createQuery(cquery);
query.setParameter(strParam1, "HELLO");
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());

// equivalent, alternative CriteriaBuilder
CriteriaBuilder cb2 = em.getCriteriaBuilder();
CriteriaQuery<String> cquery2 = cb2.createQuery(String.class);
Root<EntityTbl01> root2 = cquery2.from(EntityTbl01.class);
cquery2.multiselect(root2.get(EntityTbl01_.itemString1));

ParameterExpression<String> strParam2 = cb.parameter(String.class);
cquery2.where(strParam2.isNotNull());

query = em.createQuery(cquery2);
query.setParameter(strParam2, "HELLO");
dto01 = query.getResultList();
assertNotNull(dto01);
assertEquals(4, dto01.size());
} finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if(em.isOpen()) {
em.close();
}
}
}

@Test
public void testQueryIsNotNullParameters2() {
if (emf == null)
return;

if(!POPULATED)
populate();

Platform platform = getPlatform(emf);
EntityManager em = emf.createEntityManager();

// DB2 on z and Derby does not support null literal values in 'IS NOT NULL' function
// ie. "... WHERE (NULL IS NOT NULL)"
if(platform.isDB2Z() || platform.isDerby()) {
return;
}

try {
TypedQuery<String> query = em.createQuery(""
+ "SELECT t.itemString1 FROM EntityTbl01 t "
Expand Down Expand Up @@ -318,4 +575,8 @@ private void populate() {
}
}
}

private DatabasePlatform getPlatform(EntityManagerFactory emf) {
return ((EntityManagerFactoryImpl)emf).getServerSession().getPlatform();
}
}

0 comments on commit 5be5c8c

Please sign in to comment.