/******************************************************************************* * 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * SAP - initial API and implementation ******************************************************************************/ package org.eclipse.persistence.testing.tests.wdf.jpa1.query; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import org.eclipse.persistence.testing.framework.wdf.Bugzilla; import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment; import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee; import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base; import org.junit.Test; @SuppressWarnings("unchecked") public class TestSetFunctions extends JPA1Base { private void verifyBigDecimal(EntityManager em, String txt, BigDecimal expected) { Query query = em.createQuery(txt); List result = query.getResultList(); verify(result.size() == 1, "wrong resultcount"); Iterator iter = result.iterator(); verify(iter.hasNext(), "no row found"); BigDecimal bigDecimal = (BigDecimal) iter.next(); verify(bigDecimal.compareTo(expected) == 0, "wrong result: " + bigDecimal); verify(!iter.hasNext(), "too many rows found"); } private void verifyDouble(EntityManager em, String txt, Double expected) { Query query = em.createQuery(txt); List result = query.getResultList(); verify(result.size() == 1, "wrong resultcount"); Iterator iter = result.iterator(); verify(iter.hasNext(), "no row found"); Double doubleValue = (Double) iter.next(); verify(doubleValue.compareTo(expected) == 0, "wrong result: " + doubleValue); verify(!iter.hasNext(), "too many rows found"); } @Override protected void setup() { JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { env.beginTransaction(em); em.persist(new Employee(1, "Ulla", "Schmidt", null, BigDecimal.valueOf(5000))); em.persist(new Employee(2, "Knut", "M\u00fcller", null, BigDecimal.valueOf(6000))); em.persist(new Employee(3, "Kuno", "Maier", null, BigDecimal.valueOf(10000))); env.commitTransactionAndClear(em); } finally { closeEntityManager(em); } } @Test public void testSum() { JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { verifyBigDecimal(em, "select sum(e.salary) from Employee e", BigDecimal.valueOf(21000)); } finally { closeEntityManager(em); } } @Test public void testMin() { JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { verifyBigDecimal(em, "select min(e.salary) from Employee e", BigDecimal.valueOf(5000)); verifyBigDecimal(em, "select min(e.salary) from Employee e where e.firstname like 'K%'", BigDecimal.valueOf(6000)); } finally { closeEntityManager(em); } } @Test public void testFindEmployeeWithMinimalSalary() { // TODO subqueries not finished yet JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { Query query = em .createQuery("select e from Employee e where e.salary = (select min (e2.salary) from Employee e2) "); List result = query.getResultList(); Iterator iterator = result.iterator(); verify(iterator.hasNext(), "no row found"); Employee first = (Employee) iterator.next(); verify(first.getId() == 1, "wrong employee"); verify(!iterator.hasNext(), "too many rows"); } finally { closeEntityManager(em); } } @Test public void testMax() { JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { verifyBigDecimal(em, "select max(e.salary) from Employee e", BigDecimal.valueOf(10000)); } finally { closeEntityManager(em); } } @Test public void testAverage() { JPAEnvironment env = getEnvironment(); EntityManager em = env.getEntityManager(); try { verifyDouble(em, "select avg(e.salary) from Employee e", Double.valueOf(7000)); } finally { closeEntityManager(em); } } }