Hi Pramod,
today I figured out that one query test in entity-persistence-tests
(complexConstructorAggregatesTest from JUnitEJBQLComplexTestSuite) fails
because the test data has been changed since I have written the test. I
fixed this and you find the changes attached.
Regards Michael
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* glassfish/bootstrap/legal/CDDLv1.0.txt or
*
https://glassfish.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*/
// Copyright (c) 1998, 2006, Oracle. All rights reserved.
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* glassfish/bootstrap/legal/CDDLv1.0.txt or
*
https://glassfish.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* glassfish/bootstrap/legal/CDDLv1.0.txt. If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*/
package oracle.toplink.essentials.testing.tests.ejb.ejbqltesting;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import javax.persistence.Query;
import oracle.toplink.essentials.expressions.Expression;
import oracle.toplink.essentials.expressions.ExpressionBuilder;
import oracle.toplink.essentials.sessions.Session;
import oracle.toplink.essentials.queryframework.ReadAllQuery;
import oracle.toplink.essentials.queryframework.ReadObjectQuery;
import oracle.toplink.essentials.queryframework.ReportQuery;
import oracle.toplink.essentials.testing.models.cmp3.advanced.Employee;
import oracle.toplink.essentials.testing.models.cmp3.advanced.EmployeePopulator;
import oracle.toplink.essentials.testing.models.cmp3.advanced.LargeProject;
import oracle.toplink.essentials.testing.models.cmp3.advanced.Project;
import oracle.toplink.essentials.testing.framework.junit.JUnitTestCase;
import junit.extensions.TestSetup;
import oracle.toplink.essentials.sessions.DatabaseSession;
import oracle.toplink.essentials.internal.sessions.AbstractSession;
import oracle.toplink.essentials.testing.models.cmp3.advanced.AdvancedTableCreator;
/**
* <p>
* <b>Purpose</b>: Test complex EJBQL functionality.
* <p>
* <b>Description</b>: This class creates a test suite, initializes the database
* and adds tests to the suite.
* <p>
* <b>Responsibilities</b>:
* <ul>
* <li> Run tests for complex EJBQL functionality
* </ul>
* @see oracle.toplink.essentials.testing.models.cmp3.advanced.EmployeePopulator
* @see JUnitDomainObjectComparer
*/
public class JUnitEJBQLComplexTestSuite extends JUnitTestCase
{
static JUnitDomainObjectComparer comparer; //the global comparer object used in all tests
public JUnitEJBQLComplexTestSuite()
{
super();
}
public JUnitEJBQLComplexTestSuite(String name)
{
super(name);
}
//This method is run at the end of EVERY test case method
public void tearDown()
{
clearCache();
}
//This suite contains all tests contained in this class
public static Test suite()
{
TestSuite suite = new TestSuite();
suite.setName("JUnitEJBQLComplexTestSuite");
suite.addTest(new JUnitEJBQLComplexTestSuite("complexABSTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("compexInTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexLengthTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexLikeTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexNotInTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexNotLikeTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexParameterTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexReverseAbsTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexReverseLengthTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexReverseParameterTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexReverseSqrtTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexSqrtTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexStringInTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexStringNotInTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexSubstringTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexNestedOneToManyUsingInClause"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexUnusedVariableTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexFetchJoinTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexConstructorTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexConstructorAggregatesTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexResultPropertiesTest"));
/* Removed because this functionality requires implementation in ReportQuery
suite.addTest(new JUnitEJBQLComplexTestSuite("complexInheritanceTest"));
suite.addTest(new JUnitEJBQLComplexTestSuite("complexInheritanceUsingNamedQueryTest"));
*/
return new TestSetup(suite) {
//This method is run at the end of the SUITE only
protected void tearDown() {
clearCache();
}
//This method is run at the start of the SUITE only
protected void setUp() {
//get session to start setup
DatabaseSession session = JUnitTestCase.getServerSession();
//create a new EmployeePopulator
EmployeePopulator employeePopulator = new EmployeePopulator();
new AdvancedTableCreator().replaceTables(session);
//initialize the global comparer object
comparer = new JUnitDomainObjectComparer();
//set the session for the comparer to use
comparer.setSession((AbstractSession)session.getActiveSession());
//Populate the tables
employeePopulator.buildExamples();
//Persist the examples in the database
employeePopulator.persistExample(session);
}
};
}
public void complexABSTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).lastElement();
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "(ABS(emp.salary) = ";
ejbqlString = ejbqlString + emp1.getSalary() + ")";
ejbqlString = ejbqlString + " OR (ABS(emp.salary) = ";
ejbqlString = ejbqlString + emp2.getSalary() + ")";
Vector expectedResult = new Vector();
expectedResult.add(emp1);
expectedResult.add(emp2);
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex ABS test failed", comparer.compareObjects(result, expectedResult));
}
public void compexInTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(1);
Employee emp3 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(2);
Vector expectedResult = new Vector();
Vector idVector = new Vector();
idVector.add(emp1.getId());
idVector.add(emp2.getId());
idVector.add(emp3.getId());
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
ExpressionBuilder eb = new ExpressionBuilder();
Expression whereClause = eb.get("id").in(idVector);
raq.setSelectionCriteria(whereClause);
expectedResult = (Vector)em.getActiveSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.id IN (";
ejbqlString = ejbqlString + emp1.getId().toString() + ", ";
ejbqlString = ejbqlString + emp2.getId().toString() + ", ";
ejbqlString = ejbqlString + emp3.getId().toString();
ejbqlString = ejbqlString + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex IN test failed", comparer.compareObjects(result, expectedResult));
}
public void complexLengthTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Assert.assertFalse("Warning SQL doesnot support LENGTH function", ((Session) JUnitTestCase.getServerSession()).getPlatform().isSQLServer());
Employee expectedResult = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "(LENGTH(emp.firstName) = ";
ejbqlString = ejbqlString + expectedResult.getFirstName().length() + ")";
ejbqlString = ejbqlString + " AND ";
ejbqlString = ejbqlString + "(LENGTH(emp.lastName) = ";
ejbqlString = ejbqlString + expectedResult.getLastName().length() + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Length test failed", comparer.compareObjects(result, expectedResult));
}
public void complexLikeTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
String firstName = emp.getFirstName();
String partialFirstName = emp.getFirstName().substring(0, 1);
partialFirstName = partialFirstName + "_";
partialFirstName = partialFirstName + firstName.substring(2, 4);
partialFirstName = partialFirstName + "%";
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
ExpressionBuilder eb = new ExpressionBuilder();
Expression whereClause = eb.get("firstName").like(partialFirstName);
raq.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName LIKE \"" + partialFirstName + "\"";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Like test failed", comparer.compareObjects(result, expectedResult));
}
public void complexNotInTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(1);
Employee emp3 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(2);
ExpressionBuilder builder = new ExpressionBuilder();
Vector idVector = new Vector();
idVector.add(emp1.getId());
idVector.add(emp2.getId());
idVector.add(emp3.getId());
Expression whereClause = builder.get("id").notIn(idVector);
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)getServerSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.id NOT IN (";
ejbqlString = ejbqlString + emp1.getId().toString() + ", ";
ejbqlString = ejbqlString + emp2.getId().toString() + ", ";
ejbqlString = ejbqlString + emp3.getId().toString();
ejbqlString = ejbqlString + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Not IN test failed", comparer.compareObjects(result, expectedResult));
}
public void complexNotLikeTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
String firstName = emp.getFirstName();
String partialFirstName = emp.getFirstName().substring(0, 1);
partialFirstName = partialFirstName + "_";
partialFirstName = partialFirstName + firstName.substring(2, 4);
partialFirstName = partialFirstName + "%";
ExpressionBuilder builder = new ExpressionBuilder();
Expression whereClause = builder.get("firstName").notLike(partialFirstName);
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName NOT LIKE \"" + partialFirstName + "\"";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Not LIKE test failed", comparer.compareObjects(result, expectedResult));
}
public void complexParameterTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
String firstName = "firstName";
String lastName = "lastName";
ExpressionBuilder builder = new ExpressionBuilder();
Expression whereClause = builder.get(firstName).equal(builder.getParameter(firstName));
whereClause = whereClause.and(builder.get(lastName).equal(builder.getParameter(lastName)));
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause);
raq.addArgument(firstName);
raq.addArgument(lastName);
Vector parameters = new Vector();
parameters.add(emp.getFirstName());
parameters.add(emp.getLastName());
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(raq, parameters);
clearCache();
emp = (Employee)expectedResult.firstElement();
// Set up the EJBQL using the retrieved employees
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "emp.firstName = ?1 ";
ejbqlString = ejbqlString + " AND ";
ejbqlString = ejbqlString + "emp.lastName = ?2";
List result = (List) em.createQuery(ejbqlString).setParameter(1,emp.getFirstName()).setParameter(2,emp.getLastName()).getResultList();
Assert.assertTrue("Complex Paramter test failed", comparer.compareObjects(result, expectedResult));
}
public void complexReverseAbsTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(1);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + emp1.getSalary();
ejbqlString = ejbqlString + " = ABS(emp.salary)";
ejbqlString = ejbqlString + " OR ";
ejbqlString = ejbqlString + emp2.getSalary();
ejbqlString = ejbqlString + " = ABS(emp.salary)";
Vector expectedResult = new Vector();
expectedResult.add(emp1);
expectedResult.add(emp2);
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex reverse ABS test failed", comparer.compareObjects(result, expectedResult));
}
public void complexReverseLengthTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Assert.assertFalse("Warning SQL doesnot support LENGTH function", ((Session) JUnitTestCase.getServerSession()).getPlatform().isSQLServer());
Employee expectedResult = (Employee) em.getActiveSession().readAllObjects(Employee.class).firstElement();
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + expectedResult.getFirstName().length();
ejbqlString = ejbqlString + " = LENGTH(emp.firstName)";
ejbqlString = ejbqlString + " AND ";
ejbqlString = ejbqlString + expectedResult.getLastName().length();
ejbqlString = ejbqlString + " = LENGTH(emp.lastName)";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex reverse Length test failed", comparer.compareObjects(result, expectedResult));
}
public void complexReverseParameterTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
String firstName = "firstName";
String lastName = "lastName";
ExpressionBuilder builder = new ExpressionBuilder();
Expression whereClause = builder.get(firstName).equal(builder.getParameter(firstName));
whereClause = whereClause.and(builder.get(lastName).equal(builder.getParameter(lastName)));
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause);
raq.addArgument(firstName);
raq.addArgument(lastName);
Vector parameters = new Vector();
parameters.add(emp.getFirstName());
parameters.add(emp.getLastName());
Vector expectedResult = (Vector)getServerSession().executeQuery(raq, parameters);
clearCache();
emp = (Employee)expectedResult.firstElement();
// Set up the EJBQL using the retrieved employees
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "?1 = emp.firstName";
ejbqlString = ejbqlString + " AND ";
ejbqlString = ejbqlString + "?2 = emp.lastName";
List result = (List) em.createQuery(ejbqlString).setParameter(1,emp.getFirstName()).setParameter(2,emp.getLastName()).getResultList();
Assert.assertTrue("Complex Reverse Paramter test failed", comparer.compareObjects(result, expectedResult));
}
public void complexReverseSqrtTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
ReadAllQuery raq = new ReadAllQuery();
ExpressionBuilder expbldr = new ExpressionBuilder();
Expression whereClause1 = expbldr.get("lastName").equal("TestCase1");
Expression whereClause2 = expbldr.get("lastName").equal("TestCase2");
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause1.or(whereClause2));
Vector expectedResult = (Vector) em.getActiveSession().executeQuery(raq);
clearCache();
Employee emp1 = (Employee) expectedResult.elementAt(0);
Employee emp2 = (Employee) expectedResult.elementAt(1);
double salarySquareRoot1 = Math.sqrt((new Double(emp1.getSalary()).doubleValue()));
double salarySquareRoot2 = Math.sqrt((new Double(emp2.getSalary()).doubleValue()));
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + salarySquareRoot1;
ejbqlString = ejbqlString + " = SQRT(emp.salary)";
ejbqlString = ejbqlString + " OR ";
ejbqlString = ejbqlString + salarySquareRoot2;
ejbqlString = ejbqlString + " = SQRT(emp.salary)";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Reverse Square Root test failed", comparer.compareObjects(result, expectedResult));
}
public void complexSqrtTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
ReadAllQuery raq = new ReadAllQuery();
ExpressionBuilder expbldr = new ExpressionBuilder();
Expression whereClause1 = expbldr.get("lastName").equal("TestCase1");
Expression whereClause2 = expbldr.get("lastName").equal("TestCase2");
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause1.or(whereClause2));
Vector expectedResult = (Vector) em.getActiveSession().executeQuery(raq);
clearCache();
Employee emp1 = (Employee) expectedResult.elementAt(0);
Employee emp2 = (Employee) expectedResult.elementAt(1);
double salarySquareRoot1 = Math.sqrt((new Double(emp1.getSalary()).doubleValue()));
double salarySquareRoot2 = Math.sqrt((new Double(emp2.getSalary()).doubleValue()));
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "(SQRT(emp.salary) = ";
ejbqlString = ejbqlString + salarySquareRoot1 + ")";
ejbqlString = ejbqlString + " OR ";
ejbqlString = ejbqlString + "(SQRT(emp.salary) = ";
ejbqlString = ejbqlString + salarySquareRoot2 + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Square Root test failed", comparer.compareObjects(result, expectedResult));
}
public void complexStringInTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(1);
Employee emp3 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(2);
Vector fnVector = new Vector();
fnVector.add(emp1.getFirstName());
fnVector.add(emp2.getFirstName());
fnVector.add(emp3.getFirstName());
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
ExpressionBuilder eb = new ExpressionBuilder();
Expression whereClause = eb.get("firstName").in(fnVector);
raq.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)getServerSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName IN (";
ejbqlString = ejbqlString + "\"" + emp1.getFirstName() + "\"" + ", ";
ejbqlString = ejbqlString + "\"" + emp2.getFirstName() + "\"" + ", ";
ejbqlString = ejbqlString + "\"" + emp3.getFirstName() + "\"" ;
ejbqlString = ejbqlString + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex String In test failed", comparer.compareObjects(result, expectedResult));
}
public void complexStringNotInTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp1 = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
Employee emp2 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(1);
Employee emp3 = (Employee)em.getActiveSession().readAllObjects(Employee.class).elementAt(2);
ExpressionBuilder builder = new ExpressionBuilder();
Vector nameVector = new Vector();
nameVector.add(emp1.getFirstName());
nameVector.add(emp2.getFirstName());
nameVector.add(emp3.getFirstName());
Expression whereClause = builder.get("firstName").notIn(nameVector);
ReadAllQuery raq = new ReadAllQuery();
raq.setReferenceClass(Employee.class);
raq.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(raq);
clearCache();
String ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE emp.firstName NOT IN (";
ejbqlString = ejbqlString + "\"" + emp1.getFirstName() + "\"" + ", ";
ejbqlString = ejbqlString + "\"" + emp2.getFirstName() + "\"" + ", ";
ejbqlString = ejbqlString + "\"" + emp3.getFirstName() + "\"" ;
ejbqlString = ejbqlString + ")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex String Not In test failed", comparer.compareObjects(result, expectedResult));
}
public void complexSubstringTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee expectedResult = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
String firstNamePart, lastNamePart;
String ejbqlString;
firstNamePart = expectedResult.getFirstName().substring(0, 2);
lastNamePart = expectedResult.getLastName().substring(0, 1);
ejbqlString = "SELECT OBJECT(emp) FROM Employee emp WHERE ";
ejbqlString = ejbqlString + "(SUBSTRING(emp.firstName, 1, 2) = ";//changed from 0, 2 to 1, 2(ZYP)
ejbqlString = ejbqlString + "\"" + firstNamePart + "\")";
ejbqlString = ejbqlString + " AND ";
ejbqlString = ejbqlString + "(SUBSTRING(emp.lastName, 1, 1) = ";//changed from 0, 1 to 1, 1(ZYP)
ejbqlString = ejbqlString + "\"" + lastNamePart + "\")";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Sub String test failed", comparer.compareObjects(result, expectedResult));
}
public void complexNestedOneToManyUsingInClause()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
ExpressionBuilder builder = new ExpressionBuilder();
Expression whereClause = builder.anyOf("managedEmployees").anyOf("projects").
get("name").equal("Enterprise");
ReadAllQuery readQuery = new ReadAllQuery();
readQuery.dontMaintainCache();
readQuery.setReferenceClass(Employee.class);
readQuery.setSelectionCriteria(whereClause);
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(readQuery);
clearCache();
String ejbqlString;
ejbqlString = "SELECT OBJECT(emp) FROM Employee emp, " +
"IN(emp.managedEmployees) mEmployees, IN(mEmployees.projects) projects " +
"WHERE projects.name = 'Enterprise'";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Nested One To Many Using In Clause test failed", comparer.compareObjects(result, expectedResult));
}
public void complexUnusedVariableTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
ReportQuery reportQuery = new ReportQuery();
reportQuery.dontMaintainCache();
reportQuery.setShouldReturnWithoutReportQueryResult(true);
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder builder = reportQuery.getExpressionBuilder();
reportQuery.addNonFetchJoinedAttribute(builder.get("address"));
reportQuery.addItem("emp", builder);
Vector expectedResult = (Vector)em.getActiveSession().executeQuery(reportQuery);
clearCache();
String ejbqlString;
ejbqlString = "SELECT emp FROM Employee emp JOIN emp.address a";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Unused Variable test failed", comparer.compareObjects(result, expectedResult));
}
public void complexFetchJoinTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getServerSession().readAllObjects(Employee.class).firstElement();
ReportQuery reportQuery = new ReportQuery();
reportQuery.dontMaintainCache();
reportQuery.setShouldReturnWithoutReportQueryResult(true);
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder builder = reportQuery.getExpressionBuilder();
List joins = new ArrayList(1);
joins.add(builder.get("address"));
reportQuery.addItem("emp", builder, joins);
Vector expectedResult = (Vector)em.getServerSession().executeQuery(reportQuery);
clearCache();
String ejbqlString;
ejbqlString = "SELECT emp FROM Employee emp JOIN FETCH emp.address";
List result = (List) em.createQuery(ejbqlString).getResultList();
Assert.assertTrue("Complex Fetch Join test failed", comparer.compareObjects(result, expectedResult));
}
public void complexConstructorTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Employee emp = (Employee)em.getActiveSession().readAllObjects(Employee.class).firstElement();
// simple constructor query
String ejbqlString = "SELECT NEW oracle.toplink.essentials.testing.tests.ejb.ejbqltesting.JUnitEJBQLComplexTestSuite.NameHolder(emp.firstName, emp.lastName) FROM Employee emp WHERE emp.id = :id";
Query query = em.createQuery(ejbqlString);
query.setParameter("id", emp.getId());
NameHolder result = (NameHolder)query.getSingleResult();
NameHolder expectedResult = new NameHolder(emp.getFirstName(), emp.getLastName());
Assert.assertTrue("Constructor Test Case Failed", result.equals(expectedResult));
}
public void complexConstructorAggregatesTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Collection emps = em.getActiveSession().readAllObjects(Employee.class);
Employee emp = null;
// find an employee with managed employees
for (Iterator i = emps.iterator(); i.hasNext();) {
Employee e = (Employee)i.next();
Collection managed = e.getManagedEmployees();
if ((managed != null) && (managed.size() > 0)) {
emp = e;
break;
}
}
// constructor query using aggregates
String ejbqlString = "SELECT NEW oracle.toplink.essentials.testing.tests.ejb.ejbqltesting.JUnitEJBQLComplexTestSuite.LongHolder(SUM(emp.salary), COUNT(emp)) FROM Employee emp WHERE emp.manager.id = :id";
Query query = em.createQuery(ejbqlString);
query.setParameter("id", emp.getId());
LongHolder result = (LongHolder)query.getSingleResult();
// calculate expected result
Collection managed = emp.getManagedEmployees();
int count = 0;
int sum = 0;
if (managed != null) {
count = managed.size();
for (Iterator i = managed.iterator(); i.hasNext();) {
Employee e = (Employee)i.next();
sum += e.getSalary();
}
}
LongHolder expectedResult = new LongHolder(new Long(sum), new Long(count));
Assert.assertTrue("Constructor with aggregates argument Test Case Failed", result.equals(expectedResult));
}
public void complexResultPropertiesTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
String ejbql = "SELECT e FROM Employee e ORDER BY e.id";
Query query = em.createQuery(ejbql);
List allEmps = query.getResultList();
int nrOfEmps = allEmps.size();
List result = null;
List expectedResult = null;
int firstResult = 2;
int maxResults = nrOfEmps - 1;
// Test setFirstResult
query = em.createQuery(ejbql);
query.setFirstResult(firstResult);
result = query.getResultList();
expectedResult = allEmps.subList(firstResult, nrOfEmps);
Assert.assertTrue("Query.setFirstResult Test Case Failed", result.equals(expectedResult));
// Test setMaxResults
query = em.createQuery(ejbql);
query.setMaxResults(maxResults);
result = query.getResultList();
expectedResult = allEmps.subList(0, maxResults);
Assert.assertTrue("Query.setFirstResult Test Case Failed", result.equals(expectedResult));
// Test setFirstResult and setMaxResults
maxResults = nrOfEmps - firstResult - 1;
query = em.createQuery(ejbql);
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
result = query.getResultList();
expectedResult = allEmps.subList(firstResult, nrOfEmps - 1);
Assert.assertTrue("Query.setFirstResult Test Case Failed", result.equals(expectedResult));
}
public void complexInheritanceTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
((AbstractSession) em.getActiveSession()).addAlias("ProjectBaseClass", getServerSession().getDescriptor(Project.class));
Project expectedResult = (Project)em.getActiveSession().readAllObjects(Project.class).firstElement();
String projectName = expectedResult.getName();
ReadObjectQuery roq = new ReadObjectQuery();
ExpressionBuilder eb = new ExpressionBuilder();
Expression whereClause = eb.get("name").equal(projectName);
roq.setSelectionCriteria(whereClause);
roq.setReferenceClass(LargeProject.class);
LargeProject proj = (LargeProject)em.getActiveSession().executeQuery(roq);
//Set criteria for EJBQL and call super-class method to construct the EJBQL query
String ejbqlString = "SELECT OBJECT(project) FROM ProjectBaseClass project WHERE project.name = \"" + projectName +"\"";
List result = (List) em.createQuery(ejbqlString).getResultList();
((AbstractSession)em.getActiveSession()).getAliasDescriptors().remove("ProjectBaseClass");
Assert.assertTrue("Complex Inheritance test failed", comparer.compareObjects(result, expectedResult));
}
public void complexInheritanceUsingNamedQueryTest()
{
oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();
Project expectedResult = (Project)em.getActiveSession().readAllObjects(Project.class).firstElement();
String argument = expectedResult.getName();
//set up query, using query framework, to return a Project object which will be compared
//against the Project object which is returned by the EJBQL query
ReadObjectQuery roq = new ReadObjectQuery();
roq.setReferenceClass(LargeProject.class);
ExpressionBuilder eb = new ExpressionBuilder();
Expression whereClause = eb.get("name").equal(argument);
roq.setSelectionCriteria(whereClause);
Project proj = (Project)getServerSession().executeQuery(roq);
String queryName = "findLargeProjectByNameEJBQL";
Session uow = (Session)em.getActiveSession();
if (!(em.getActiveSession().containsQuery(queryName))) {
((AbstractSession)em.getActiveSession()).addAlias("ProjectBaseClass", getServerSession().getDescriptor(Project.class));
//Named query must be built and registered with the session
ReadObjectQuery query = new ReadObjectQuery();
query.setEJBQLString("SELECT OBJECT(project) FROM ProjectBaseClass project WHERE project.name = ?1");
query.setName(queryName);
query.addArgument("1");
query.setReferenceClass(Project.class);
uow.addQuery("findLargeProjectByNameEJBQL", query);
}
Project result = (Project)uow.executeQuery("findLargeProjectByNameEJBQL",argument);
em.getActiveSession().removeQuery("findLargeProjectByBudgetEJBQL");
((AbstractSession)em.getActiveSession()).getAliasDescriptors().remove("ProjectBaseClass");
Assert.assertTrue("Complex Inheritance using named query test failed", comparer.compareObjects(result, expectedResult));
}
public static void main(String[] args)
{
junit.swingui.TestRunner.main(args);
}
// Helper methods and classes for constructor query test cases
public static boolean equals(Object o1, Object o2) {
if (o1 == o2) {
return true;
}
if (o1 == null || o2 == null) {
return false;
}
return o1.equals(o2);
}
public static class NameHolder {
public String firstName;
public String lastName;
public NameHolder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public int hashCode() {
int result = 0;
result += firstName != null ? firstName.hashCode() : 0;
result += lastName != null ? lastName.hashCode() : 0;
return result;
}
public boolean equals(Object o) {
if ((o == null) || (!(o instanceof NameHolder))) {
return false;
}
NameHolder other = (NameHolder) o;
return JUnitEJBQLComplexTestSuite.equals(this.firstName, other.firstName) &&
JUnitEJBQLComplexTestSuite.equals(this.lastName, other.lastName);
}
public String toString() {
return "NameHolder(" + firstName + ", " + lastName + ")";
}
}
public static class LongHolder {
public Long value1;
public Long value2;
public LongHolder(Long value1, Long value2) {
this.value1 = value1;
this.value2 = value2;
}
public int hashCode() {
int result = 0;
result += value1 != null ? value1.hashCode() : 0;
result += value2 != null ? value2.hashCode() : 0;
return result;
}
public boolean equals(Object o) {
if ((o == null) || (!(o instanceof LongHolder))) {
return false;
}
LongHolder other = (LongHolder) o;
return JUnitEJBQLComplexTestSuite.equals(this.value1, other.value1) &&
JUnitEJBQLComplexTestSuite.equals(this.value2, other.value2);
}
public String toString() {
return "LongHolder(" + value1 + ", " + value2 + ")";
}
}
}