blob: 9f1babc8ffcee6256a90536737dc0624a93bef99 [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.sql.Date;
import java.util.Calendar;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import jakarta.persistence.TemporalType;
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.EmploymentPeriod;
import org.junit.Test;
public class TestQueryAPI extends QueryTest {
private static final String queryStringOrderedParam = "SELECT e FROM Employee e WHERE e.firstname = ?1";
private static final String queryStringNamedParam = "SELECT e FROM Employee e WHERE e.firstname = :firstname";
private static final String queryStringOrderedCalendarParam = "SELECT btfa FROM BasicTypesFieldAccess btfa WHERE btfa.utilCalendar = ?1";
private static final String queryStringNamedCalendarParam = "SELECT btfa FROM BasicTypesFieldAccess btfa WHERE btfa.utilCalendar = :parameter1";
private static final String queryStringOrderedDateParam = "SELECT btfa FROM BasicTypesFieldAccess btfa WHERE btfa.utilDate = ?1";
private static final String queryStringNamedDateParam = "SELECT btfa FROM BasicTypesFieldAccess btfa WHERE btfa.utilDate = :parameter1";
@Override
protected void setup() {
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
Employee emp = new Employee();
EmploymentPeriod empPeriod = new EmploymentPeriod();
empPeriod.setStartDate(new Date(System.currentTimeMillis() - Integer.MAX_VALUE));
empPeriod.setEndDate(new Date(System.currentTimeMillis()));
emp.setFirstName("Hans");
emp.setLastName("Wurst");
emp.setEmploymentPeriod(empPeriod);
env.beginTransaction(em);
em.persist(emp);
env.commitTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
private void assertOrderedParameterValid(final Query query, int number, final Object value) {
query.setParameter(number, value);
}
private void assertOrderedParameterInvalid(final Query query, int number, final Object value) {
boolean passed = false;
try {
query.setParameter(number, value);
} catch (IllegalArgumentException e) {
passed = true;
}
verify(passed, ("missing IllegalArgumentException"));
}
private void assertNamedParameterValid(final Query query, final String name, final Object value) {
query.setParameter(name, value);
}
private void assertNamedParameterInvalid(final Query query, final String name, final Object value) {
boolean passed = false;
try {
query.setParameter(name, value);
} catch (IllegalArgumentException e) {
passed = true;
}
verify(passed, "missing IllegalArgumentException");
}
private void assertValidQuery(final EntityManager em, final String query) {
em.createQuery(query);
}
private void assertInvalidQuery(final EntityManager em, final String query) {
boolean passed = false;
try {
em.createQuery(query);
} catch (IllegalArgumentException iaex) {
passed = true;
}
verify(passed, "missing IllegalArgumentException");
}
@Test
public void testQueryCreation() {
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
assertValidQuery(em, "SELECT e FROM Employee e");
assertInvalidQuery(em, "SELECT BLAAfjdslkaf fasflkfj weoi jasdf");
} finally {
closeEntityManager(em);
}
}
@Test
public void testParameterSetting() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
try {
// test valid ordered param
Query q1 = em.createQuery(queryStringOrderedParam);
assertOrderedParameterValid(q1, 1, "hugo");
// test valid named param
Query q2 = em.createQuery(queryStringNamedParam);
assertNamedParameterValid(q2, "firstname", "elmar");
// test invalid typed ordered param
Query q3 = em.createQuery(queryStringOrderedParam);
assertOrderedParameterInvalid(q3, 1, 2);
// test invalid typed named param
Query q4 = em.createQuery(queryStringNamedParam);
assertNamedParameterInvalid(q4, "firstname", 3);
// test invalid named ordered param
Query q5 = em.createQuery(queryStringOrderedParam);
assertOrderedParameterInvalid(q5, 2, "wursti");
// test invalid named named param
Query q6 = em.createQuery(queryStringNamedParam);
assertNamedParameterInvalid(q6, "lastname", "olga");
// test calendar named param
Query q7 = em.createQuery(queryStringNamedCalendarParam);
assertParameterValid(q7, new InputParameterHolder("parameter1", Calendar.getInstance(), TemporalType.TIMESTAMP));
// test calendar ordered param
Query q8 = em.createQuery(queryStringOrderedCalendarParam);
assertParameterValid(q8, new InputParameterHolder(1, Calendar.getInstance(), TemporalType.TIMESTAMP));
// test calendar ordered param
@SuppressWarnings("unused")
Query q9 = em.createQuery(queryStringOrderedDateParam);
assertParameterValid(q8, new InputParameterHolder(1, new java.util.Date(System.currentTimeMillis()),
TemporalType.TIMESTAMP));
// test calendar ordered param
@SuppressWarnings("unused")
Query q10 = em.createQuery(queryStringNamedDateParam);
assertParameterValid(q8, new InputParameterHolder(1, new java.util.Date(System.currentTimeMillis()),
TemporalType.TIMESTAMP));
} finally {
closeEntityManager(em);
}
}
@Test
@ToBeInvestigated
public void testTemporalParameterSettingInvalid() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
try {
// test calendar named param
Query q7 = em.createQuery(queryStringNamedCalendarParam);
assertParameterInvalid(q7, new InputParameterHolder("parameter1", Calendar.getInstance()));
// test calendar ordered param
Query q8 = em.createQuery(queryStringOrderedCalendarParam);
assertParameterInvalid(q8, new InputParameterHolder(1, Calendar.getInstance()));
// test calendar ordered param
Query q9 = em.createQuery(queryStringOrderedDateParam);
assertParameterInvalid(q9, new InputParameterHolder(1, new java.util.Date(System.currentTimeMillis())));
// test calendar ordered param
Query q10 = em.createQuery(queryStringNamedDateParam);
assertParameterInvalid(q10, new InputParameterHolder(1, new java.util.Date(System.currentTimeMillis())));
} finally {
closeEntityManager(em);
}
}
}