/******************************************************************************* | |
* Copyright (c) 1998, 2013 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.queries.optimization; | |
import java.util.List; | |
import org.eclipse.persistence.tools.schemaframework.PopulationManager; | |
import org.eclipse.persistence.queries.*; | |
import org.eclipse.persistence.annotations.BatchFetchType; | |
import org.eclipse.persistence.expressions.*; | |
import org.eclipse.persistence.testing.framework.*; | |
import org.eclipse.persistence.testing.models.employee.domain.*; | |
import org.eclipse.persistence.testing.models.inheritance.Engineer; | |
import org.eclipse.persistence.testing.models.ownership.ObjectA; | |
/** | |
* Test query optimization features, joining, batch reading, partial object reading. | |
*/ | |
@SuppressWarnings("deprecation") | |
public class QueryOptimizationTestSuite extends TestSuite { | |
public QueryOptimizationTestSuite() { | |
setDescription("This suite tests query optimization, aggregation and batch reading."); | |
} | |
public void addBatchTests() { | |
addBatchTests(BatchFetchType.JOIN); | |
addBatchTests(BatchFetchType.EXISTS); | |
addBatchTests(BatchFetchType.IN); | |
} | |
public void addBatchTests(BatchFetchType batchType) { | |
// Batch reading | |
ReadAllBatchReadingTest testbb1 = new ReadAllBatchReadingTest(12); | |
testbb1.setName("ReadAllBatchReadingTestAddressManager" + batchType); | |
ReadAllQuery querybb1 = new ReadAllQuery(); | |
querybb1.setBatchFetchType(batchType); | |
querybb1.setReferenceClass(Employee.class); | |
querybb1.addBatchReadAttribute("address"); | |
querybb1.addBatchReadAttribute("manager"); | |
querybb1.addBatchReadAttribute("phoneNumbers"); | |
querybb1.addBatchReadAttribute("projects"); | |
querybb1.addBatchReadAttribute("responsibilitiesList"); | |
testbb1.setQuery(querybb1); | |
addTest(testbb1); | |
ReadAllBatchReadingTest testbb2 = new ReadAllBatchReadingTest(2); | |
testbb2.setName("ReadAllBatchReadingTestWhereAddressManager" + batchType); | |
ReadAllQuery querybb2 = new ReadAllQuery(); | |
querybb2.setBatchFetchType(batchType); | |
querybb2.setReferenceClass(Employee.class); | |
querybb2.addBatchReadAttribute("address"); | |
querybb2.addBatchReadAttribute("manager"); | |
querybb2.addBatchReadAttribute("phoneNumbers"); | |
querybb2.addBatchReadAttribute("projects"); | |
querybb2.addBatchReadAttribute("responsibilitiesList"); | |
querybb2.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("lastName").equal("Way")); | |
testbb2.setQuery(querybb2); | |
addTest(testbb2); | |
//add the BatchReadingUnitOfWorkTest and BatchReadingUnitOfWorkInTransactionTest | |
BatchReadingUnitOfWorkTest testbb3 = new BatchReadingUnitOfWorkTest(batchType); | |
addTest(testbb3); | |
BatchReadingUnitOfWorkInTransactionTest testbb4 = new BatchReadingUnitOfWorkInTransactionTest(batchType); | |
addTest(testbb4); | |
//adding the OneToMany tests | |
OneToManyBatchReadingTest testbb5 = new OneToManyBatchReadingTest(batchType); | |
addTest(testbb5); | |
addTest(new BatchReadingTest(batchType)); | |
OneToManyBatchReadingCustomSelectionQueryTest testbb6 = new OneToManyBatchReadingCustomSelectionQueryTest(batchType); | |
addTest(testbb6); | |
ReadAllBatchReadingTest test3 = new ReadAllBatchReadingTest(2); | |
test3.setName("ReadAllBatchReadingTestWhereAddressManager-cursor" + batchType); | |
ReadAllQuery query3 = new ReadAllQuery(); | |
query3.setBatchFetchType(batchType); | |
query3.setReferenceClass(Employee.class); | |
query3.useCursoredStream(); | |
query3.addBatchReadAttribute("address"); | |
query3.addBatchReadAttribute("manager"); | |
query3.addBatchReadAttribute("phoneNumbers"); | |
query3.addBatchReadAttribute("projects"); | |
querybb1.addBatchReadAttribute("responsibilitiesList"); | |
query3.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("lastName").equal("Way")); | |
test3.setQuery(query3); | |
addTest(test3); | |
NestedOneToManyBatchReadAllTest test3_5 = new NestedOneToManyBatchReadAllTest(org.eclipse.persistence.testing.models.collections.Restaurant.class, 15); | |
test3_5.setName("NestedOneToManyBatchReadAllTest" + batchType); | |
ReadAllQuery query3_5 = new ReadAllQuery(); | |
query3_5.setBatchFetchType(batchType); | |
query3_5.setReferenceClass(org.eclipse.persistence.testing.models.collections.Restaurant.class); | |
query3_5.addBatchReadAttribute("menus"); | |
test3_5.setQuery(query3_5); | |
addTest(test3_5); | |
//Batch testing on 1-1 mapping | |
ReadAllTest test4 = new ReadAllTest(org.eclipse.persistence.testing.models.insurance.Policy.class, 3); | |
test4.setName("ReadAllBatchReadingTestPolicyHolder" + batchType); | |
ReadAllQuery query4 = new ReadAllQuery(); | |
query4.setBatchFetchType(batchType); | |
query4.setReferenceClass(org.eclipse.persistence.testing.models.insurance.Policy.class); | |
query4.addBatchReadAttribute("policyHolder"); | |
query4.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("maxCoverage").greaterThan(40000)); | |
test4.setQuery(query4); | |
addTest(test4); | |
addTest(new OneToOneBatchReadingTest(batchType)); | |
// Batch testing on 1-M mapping. | |
ReadAllTest test5 = new ReadAllTest(org.eclipse.persistence.testing.models.insurance.Policy.class, 4); | |
test5.setName("ReadAllBatchReadingTestClaim" + batchType); | |
ReadAllQuery query5 = new ReadAllQuery(); | |
query5.setBatchFetchType(batchType); | |
query5.setReferenceClass(org.eclipse.persistence.testing.models.insurance.Policy.class); | |
query5.addBatchReadAttribute("claims"); | |
query5.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("maxCoverage").greaterThan(30000)); | |
test5.setQuery(query5); | |
addTest(test5); | |
addTest(new OneToManyBatchReadingTest(batchType)); | |
addTest(new NestedBatchReadingTest(batchType)); | |
addTest(new NestedBatchReadingNPETest(batchType)); | |
addTest(new AggregateBatchReadingTest(batchType)); | |
addTest(new BatchReadingBatchReadExpressionTest(batchType)); | |
addTest(new BatchReadingWithInvalidQueryKeyTest(batchType)); | |
addTest(new BatchReadValueholderTest(batchType)); | |
addTest(new BatchReadingStackOverflowTest(batchType)); | |
} | |
public void addJoinTests() { | |
PopulationManager manager = PopulationManager.getDefaultManager(); | |
Employee object = (Employee)manager.getObject(Employee.class, "0002"); | |
// Joining | |
ReadObjectTest test = new ReadObjectTest(object); | |
test.setName("JoiningReadObjectTestAddress"); | |
ReadObjectQuery query = new ReadObjectQuery(); | |
query.setSelectionObject(object); | |
query.addJoinedAttribute("address"); | |
test.setQuery(query); | |
addTest(test); | |
ReadObjectTest test1a = new ReadObjectTest(object); | |
test1a.setName("JoiningReadObjectTestAddressManager"); | |
ReadObjectQuery query1a = new ReadObjectQuery(); | |
query1a.setSelectionObject(object); | |
query1a.addJoinedAttribute("address"); | |
query1a.addJoinedAttribute("manager"); | |
test1a.setQuery(query1a); | |
addTest(test1a); | |
ReadObjectTest test1m = new ReadObjectTest(object); | |
test1m.setName("JoiningReadObjectTestPhones"); | |
ReadObjectQuery query1m = new ReadObjectQuery(); | |
query1m.setSelectionObject(object); | |
query1m.addJoinedAttribute(query1m.getExpressionBuilder().anyOf("phoneNumbers")); | |
test1m.setQuery(query1m); | |
addTest(test1m); | |
test1m = new ReadObjectTest(object); | |
test1m.setName("JoiningReadObjectTestPhonesOuter"); | |
query1m = new ReadObjectQuery(); | |
query1m.setSelectionObject(object); | |
query1m.addJoinedAttribute(query1m.getExpressionBuilder().anyOfAllowingNone("phoneNumbers")); | |
test1m.setQuery(query1m); | |
addTest(test1m); | |
addTest(new ReadAnyObjectJoinPhoneTest()); | |
Object person = manager.getObject(Engineer.class, "example2"); | |
ReadObjectTest test1b = new ReadObjectTest(person); | |
test1b.setName("JoiningInheritanceRelationshipTest"); | |
ReadObjectQuery query1b = new ReadObjectQuery(); | |
query1b.setSelectionObject(person); | |
query1b.addJoinedAttribute("bestFriend"); | |
query1b.addJoinedAttribute("representitive"); | |
test1b.setQuery(query1b); | |
addTest(test1b); | |
ReadObjectTest test1bx = new ReadObjectTest(person); | |
test1bx.setName("NestedJoiningInheritanceRelationshipTest"); | |
ReadObjectQuery query1bx = new ReadObjectQuery(); | |
query1bx.setSelectionObject(person); | |
query1bx.addJoinedAttribute(query1bx.getExpressionBuilder().get("bestFriend")); | |
query1bx.addJoinedAttribute(query1bx.getExpressionBuilder().get("bestFriend").getAllowingNull("bestFriend")); | |
query1bx.addJoinedAttribute(query1bx.getExpressionBuilder().get("bestFriend").getAllowingNull("representitive")); | |
query1bx.addJoinedAttribute(query1bx.getExpressionBuilder().get("representitive")); | |
test1bx.setQuery(query1bx); | |
addTest(test1bx); | |
ReadObjectTest test1c = new ReadObjectTest(object); | |
test1c.setName("JoiningReadObjectTestAddressManagerManager"); | |
ReadObjectQuery query1c = new ReadObjectQuery(); | |
query1c.setSelectionObject(object); | |
query1c.addJoinedAttribute("address"); | |
query1c.addJoinedAttribute("manager"); | |
query1c.addJoinedAttribute(query1c.getExpressionBuilder().get("manager").get("manager")); | |
test1c.setQuery(query1c); | |
addTest(test1c); | |
ReadAllTest test2 = new ReadAllTest(Employee.class, 12); | |
test2.setName("JoiningReadAllTestAddress"); | |
ReadAllQuery query2 = new ReadAllQuery(); | |
query2.setReferenceClass(Employee.class); | |
query2.addJoinedAttribute("address"); | |
query2.addJoinedAttribute(query2.getExpressionBuilder().getAllowingNull("manager")); | |
test2.setQuery(query2); | |
addTest(test2); | |
ReadAllTest testReadAll1m = new ReadAllTest(Employee.class, 12); | |
testReadAll1m.setName("JoiningReadAllTestPhones"); | |
ReadAllQuery queryReadAll1m = new ReadAllQuery(); | |
queryReadAll1m.setReferenceClass(Employee.class); | |
queryReadAll1m.addJoinedAttribute(queryReadAll1m.getExpressionBuilder().anyOf("phoneNumbers")); | |
testReadAll1m.setQuery(queryReadAll1m); | |
addTest(testReadAll1m); | |
ReadAllTest testReadAll21m = new ReadAllTest(Employee.class, 5); | |
testReadAll21m.setName("JoiningReadAllTestPhonesManagedEmployeesPhones"); | |
ReadAllQuery queryReadAll21m = new ReadAllQuery(); | |
queryReadAll21m.setReferenceClass(Employee.class); | |
Expression managedEmployee = queryReadAll21m.getExpressionBuilder().anyOf("managedEmployees"); | |
queryReadAll21m.addJoinedAttribute(queryReadAll21m.getExpressionBuilder().anyOf("phoneNumbers")); | |
queryReadAll21m.addJoinedAttribute(managedEmployee); | |
queryReadAll21m.addJoinedAttribute(managedEmployee.anyOf("phoneNumbers")); | |
testReadAll21m.setQuery(queryReadAll21m); | |
addTest(testReadAll21m); | |
ReadAllTest test2a = new ReadAllTest(Employee.class, 2); | |
test2a.setName("JoiningReadAllTestWhereLastNameWay"); | |
ReadAllQuery query2a = new ReadAllQuery(); | |
query2a.setReferenceClass(Employee.class); | |
query2a.addJoinedAttribute("address"); | |
query2a.setSelectionCriteria(new ExpressionBuilder().get("lastName").equal("Way")); | |
test2a.setQuery(query2a); | |
addTest(test2a); | |
ReadObjectTest test2az = new ReadObjectTest(object); | |
test2az.setName("JoiningReadObjectTestCustomSQL"); | |
ReadObjectQuery query2az = new ReadObjectQuery(); | |
query2az.setReferenceClass(Employee.class); | |
query2az.addJoinedAttribute("address"); | |
query2az.setSQLString("Select * from EMPLOYEE E, SALARY S, ADDRESS A WHERE E.EMP_ID = S.EMP_ID AND E.ADDR_ID = A.ADDRESS_ID AND E.EMP_ID = " + object.getId()); | |
test2az.setQuery(query2az); | |
addTest(test2az); | |
ReadAllTest test2ax = new ReadAllTest(Employee.class, 2); | |
test2ax.setName("JoiningReadAllTestCustomSQL"); | |
ReadAllQuery query2ax = new ReadAllQuery(); | |
query2ax.setReferenceClass(Employee.class); | |
query2ax.addJoinedAttribute("address"); | |
query2ax.setSQLString("Select * from EMPLOYEE E, SALARY S, ADDRESS A WHERE E.EMP_ID = S.EMP_ID AND E.ADDR_ID = A.ADDRESS_ID AND E.L_NAME = 'Way'"); | |
test2ax.setQuery(query2ax); | |
addTest(test2ax); | |
ReadAllTest test2aa = new ReadAllTest(Employee.class, 2); | |
test2aa.setName("JoiningReadAllTestWhereLastNameWay-cursor"); | |
ReadAllQuery query2aa = new ReadAllQuery(); | |
query2aa.setReferenceClass(Employee.class); | |
query2aa.useCursoredStream(); | |
query2aa.addJoinedAttribute("address"); | |
query2aa.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("lastName").equal("Way")); | |
test2aa.setQuery(query2aa); | |
addTest(test2aa); | |
ReadAllJoinReadingTest test2b = new ReadAllJoinReadingTest(3, "teamLeader-address"); | |
ReadAllQuery query2b = new ReadAllQuery(); | |
query2b.setReferenceClass(LargeProject.class); | |
query2b.addJoinedAttribute(query2b.getExpressionBuilder().get("teamLeader")); | |
query2b.addJoinedAttribute(query2b.getExpressionBuilder().get("teamLeader").get("address")); | |
test2b.setQuery(query2b); | |
addTest(test2b); | |
ReadAllTest ownerTest = new ReadAllTest(ObjectA.class, 3); | |
ownerTest.setName("JoinOwnerA-oneToOne-oneToMany"); | |
ReadAllQuery ownerQuery = new ReadAllQuery(); | |
ownerQuery.setReferenceClass(ObjectA.class); | |
ownerQuery.addJoinedAttribute(ownerQuery.getExpressionBuilder().get("oneToOne")); | |
ownerQuery.addJoinedAttribute(ownerQuery.getExpressionBuilder().get("oneToOne").anyOf("oneToMany")); | |
ownerTest.setQuery(ownerQuery); | |
addTest(ownerTest); | |
ReadAllTest ownerTest3 = new ReadAllTest(ObjectA.class, 3); | |
ownerTest3.setName("JoinOwnerA-oneToOne-oneToMany-oneToOne"); | |
ReadAllQuery ownerQuery3 = new ReadAllQuery(); | |
ownerQuery3.setReferenceClass(ObjectA.class); | |
ownerQuery3.addJoinedAttribute(ownerQuery.getExpressionBuilder().get("oneToOne")); | |
Expression join = ownerQuery.getExpressionBuilder().get("oneToOne").anyOf("oneToMany"); | |
ownerQuery3.addJoinedAttribute(join); | |
ownerQuery3.addJoinedAttribute(join.get("oneToOne")); | |
ownerTest3.setQuery(ownerQuery3); | |
addTest(ownerTest3); | |
ReadAllTest ownerTest2 = new ReadAllTest(ObjectA.class, 3); | |
ownerTest2.setName("JoinOwnerA-oneToOne(mapping)"); | |
ReadAllQuery ownerQuery2 = new ReadAllQuery(); | |
ownerQuery2.setReferenceClass(ObjectA.class); | |
ownerTest2.setQuery(ownerQuery2); | |
addTest(ownerTest2); | |
ReadAllTest test3 = new ReadAllTest(LargeProject.class, 3); | |
ReadAllQuery query3 = new ReadAllQuery(); | |
query3.setReferenceClass(LargeProject.class); | |
query3.useCursoredStream(); | |
query3.addJoinedAttribute(query3.getExpressionBuilder().get("teamLeader")); | |
query3.addJoinedAttribute(query3.getExpressionBuilder().get("teamLeader").get("address")); | |
test3.setQuery(query3); | |
addTest(test3); | |
addTest(new ReadObjectMappingJoinReadingTest()); | |
addTest(new MultipleJoinedAttributeQueryTest()); | |
addTest(new ComplexJoinedAttributeQueryTest()); | |
} | |
public void addPartialTests() { | |
// Partial objects | |
ReadAllPartialReadingTest test3 = new ReadAllPartialReadingTest(12, "fisrtName"); | |
test3.setName("ReadAllPartialReadingTest-firstName,salary"); | |
ReadAllQuery query3 = new ReadAllQuery(); | |
query3.setReferenceClass(Employee.class); | |
query3.dontMaintainCache(); | |
query3.addPartialAttribute("firstName"); | |
query3.addPartialAttribute("salary"); | |
test3.setQuery(query3); | |
addTest(test3); | |
ReadAllPartialReadingTest test4 = new ReadAllPartialReadingTest(1, "address"); | |
test4.setName("ReadAllPartialReadingTest-address,period"); | |
ReadAllQuery query4 = new ReadAllQuery(); | |
query4.setReferenceClass(Employee.class); | |
query4.dontMaintainCache(); | |
query4.addPartialAttribute("address"); | |
query4.addPartialAttribute("period"); | |
query4.setSelectionCriteria(new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("city").equal("Ottawa")); | |
test4.setQuery(query4); | |
addTest(test4); | |
ReadAllPartialReadingTest test5 = new ReadAllPartialReadingTest(12, "city"); | |
test5.setName("ReadAllPartialReadingTest-city,salary"); | |
ReadAllQuery query5 = new ReadAllQuery(); | |
query5.setReferenceClass(Employee.class); | |
query5.dontMaintainCache(); | |
query5.addPartialAttribute(query5.getExpressionBuilder().get("address").get("city")); | |
query5.addPartialAttribute("salary"); | |
test5.setQuery(query5); | |
addTest(test5); | |
ReadAllPartialReadingTest test6 = new ReadAllPartialReadingTest(12, "city"); | |
test6.setName("ReadAllPartialReadingTest-city,salary-cursor"); | |
ReadAllQuery query6 = new ReadAllQuery(); | |
query6.useCursoredStream(); | |
query6.setReferenceClass(Employee.class); | |
query6.dontMaintainCache(); | |
query6.addPartialAttribute(query6.getExpressionBuilder().get("address").get("city")); | |
query6.addPartialAttribute("salary"); | |
test6.setQuery(query6); | |
addTest(test6); | |
ReadAllPartialReadingTest test1m = new ReadAllPartialReadingTest(12, "areaCode"); | |
test1m.setName("ReadAllPartialReadingTest-type-areaCode"); | |
ReadAllQuery query1m = new ReadAllQuery(); | |
query1m.setReferenceClass(Employee.class); | |
query1m.dontMaintainCache(); | |
Expression phones = query1m.getExpressionBuilder().anyOf("phoneNumbers"); | |
query1m.addPartialAttribute(phones.get("id")); | |
query1m.addPartialAttribute(phones.get("type")); | |
query1m.addPartialAttribute(phones.get("areaCode")); | |
test1m.setQuery(query1m); | |
addTest(test1m); | |
ReadAllTest test9 = new ReadAllTest(Employee.class, 12); | |
test9.setName("ReadAllPartialReadingTest-PolicyMaxCoverage"); | |
ReadAllQuery query9 = new ReadAllQuery(); | |
query9.setReferenceClass(Employee.class); | |
query9.dontMaintainCache(); | |
query9.addPartialAttribute("normalHours"); | |
//query9.addPartialAttribute("policyHolder"); | |
test9.setQuery(query9); | |
addTest(test9); | |
ReadAllPartialReadingTest test10 = new ReadAllPartialReadingTest(12, "id"); | |
test10.setName("ReadAllPartialReadingTest-id-SelectPrimaryKey"); | |
ReadAllQuery query10 = new ReadAllQuery(); | |
query10.setReferenceClass(Employee.class); | |
query10.dontMaintainCache(); | |
query10.addPartialAttribute("id"); | |
test10.setQuery(query10); | |
addTest(test10); | |
ReadAllPartialReadingTest test11 = new ReadAllPartialReadingTest(12, "firstName"); | |
test11.setName("ReadAllPartialReadingTest-firstName-OrderByPrimaryKey"); | |
ReadAllQuery query11 = new ReadAllQuery(); | |
query11.setReferenceClass(Employee.class); | |
query11.dontMaintainCache(); | |
query11.addPartialAttribute("firstName"); | |
query11.addAscendingOrdering("id"); | |
test11.setQuery(query11); | |
addTest(test11); | |
ReadAllPartialReadingTest test12 = new ReadAllPartialReadingTest(12, "id"); | |
test12.setName("ReadAllPartialReadingTest-firstName-SelectAndOrderByPrimaryKey"); | |
ReadAllQuery query12 = new ReadAllQuery(); | |
query12.setReferenceClass(Employee.class); | |
query12.dontMaintainCache(); | |
query12.addPartialAttribute("id"); | |
query12.addAscendingOrdering("id"); | |
test12.setQuery(query12); | |
addTest(test12); | |
ReadAllPartialReadingAddressTest test14 = new ReadAllPartialReadingAddressTest(12, "id"); | |
test14.setName("ReadAllPartialReadingAddressTest - Address - SelectDistinctAndOrderByPrimaryKey"); | |
ReadAllQuery query14 = new ReadAllQuery(); | |
query14.setReferenceClass(Address.class); | |
query14.dontMaintainCache(); | |
query14.addPartialAttribute("id"); | |
query14.addAscendingOrdering("id"); | |
query14.useDistinct(); | |
test14.setQuery(query14); | |
addTest(test14); | |
ReadAllPartialReadingAddressTest test15 = new ReadAllPartialReadingAddressTest(12, "id"); | |
test15.setName("ReadAllPartialReadingAddressTest - Employee - SelectAddressId"); | |
ReadAllQuery query15 = new ReadAllQuery(); | |
query15.setReferenceClass(Employee.class); | |
query15.dontMaintainCache(); | |
query15.addPartialAttribute("id"); | |
query15.addPartialAttribute(new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("id")); | |
test15.setQuery(query15); | |
addTest(test15); | |
ReadAllPartialReadingAddressTest test16 = new ReadAllPartialReadingAddressTest(26, "id"); | |
test16.setName("ReadAllPartialReadingAddressTest - PhoneNumber - Employee - SelectAddressId"); | |
ReadAllQuery query16 = new ReadAllQuery(); | |
query16.setReferenceClass(PhoneNumber.class); | |
query16.dontMaintainCache(); | |
query16.useDistinct(); | |
query16.addPartialAttribute(new org.eclipse.persistence.expressions.ExpressionBuilder().get("owner").get("address").get("id")); | |
test16.setQuery(query16); | |
addTest(test16); | |
addTest(new QueryValidationTest()); | |
} | |
public void addTests() { | |
addJoinTests(); | |
addBatchTests(); | |
addPartialTests(); | |
addTest(new ReadAllBindAllParametersTest()); | |
addTest(buildBatch1mTest()); | |
} | |
public TestCase buildBatch1mTest() { | |
TestCase test = new TestCase() { | |
public void test() { | |
getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); | |
ReadAllQuery query = new ReadAllQuery(); | |
query.setReferenceClass(Employee.class); | |
Expression rootExpression = query.getExpressionBuilder(); | |
Expression filterPart1 = | |
rootExpression.anyOfAllowingNone("phoneNumbers") | |
.getAllowingNull("owner").get("firstName").like("%"); | |
Expression filterPart2 = | |
rootExpression.anyOfAllowingNone("phoneNumbers") | |
.get("number").like("%"); | |
query.setSelectionCriteria(filterPart1.and(filterPart2)); | |
Expression expression = rootExpression.getAllowingNull("address"); | |
query.addBatchReadAttribute(expression); | |
Expression expression2 = rootExpression.getAllowingNull("phoneNumbers"); | |
query.addBatchReadAttribute(expression2); | |
List<Employee> result = (List<Employee>) getSession().executeQuery(query); | |
result.get(0).getPhoneNumbers().size(); | |
getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); | |
for (Employee employee : result) { | |
if (!compareObjects(employee, getSession().readObject(employee))) { | |
throwError("Employeee does not match:" + employee); | |
} | |
} | |
} | |
}; | |
test.setName("Batch1mTest"); | |
return test; | |
} | |
} |