blob: 1bdf308e07d8f57352d4a9b7b4ebf54b48f6cba8 [file] [log] [blame]
/*
* Copyright (c) 2005, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2015 SAP. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// SAP - initial API and implementation
package org.eclipse.persistence.testing.tests.wdf.jpa1.query;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment;
import org.eclipse.persistence.testing.framework.wdf.ToBeInvestigated;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Hobby;
import org.eclipse.persistence.testing.models.wdf.jpa1.types.BasicTypesFieldAccess;
import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base;
import org.eclipse.persistence.testing.tests.wdf.jpa1.query.Middle.MiddleInner.Inner;
import org.junit.Test;
public class TestSelectList extends JPA1Base {
private void init() throws SQLException {
clearAllTables();
Employee hugo = new Employee(1, "Hugo", "Maier", null);
Employee tina = new Employee(2, "Tina", "Schmidt", null);
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
em.persist(hugo);
em.persist(tina);
env.commitTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
@Test
public void testNewString() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select new java.lang.String(e.firstname) from Employee e where e.id = 1");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify("Hugo".equals(object), "got wrong object: " + object);
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
@ToBeInvestigated
public void testNewInner() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em
.createQuery("select new org.eclipse.persistence.testing.tests.wdf.jpa1.query.Middle.MiddleInner.Inner(e.firstname) from Employee e where e.id = 1");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Inner, "got wrong class: " + object.getClass());
verify("Hugo".equals(((Inner) object).getTxt()), "got wrong object: " + object);
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
public void testNewProject() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
getEnvironment().beginTransaction(em);
Query query = em.createQuery("select new " + Hobby.class.getName()
+ "(e.firstname, e.lastname) from Employee e where e.id = 2");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Hobby, "got wrong class: " + object.getClass());
Hobby hobby = (Hobby) object;
verify("Schmidt".equals(hobby.getDescription()), "hobby has wrong description: " + hobby.getDescription());
verify(!em.contains(hobby), "em contains hobby");
verify(!iter.hasNext(), "too many rows");
getEnvironment().rollbackTransaction(em);
} finally {
closeEntityManager(em);
}
}
@Test
public void testTwoSelectListItems() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select e.firstname, e.lastname from Employee e where e.id = 1");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Object[], "result is no array");
Object[] array = (Object[]) object;
verify(array.length == 2, "wrong length: " + array.length);
verify("Hugo".equals(array[0]), "got wrong first name: " + array[0]);
verify(array[0] instanceof String, "wrong class: " + array[0].getClass());
verify("Maier".equals(array[1]), "got wrong last name: " + array[1]);
verify(array[1] instanceof String, "wrong class: " + array[1].getClass());
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
public void testMixedSelectListItems() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select e.firstname, e from Employee e where e.id = 1");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Object[], "result is no array");
Object[] array = (Object[]) object;
verify(array.length == 2, "wrong length: " + array.length);
verify(array[0] instanceof String, "wrong class: " + array[0].getClass());
verify("Hugo".equals(array[0]), "got wrong first name: " + array[0]);
verify(array[1] instanceof Employee, "wrong class: " + array[1].getClass());
Employee employee = (Employee) array[1];
verify(employee.getId() == 1, "got wrong employee: " + employee.getId());
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
public void testMixedSelectListItemsReverse() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select e, e.firstname from Employee e where e.id = 1");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Object[], "result is no array");
Object[] array = (Object[]) object;
verify(array.length == 2, "wrong length: " + array.length);
verify(array[0] instanceof Employee, "wrong class: " + array[0].getClass());
Employee employee = (Employee) array[0];
verify(employee.getId() == 1, "got wrong employee: " + employee.getId());
verify(array[1] instanceof String, "wrong class: " + array[1].getClass());
verify("Hugo".equals(array[1]), "got wrong first name: " + array[1]);
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
public void testAverage() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select avg(e.id) from Employee e");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Number, "result is not numeric but: " + object.getClass().getName());
verify(object instanceof Double, "result is not Double but: " + object.getClass().getName());
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
@ToBeInvestigated
public void testConstructorAverage() throws SQLException {
init();
EntityManager em = getEnvironment().getEntityManager();
try {
Query query = em.createQuery("select new java.lang.Double(avg(e.id)) from Employee e");
Iterator<?> iter = query.getResultList().iterator();
verify(iter.hasNext(), " no row found");
Object object = iter.next();
verify(object instanceof Number, "result is not numeric but: " + object.getClass().getName());
verify(object instanceof Double, "result is not Double but: " + object.getClass().getName());
verify(!iter.hasNext(), "too many rows");
} finally {
closeEntityManager(em);
}
}
@Test
// @TestProperties(unsupportedDatabaseVendors=DatabaseVendor.OPEN_SQL)
@ToBeInvestigated
public void testConstructorArgumentBoxing() throws SQLException {
List<BasicTypesFieldAccess> entities = new ArrayList<BasicTypesFieldAccess>();
init();
EntityManager em = getEnvironment().getEntityManager();
getEnvironment().beginTransaction(em);
try {
int id = 7489;
for (int i = 0; i < 10; i++) {
entities.add(new BasicTypesFieldAccess(id++));
}
for (BasicTypesFieldAccess btfa : entities) {
btfa.setPrimitiveDouble(Double.parseDouble("0.5"));
btfa.setString2Varchar("maeh");
btfa.setPrimitiveLong(456);
btfa.setBigDecimal(new BigDecimal(5));
btfa.setBigInteger(BigInteger.valueOf(10));
em.persist(btfa);
}
} finally {
em.flush();
getEnvironment().commitTransaction(em);
}
try {
Query q = em
.createQuery("SELECT new com.sap.engine.services.orpersistence.jver.query.TestSelectList.TestClass2"
+ "(btfa.string2Varchar, count(btfa.string2Varchar), avg(btfa.primitiveLong)) FROM BasicTypesFieldAccess btfa GROUP BY btfa.string2Varchar");
q.getResultList();
} finally {
closeEntityManager(em);
}
}
public static class TestClass2 {
private final String field1;
private final long field2;
private final double field3;
public String getField1() {
return field1;
}
public long getField2() {
return field2;
}
public double getField3() {
return field3;
}
public TestClass2(String field1, Long field2, Double field3) {
super();
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
}