blob: 92125402e5ef906920b282f43d8be29c83f7e264 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.expressions;
import org.eclipse.persistence.testing.models.employee.domain.*;
import org.eclipse.persistence.tools.schemaframework.PopulationManager;
import org.eclipse.persistence.queries.*;
import org.eclipse.persistence.expressions.*;
import org.eclipse.persistence.testing.framework.*;
public class ExpressionOuterJoinTestSuite extends TestSuite {
protected PopulationManager manager;
public ExpressionOuterJoinTestSuite() {
setDescription("This suite tests expressions.");
}
private void addOuterJoinJoiningComplexTest() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Project.class, 15);
test.setName("OuterJoinJoiningComplexTest");
test.setDescription("Test joining with outer joins");
ReadAllQuery query = new ReadAllQuery(Project.class);
query.addJoinedAttribute(emp.getAllowingNull("teamLeader"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinAcrossInheritanceTest() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(org.eclipse.persistence.testing.models.inheritance.Person.class, 1);
test.setName("OuterJoinAcrossInheritanceTest");
test.setDescription("Test joining with outer joins across inheritance");
ReadAllQuery query = new ReadAllQuery(org.eclipse.persistence.testing.models.inheritance.Person.class);
//This test used to make no sense...
//query.setSelectionCriteria(emp.getAllowingNull("representitive").get("name").equalOuterJoin("Richard"));
query.addOrdering(emp.getAllowingNull("representitive").get("name"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinJoiningTest() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 12);
test.setName("OuterJoinJoiningTest");
test.setDescription("Test joining with outer joins");
ReadAllQuery query = new ReadAllQuery(Employee.class);
query.addJoinedAttribute(emp.getAllowingNull("address"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinJoiningTest2() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest2(org.eclipse.persistence.testing.models.insurance.PolicyHolder.class, 4);
test.setName("OuterJoinJoiningTest2");
test.setDescription("Test joining with outer joins");
ReadAllQuery query = new ReadAllQuery(org.eclipse.persistence.testing.models.insurance.PolicyHolder.class);
query.addJoinedAttribute(emp.getAllowingNull("address"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinManyToManyTest() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("%").or(emp.anyOfAllowingNone("projects").get("description").like("%"));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 12);
test.setName("OuterJoinManytoManyTest");
test.setDescription("Tests manytomany relationships with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinOrAnyWhereClauseTest() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("Sarah%").or(emp.anyOfAllowingNone("phoneNumbers").get("areaCode").equal("613"));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 10);
test.setName("OuterJoinOrAnyWhereClauseTest");
test.setDescription("Test expression anyof with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinOrderByComplexTest() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 12);
test.setName("OuterJoinOrderByComplexTest");
test.setDescription("Test order by with outer joins");
ReadAllQuery query = new ReadAllQuery(Employee.class);
query.addOrdering(emp.getAllowingNull("manager").get("firstName"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinOrderByTest() {
ExpressionBuilder emp = new ExpressionBuilder();
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 12);
test.setName("OuterJoinOrderByTest");
test.setDescription("Test order by with outer joins");
ReadAllQuery query = new ReadAllQuery(Employee.class);
query.addOrdering(emp.getAllowingNull("address").get("city"));
test.setQuery(query);
addTest(test);
}
private void addOuterJoinOrWhereClauseTest1() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("Bob%").or(emp.getAllowingNull("address").get("city").like("Ot%"));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 2);
test.setName("OuterJoinOrWhereClauseTest1");
test.setDescription("Test expression with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinOrWhereClauseTest2() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("Sarah%").or(emp.getAllowingNull("manager").get("firstName").like("Sarah%"));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 3);
test.setName("OuterJoinOrWhereClauseTest2");
test.setDescription("Test expression with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinOrWhereClauseTest3() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("Sarah%").and(emp.get("lastName").like("Smit%")).or(emp.getAllowingNull("manager").get("firstName").like("Sarah%").and(emp.getAllowingNull("manager").get("lastName").like("Smit%")));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 2);
test.setName("OuterJoinOrWhereClauseTest3");
test.setDescription("Test expression with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinOrWhereClauseTest4() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").like("Bob%").or(emp.getAllowingNull("address").get("city").like("Ot%").and(emp.getAllowingNull("address").get("city").like("%wa")));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 2);
test.setName("OuterJoinOrWhereClauseTest4");
test.setDescription("Test expression with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinSimpleTest() {
// This one does not really make sense, however its simple and tests that the syntax works.
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.getAllowingNull("address").get("city").equal("Ottawa");
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 1);
test.setName("OuterJoinSimpleTest");
test.setDescription("Test expression with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinGetOnClauseTest() {
// This one does not really make sense, however its simple and tests that the syntax works.
ExpressionBuilder emp = new ExpressionBuilder();
Expression address = emp.getAllowingNull("address");
emp.join(address, address.get("city").notEqual("Ottawa"));
Expression expression = address.get("city").equal("Ottawa");
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 0);
test.setName("OuterJoinGetOnClauseTest");
test.setDescription("Test expression with outer joins and on clause");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinAnyOfOnClauseTest() {
// This one does not really make sense, however its simple and tests that the syntax works.
ExpressionBuilder emp = new ExpressionBuilder();
Expression phone = emp.anyOfAllowingNone("phoneNumbers");
emp.join(phone, phone.get("areaCode").notEqual("613"));
Expression expression = phone.get("areaCode").equal("613");
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 0);
test.setName("OuterJoinAnyOfOnClauseTest");
test.setDescription("Test expression with outer joins and on clause");
test.setExpression(expression);
addTest(test);
}
private void addJoinAnyOfOnClauseTest() {
// This one does not really make sense, however its simple and tests that the syntax works.
ExpressionBuilder emp = new ExpressionBuilder();
Expression phone = emp.anyOf("phoneNumbers");
emp.join(phone, phone.get("areaCode").notEqual("613"));
Expression expression = phone.get("areaCode").equal("613");
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 0);
test.setName("JoinAnyOfOnClauseTest");
test.setDescription("Test expression with outer joins and on clause");
test.setExpression(expression);
addTest(test);
}
private void addJoinGetOnClauseTest() {
// This one does not really make sense, however its simple and tests that the syntax works.
ExpressionBuilder emp = new ExpressionBuilder();
Expression address = emp.get("address");
emp.join(address, address.get("city").notEqual("Ottawa"));
Expression expression = address.get("city").equal("Ottawa");
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 0);
test.setName("JoinGetOnClauseTest");
test.setDescription("Test expression with outer joins and on clause");
test.setExpression(expression);
addTest(test);
}
private void addJoinOnClauseTest() {
ExpressionBuilder emp = new ExpressionBuilder(Employee.class);
ExpressionBuilder project = new ExpressionBuilder(Project.class);
emp.join(project, project.get("teamLeader").equal(emp));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 3);
test.setName("JoinOnClauseTest");
test.setDescription("Test expression with parrallel joins and on clause");
test.setExpression(null);
test.getQuery(true).setExpressionBuilder(emp);
test.getQuery(true).addNonFetchJoin(project);
addTest(test);
}
private void addOuterJoinOnClauseTest() {
ExpressionBuilder emp = new ExpressionBuilder(Employee.class);
ExpressionBuilder project = new ExpressionBuilder(Project.class);
emp.leftJoin(project, project.get("teamLeader").equal(emp));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 12);
test.setName("OuterJoinOnClauseTest");
test.setDescription("Test expression with parrallel joins and on clause");
test.setExpression(null);
test.getQuery(true).setExpressionBuilder(emp);
test.getQuery(true).addNonFetchJoin(project);
addTest(test);
}
private void addOuterJoinDirectCollectionTest() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression = emp.get("firstName").equal("Nancy").or(emp.anyOfAllowingNone("responsibilitiesList").equal("Write lots of Java code."));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 2);
test.setName("OuterJoinDirectCollectionTest");
test.setDescription("Tests direct collection relationships with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinIsNullTest() {
ExpressionBuilder emp = new ExpressionBuilder();
Expression expression =
emp.get("firstName").equal("Bob").or(emp.getAllowingNull("address").isNull()).or
(emp.getAllowingNull("address").get("city").equal("Ottawa"));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 2);
test.setName("OuterJoinIsNullTest");
test.setDescription("Test using isNull with outer joins");
test.setExpression(expression);
addTest(test);
}
private void addOuterJoinParallelExpressionTest() {
ExpressionBuilder emp = new ExpressionBuilder(Employee.class);
ExpressionBuilder addr = new ExpressionBuilder(Address.class);
Expression expression =
emp.get("firstName").equal("Bob").or(emp.getAllowingNull("address").get("city").equal("Ottawa")).or
(emp.getAllowingNull("address").equal(addr).and(addr.get("city").equal("Ottawa")));
ReadAllExpressionTest test = new ReadAllOuterJoinExpressionTest(Employee.class, 22);
test.setName("OuterJoinParallelExpressionTest");
test.setDescription("Test using isNull with outer joins");
test.setExpression(expression);
addTest(test);
}
@Override
public void addTests() {
setManager(PopulationManager.getDefaultManager());
addOuterJoinSimpleTest();
addOuterJoinOrWhereClauseTest1();
addOuterJoinOrWhereClauseTest2();
addOuterJoinOrWhereClauseTest3();
addOuterJoinOrWhereClauseTest4();
addOuterJoinOrderByTest();
addOuterJoinOrderByComplexTest();
addOuterJoinJoiningTest();
addOuterJoinManyToManyTest();
addOuterJoinJoiningTest2();
addOuterJoinJoiningComplexTest();
addOuterJoinOrAnyWhereClauseTest();
addOuterJoinAcrossInheritanceTest();
addOuterJoinDirectCollectionTest();
addOuterJoinParallelExpressionTest();
addOuterJoinIsNullTest();
addOuterJoinGetOnClauseTest();
addJoinGetOnClauseTest();
addOuterJoinAnyOfOnClauseTest();
addJoinAnyOfOnClauseTest();
addOuterJoinOnClauseTest();
addJoinOnClauseTest();
}
protected PopulationManager getManager() {
return manager;
}
protected void setManager(PopulationManager theManager) {
manager = theManager;
}
}