blob: 557c0ad55afd540499e4f84a1ec4b2f5f4633647 [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 static org.junit.Assert.assertEquals;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import org.eclipse.persistence.testing.framework.wdf.Bugzilla;
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.Cubicle;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.CubiclePrimaryKeyClass;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Department;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Project;
import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base;
import org.junit.Test;
public class TestCount extends JPA1Base {
private final Set<Department> ALL_DEPARTMENTS = new HashSet<Department>();
private final Department dep10 = new Department(10, "ten");
private final Department dep20 = new Department(20, "twenty");
@Override
protected void setup() {
ALL_DEPARTMENTS.add(dep10);
ALL_DEPARTMENTS.add(dep20);
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
em.persist(dep10);
em.persist(dep20);
env.commitTransactionAndClear(em);
env.beginTransaction(em);
Project eisKratzen = new Project("Eis Kratzen");
em.persist(eisKratzen);
Project schneeSchieben = new Project("Schnee Schieben");
em.persist(schneeSchieben);
Cubicle cubicle = new Cubicle(new CubiclePrimaryKeyClass(1, 2), "red-green-gold",
null);
em.persist(cubicle);
env.commitTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
private void verifyCountResult(String txt, int expected) {
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
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");
Number count = (Number) iter.next();
assertEquals(expected, count.intValue());
verify(!iter.hasNext(), "too many rows found");
} finally {
closeEntityManager(em);
}
}
@Test
public void testCount() {
verifyCountResult("select count(d) from Department d", 2);
verifyCountResult("select count(distinct d) from Department d", 2);
verifyCountResult("select count(c) from Cubicle c", 1);
verifyCountResult("select count(distinct d.name) from Department d", 2);
verifyCountResult("select distinct count(d) from Department d", 2);
}
@Test
public void testCountDistinctCompoundKey() {
verifyCountResult("select count(distinct c) from Cubicle c", 1);
}
@Test
@ToBeInvestigated
public void testCount0() {
verifyCountResult("select count(d) from Department d, Project p", 4);
}
@Test
public void testCount1() {
verifyCountResult("select count(distinct d) from Department d, Project p", 2);
}
@Test
@ToBeInvestigated
public void testCount2() {
verifyCountResult("select count(c) from Cubicle c, Project p", 2);
}
@Test
// @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL })
public void testCountNoOpenSQL() {
verifyCountResult("select count(d.name) from Department d", 2);
}
}