/******************************************************************************* * Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * 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); } 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; } }