blob: 9d2ec60c717900d385c402a88e31c1ec0bab3de8 [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.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
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.types.BasicTypesFieldAccess;
import org.eclipse.persistence.testing.models.wdf.jpa1.types.UserDefinedEnum;
import org.eclipse.persistence.testing.models.wdf.jpa1.types.UserDefinedSerializable;
import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base;
import org.junit.Test;
public class TestSelectListTypes extends JPA1Base {
@Override
protected void setup() throws SQLException {
super.setup();
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
BasicTypesFieldAccess obj = new BasicTypesFieldAccess(0);
obj.fill();
env.beginTransaction(em);
em.persist(obj);
env.commitTransactionAndClear(em);
obj = em.find(BasicTypesFieldAccess.class, 0);
} finally {
closeEntityManager(em);
}
}
private void validateType(String subList, Class<?> type) {
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
Query query = em.createQuery("select " + subList + " from BasicTypesFieldAccess b");
Object object = query.getSingleResult();
verify(type.isAssignableFrom(object.getClass()), "The expected class >>" + type.getName()
+ "<< is not asignable from the result class >>" + object.getClass().getName() + "<<.");
} finally {
closeEntityManager(em);
}
}
private void validateField(String fieldName, Class<?> type) {
validateType("b." + fieldName, type);
}
private void validateCount(String fieldName) {
validateType("count(distinct b." + fieldName + ")", Long.class);
}
private void validateAvg(String fieldName) {
validateType("avg(b." + fieldName + ")", Double.class);
}
private void validateSum(String fieldName, Class<?> type) {
validateType("sum(b." + fieldName + ")", type);
}
private void validateMax(String fieldName, Class<?> type) {
validateType("max(b." + fieldName + ")", type);
}
// primitive types
@Test
@Bugzilla(bugid=348874)
public void testPrimitiveBoolean() {
validateField("primitiveBoolean", Boolean.class);
}
@Test
public void testPrimitiveByte() {
validateField("primititveByte", Byte.class);
}
@Test
public void testPrimitiveChar() {
validateField("primitiveChar", Character.class);
}
@Test
public void testPrimitiveShort() {
validateField("primitiveShort", Short.class);
}
@Test
public void testPrimitiveInt() {
validateField("primitiveInt", Integer.class);
}
@Test
public void testPrimitiveLong() {
validateField("primitiveLong", Long.class);
}
@Test
public void testPrimitiveFloat() {
validateField("primitiveFloat", Float.class);
}
@Test
public void testPrimitiveDouble() {
validateField("primitiveDouble", Double.class);
}
// wrappers of primitive types
@Test
@Bugzilla(bugid=348874)
public void testWrapperBoolean() {
validateField("wrapperBoolean", Boolean.class);
}
@Test
public void testWrapperByte() {
validateField("wrapperByte", Byte.class);
}
@Test
public void testWrapperCharacter() {
validateField("wrapperCharacter", Character.class);
}
@Test
public void testWrapperShort() {
validateField("wrapperShort", Short.class);
}
@Test
public void testWrapperInteger() {
validateField("wrapperInteger", Integer.class);
}
@Test
public void testWrapperLong() {
validateField("wrapperLong", Long.class);
}
@Test
public void testWrapperDouble() {
validateField("wrapperDouble", Double.class);
}
@Test
public void testWrapperFloat() {
validateField("wrapperFloat", Float.class);
}
// immutable reference types
@Test
public void testString2Varchar() {
validateField("string2Varchar", String.class);
}
@Test
public void testString2Clob() {
validateField("string2Clob", String.class);
}
@Test
public void testBigDecimal() {
validateField("bigDecimal", BigDecimal.class);
}
@Test
public void testBigInteger() {
validateField("bigInteger", BigInteger.class);
}
// mutable types
@Test
public void testUtilDate() {
validateField("utilDate", java.util.Date.class);
}
@Test
public void testUtilCalendar() {
validateField("utilCalendar", java.util.Calendar.class);
}
@Test
public void testSqlDate() {
validateField("sqlDate", java.sql.Date.class);
}
@Test
public void testSqlTime() {
validateField("sqlTime", java.sql.Time.class);
}
@Test
public void testSqlTimestamp() {
validateField("sqlTimestamp", java.sql.Timestamp.class);
}
// arrays
@Test
public void testPrimitiveByteArray2Binary() {
validateField("primitiveByteArray2Binary", byte[].class);
}
@Test
public void testPrimitiveByteArray2Longvarbinary() {
validateField("primitiveByteArray2Longvarbinary", byte[].class);
}
@Test
public void testPrimitiveByteArray2Blob() {
validateField("primitiveByteArray2Blob", byte[].class);
}
@Test
public void testPrimitiveCharArray2Varchar() {
validateField("primitiveCharArray2Varchar", char[].class);
}
@Test
public void testPrimitiveCharArray2Clob() {
validateField("primitiveCharArray2Clob", char[].class);
}
@Test
public void testWrapperByteArray2Binary() {
validateField("wrapperByteArray2Binary", Byte[].class);
}
@Test
public void testWrapperByteArray2Longvarbinary() {
validateField("wrapperByteArray2Longvarbinary", Byte[].class);
}
@Test
public void testWrapperByteArray2Blob() {
validateField("wrapperByteArray2Blob", Byte[].class);
}
@Test
public void testWrapperCharArray2Varchar() {
validateField("wrapperCharacterArray2Varchar", Character[].class);
}
@SuppressWarnings("boxing")
@Test
public void testWrapperCharArray2Clob() {
validateField("wrapperCharacterArray2Clob", Character[].class);
}
@Test
public void testSerializable() {
validateField("serializable", Serializable.class);
validateField("serializable", UserDefinedSerializable.class);
}
@Test
public void testEnumString() {
validateField("enumString", Enum.class);
validateField("enumString", UserDefinedEnum.class);
}
@Test
public void testEnumOrdinal() {
validateField("enumOrdinal", Enum.class);
validateField("enumOrdinal", UserDefinedEnum.class);
}
// C O U N T * C O U N T * C O U N T * C O U N T * C O U N T * C O U N T
// primitive types
@Test
public void testCountPrimitiveBoolean() {
validateCount("primitiveBoolean");
}
@Test
public void testCountPrimitiveByte() {
validateCount("primititveByte");
}
@Test
public void testCountPrimitiveChar() {
validateCount("primitiveChar");
}
@Test
public void testCountPrimitiveShort() {
validateCount("primitiveShort");
}
@Test
public void testCountPrimitiveInt() {
validateCount("primitiveInt");
}
@Test
public void testCountPrimitiveLong() {
validateCount("primitiveLong");
}
@Test
public void testCountPrimitiveFloat() {
validateCount("primitiveFloat");
}
@Test
public void testCountPrimitiveDouble() {
validateCount("primitiveDouble");
}
// wrappers of primitive types
@Test
public void testCountWrapperBoolean() {
validateCount("wrapperBoolean");
}
@Test
public void testCountWrapperByte() {
validateCount("wrapperByte");
}
@Test
public void testCountWrapperCharacter() {
validateCount("wrapperCharacter");
}
@Test
public void testCountWrapperShort() {
validateCount("wrapperShort");
}
@Test
public void testCountWrapperInteger() {
validateCount("wrapperInteger");
}
@Test
public void testCountWrapperLong() {
validateCount("wrapperLong");
}
@Test
public void testCountWrapperDouble() {
validateCount("wrapperDouble");
}
@Test
public void testCountWrapperFloat() {
validateCount("wrapperFloat");
}
// immutable reference types
@Test
public void testCountString2Varchar() {
validateCount("string2Varchar");
}
@Test
public void testCountBigDecimal() {
validateCount("bigDecimal");
}
@Test
public void testCountBigInteger() {
validateCount("bigInteger");
}
// mutable types
@Test
public void testCountUtilDate() {
validateCount("utilDate");
}
@Test
public void testCountUtilCalendar() {
validateCount("utilCalendar");
}
@Test
public void testCountSqlDate() {
validateCount("sqlDate");
}
@Test
public void testCountSqlTime() {
validateCount("sqlTime");
}
@Test
public void testCountSqlTimestamp() {
validateCount("sqlTimestamp");
}
// arrays
@Test
public void testCountPrimitiveByteArray2Binary() {
validateCount("primitiveByteArray2Binary");
}
@Test
public void testCountPrimitiveCharArray2Varchar() {
validateCount("primitiveCharArray2Varchar");
}
@Test
public void testCountWrapperByteArray2Binary() {
validateCount("wrapperByteArray2Binary");
}
@Test
public void testCountWrapperCharArray2Varchar() {
validateCount("wrapperCharacterArray2Varchar");
}
@Test
public void testCountEnumString() {
validateCount("enumString");
}
@Test
public void testCountEnumOrdinal() {
validateCount("enumOrdinal");
}
// S U M * S U M * S U M * S U M * S U M * S U M * S U M * S U M * S U M * S U M
// primitive types
@Test
public void testSumPrimitiveByte() {
validateSum("primititveByte", Long.class);
}
@Test
public void testSumPrimitiveShort() {
validateSum("primitiveShort", Long.class);
}
@Test
public void testSumPrimitiveInt() {
validateSum("primitiveInt", Long.class);
}
@Test
public void testSumPrimitiveLong() {
validateSum("primitiveLong", Long.class);
}
@Test
public void testSumPrimitiveFloat() {
validateSum("primitiveFloat", Double.class);
}
@Test
public void testSumPrimitiveDouble() {
validateSum("primitiveDouble", Double.class);
}
// wrappers of primitive types
@Test
public void testSumWrapperByte() {
validateSum("wrapperByte", Long.class);
}
@Test
public void testSumWrapperShort() {
validateSum("wrapperShort", Long.class);
}
@Test
public void testSumWrapperInteger() {
validateSum("wrapperInteger", Long.class);
}
@Test
public void testSumWrapperLong() {
validateSum("wrapperLong", Long.class);
}
@Test
public void testSumWrapperDouble() {
validateSum("wrapperDouble", Double.class);
}
@Test
public void testSumWrapperFloat() {
validateSum("wrapperFloat", Double.class);
}
// immutable reference types
@Test
public void testSumBigDecimal() {
validateSum("bigDecimal", BigDecimal.class);
}
@Test
public void testSumBigInteger() {
validateSum("bigInteger", BigInteger.class);
}
// M A X * M A X * M A X * M A X * M A X * M A X * M A X * M A X * M A X
// primitive types
@Test
@ToBeInvestigated
public void testMaxPrimitiveByte() {
validateMax("primititveByte", Byte.class);
}
@Test
@ToBeInvestigated
public void testMaxPrimitiveChar() {
validateMax("primitiveChar", Character.class);
}
@Test
public void testMaxPrimitiveShort() {
validateMax("primitiveShort", Short.class);
}
@Test
public void testMaxPrimitiveInt() {
validateMax("primitiveInt", Integer.class);
}
@Test
public void testMaxPrimitiveLong() {
validateMax("primitiveLong", Long.class);
}
@Test
public void testMaxPrimitiveFloat() {
validateMax("primitiveFloat", Float.class);
}
@Test
public void testMaxPrimitiveDouble() {
validateMax("primitiveDouble", Double.class);
}
// wrappers of primitive types
@Test
@ToBeInvestigated
public void testMaxWrapperByte() {
validateMax("wrapperByte", Byte.class);
}
@Test
@ToBeInvestigated
public void testMaxWrapperCharacter() {
validateMax("wrapperCharacter", Character.class);
}
@Test
public void testMaxWrapperShort() {
validateMax("wrapperShort", Short.class);
}
@Test
public void testMaxWrapperInteger() {
validateMax("wrapperInteger", Integer.class);
}
@Test
public void testMaxWrapperLong() {
validateMax("wrapperLong", Long.class);
}
@Test
public void testMaxWrapperDouble() {
validateMax("wrapperDouble", Double.class);
}
@Test
public void testMaxWrapperFloat() {
validateMax("wrapperFloat", Float.class);
}
// immutable reference types
@Test
// @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.DB2_UDB_OS390 })
public void testMaxString2Varchar() {
validateMax("string2Varchar", String.class);
}
@Test
public void testMaxBigDecimal() {
validateMax("bigDecimal", BigDecimal.class);
}
@Test
public void testMaxBigInteger() {
validateMax("bigInteger", BigInteger.class);
}
// mutable types
@Test
public void testMaxUtilDate() {
validateMax("utilDate", java.util.Date.class);
}
@Test
@ToBeInvestigated
public void testMaxUtilCalendar() {
validateMax("utilCalendar", java.util.Calendar.class);
}
@Test
public void testMaxSqlDate() {
validateMax("sqlDate", java.sql.Date.class);
}
@Test
public void testMaxSqlTime() {
validateMax("sqlTime", java.sql.Time.class);
}
@Test
public void testMaxSqlTimestamp() {
validateMax("sqlTimestamp", java.sql.Timestamp.class);
}
// arrays
@Test
public void testMaxPrimitiveByteArray2Binary() {
validateMax("primitiveByteArray2Binary", byte[].class);
}
@Test
// @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.DB2_UDB_OS390 })
@ToBeInvestigated
public void testMaxPrimitiveCharArray2Varchar() {
validateMax("primitiveCharArray2Varchar", char[].class);
}
@Test
@ToBeInvestigated
public void testMaxWrapperByteArray2Binary() {
validateMax("wrapperByteArray2Binary", Byte[].class);
}
@Test
// @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.DB2_UDB_OS390 })
@ToBeInvestigated
public void testMaxWrapperCharArray2Varchar() {
validateMax("wrapperCharacterArray2Varchar", Character[].class);
}
// A V G * A V G * A V G * A V G * A V G * A V G * A V G * A V G * A V G * A V G
// primitive types
@Test
public void testAvgSumPrimitiveByte() {
validateAvg("primititveByte");
}
@Test
public void testAvgSumPrimitiveShort() {
validateAvg("primitiveShort");
}
@Test
public void testAvgSumPrimitiveInt() {
validateAvg("primitiveInt");
}
@Test
public void testAvgSumPrimitiveLong() {
validateAvg("primitiveLong");
}
@Test
public void testAvgSumPrimitiveFloat() {
validateAvg("primitiveFloat");
}
@Test
public void testAvgSumPrimitiveDouble() {
validateAvg("primitiveDouble");
}
// wrappers of primitive types
@Test
public void testAvgSumWrapperByte() {
validateAvg("wrapperByte");
}
@Test
public void testAvgSumWrapperShort() {
validateAvg("wrapperShort");
}
@Test
public void testAvgSumWrapperInteger() {
validateAvg("wrapperInteger");
}
@Test
public void testAvgSumWrapperLong() {
validateAvg("wrapperLong");
}
@Test
public void testAvgSumWrapperDouble() {
validateAvg("wrapperDouble");
}
@Test
public void testAvgSumWrapperFloat() {
validateAvg("wrapperFloat");
}
// immutable reference types
@Test
public void testAvgSumBigDecimal() {
validateAvg("bigDecimal");
}
@Test
public void testAvgSumBigInteger() {
validateAvg("bigInteger");
}
}