| /******************************************************************************* |
| * 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.queries; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Hashtable; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.TreeMap; |
| import java.util.Vector; |
| |
| import org.eclipse.persistence.expressions.ExpressionBuilder; |
| import org.eclipse.persistence.internal.sessions.UnitOfWorkImpl; |
| import org.eclipse.persistence.queries.ComplexQueryResult; |
| import org.eclipse.persistence.queries.Cursor; |
| import org.eclipse.persistence.queries.DatabaseQuery; |
| import org.eclipse.persistence.queries.MethodBaseQueryRedirector; |
| import org.eclipse.persistence.queries.ObjectLevelReadQuery; |
| import org.eclipse.persistence.queries.QueryRedirector; |
| import org.eclipse.persistence.queries.ReadAllQuery; |
| import org.eclipse.persistence.queries.ReadObjectQuery; |
| import org.eclipse.persistence.queries.ReportQuery; |
| import org.eclipse.persistence.queries.ScrollableCursorPolicy; |
| import org.eclipse.persistence.sessions.DatabaseRecord; |
| import org.eclipse.persistence.sessions.Record; |
| import org.eclipse.persistence.sessions.UnitOfWork; |
| import org.eclipse.persistence.testing.framework.TestCase; |
| import org.eclipse.persistence.testing.framework.TestSuite; |
| import org.eclipse.persistence.testing.models.employee.domain.Employee; |
| import org.eclipse.persistence.testing.models.employee.domain.EmployeePopulator; |
| import org.eclipse.persistence.testing.models.employee.domain.LargeProject; |
| import org.eclipse.persistence.testing.models.employee.domain.Project; |
| import org.eclipse.persistence.testing.tests.clientserver.ServerSessionTestAdapter; |
| import org.eclipse.persistence.tools.schemaframework.PopulationManager; |
| |
| public class QueryFrameworkTestSuite extends TestSuite { |
| public QueryFrameworkTestSuite() {
|
| setDescription("This suite tests all of the functionality of the query framework.");
|
| }
|
|
|
| public QueryFrameworkTestSuite(boolean isSRG) {
|
| super(isSRG);
|
| setDescription("This suite tests all of the functionality of the query framework.");
|
| }
|
|
|
| public void addTests() { |
| addSRGTests(); |
| addTest(new QueryTimeoutTest()); |
| //Add new tests here, if any. |
| addTest(new ServerSessionTestAdapter(new PessimisticLockNoLockJoinedTest())); |
| addTest(new ReadAllNoDistinctTest()); |
| addTest(new ObjectLevelReadQueryTest.CustomQueryRaceConditionsInReadAllQueryTest()); |
| addTest(new ObjectLevelReadQueryTest.CustomQueryRaceConditionsInReadObjectQueryTest()); |
| addTest(new PartialAttributeTestWithJoinAttribute()); |
| addTest(new PartialAttributeDistinctOrderByTest()); |
| addTest(new FourPartialAttributeTestsWithJoinAttribute()); |
| addTest(buildReadOnlyQueryTest()); |
| addTest(buildGetSQLTest()); |
| addTest(buildJoinSubclassesQueryTest()); |
| addTest(buildRecordTest());
|
| // Bug 6450867 - TOPLINK-6069 ON READOBJECTQUERY ON ENTITY USING MULTIPLE TABLE MAPPING
|
| addTest(new ConformResultsWithMultitableAndJoiningTest());
|
| // EL Bug 235484 - EclipseLink is holding onto old unit of work
|
| addTest(new CachedUpdateCallsQueryClearTest());
|
| addTest(new ZeroPrimaryKeyExistenceCheckTest(true));
|
| addTest(new ZeroPrimaryKeyExistenceCheckTest(false));
|
| // EL Bug 244241 - connection not released on query timeout when cursor used
|
| addTest(new QueryTimeoutConnectionReleasedTest());
|
| // EL Bug 245448 - Add regression tests for querying across relationships using nested
|
| // joining and DailyCacheInvalidationPolicy
|
| addTest(new QueryExecutionTimeSetOnBuildObjectTest());
|
| // EL Bug 245986 - Add regression testing for queries using custom SQL and partial attribute population
|
| addTest(new PartialAttributeWithCustomSQLTest());
|
| addTest(buildArgumentValuesTest());
|
| addTest(new ScrollableCursorForwardOnlyResultSetTest()); // Bug 309142
|
| addTest(new ConformResultsSubclassesTest()); // Bug 327900
|
| addTest(new ScrollableCursorJoinedAttributeTest()); // Bug 351509
|
| addTest(new ScrollableCursorJoiningVerificationTest()); // Bug 361860
|
| addTest(new MultipleOrderByWithSameFieldNameNullsFirstTest());
|
| addTest(new MultipleOrderByWithSameFieldNameTest());
|
| addTest(buildUnionTest());
|
| }
|
|
|
| //SRG test set is maintained by QA only, do NOT add any new test cases into it.
|
| public void addSRGTests() {
|
| ReadAllQuery raq2 = new ReadAllQuery();
|
| raq2.setReferenceClass(Employee.class);
|
| raq2.useCollectionClass(ArrayList.class);
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq2));
|
|
|
| ReadAllQuery raq3 = new ReadAllQuery();
|
| raq3.setReferenceClass(Employee.class);
|
| raq3.useCollectionClass(Vector.class);
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq3));
|
|
|
| ReadAllQuery raq4 = new ReadAllQuery();
|
| raq4.setReferenceClass(Employee.class);
|
| raq4.useCollectionClass(HashSet.class);
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq4));
|
|
|
| ReadAllQuery raq6 = new ReadAllQuery();
|
| raq6.setReferenceClass(Employee.class);
|
| raq6.useMapClass(HashMap.class, "getFirstName");
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq6));
|
|
|
| ReadAllQuery raq9 = new ReadAllQuery();
|
| raq9.setReferenceClass(Employee.class);
|
| raq9.useMapClass(Hashtable.class, "getId");
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq9));
|
|
|
| ReadAllQuery raq10 = new ReadAllQuery();
|
| raq10.setReferenceClass(Employee.class);
|
| raq10.useCollectionClass(ArrayList.class);
|
| addTest(new CollectionReadAllTest(Employee.class, 12, raq10));
|
|
|
| ReadAllQuery raq20 = new ReadAllQuery();
|
| raq20.setReferenceClass(Employee.class);
|
| raq20.useMapClass(Hashtable.class, "getFirstName");
|
| addTest(new MapReadAllTest(Employee.class, 12, raq20));
|
|
|
| ReadAllQuery raq21 = new ReadAllQuery();
|
| raq21.setReferenceClass(Employee.class);
|
| raq21.useMapClass(TreeMap.class, "getId");
|
| addTest(new MapReadAllTest(Employee.class, 12, raq21));
|
|
|
| addTest(new RefreshNoCacheWithNoIdentityMapTest());
|
| addTest(new ShallowModifyTest());
|
| addTest(new DontMaintainCacheTest());
|
| addTest(new CursoredStreamTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("city").equal("Ottawa")));
|
| addTest(new CursoredStreamTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("firstName").like("B%")));
|
| addTest(new CursoredStreamTest(LargeProject.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("teamLeader").get("firstName").like("Sarah%")));
|
|
|
| addTest(new CursoredStreamWithUselessConformTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("city").equal("Ottawa")));
|
| addTest(new CursoredStreamWithUselessConformTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("firstName").like("B%")));
|
| addTest(new CursoredStreamWithUselessConformTest(LargeProject.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("teamLeader").get("firstName").like("Sarah%")));
|
|
|
| addTest(new CursoredStreamCustomSQLTest());
|
| addTest(new CursoredStreamAnyOfTest());
|
| addTest(new CursoredStreamWithUnitOfWorkTest());
|
| addTest(new CursoredStreamDistinctTest());
|
|
|
| //addTest(new CursoredStreamReleaseConnectionsTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("city").equal("Ottawa")));
|
| addTest(new CursoredStreamReleaseConnectionsTest(false));
|
| addTest(new CursoredStreamReleaseConnectionsTest(true));
|
|
|
| addTest(new ScrollableCursorTest(Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("firstName").like("B%")));
|
| addTest(new ScrollableCursorTest(LargeProject.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("teamLeader").get("firstName").like("Sarah%")));
|
| addTest(new ScrollableCursorAPITest());
|
| addTest(new ScrollableCursorBackwardReadingTest());
|
| addTest(new ScrollableCursorStatementCachingReadTest());
|
| addTest(new ScrollableCursorNavigationAPITest());
|
|
|
| // Cursor conforming tests...
|
| addTest(new CursoredStreamConformingTest());
|
| addTest(new CursoredStreamConformingTest(true));
|
| addTest(new ScrollableCursorBackwardReadingTest(true));
|
| addTest(new ScrollableCursorNavigationAPITest(true));
|
|
|
| addTest(new OrderingTest());
|
| addTest(new OrderingMutipleTableTest());
|
| addTest(new OrderingSuperClassTest());
|
| addTest(new OrderingByExpressionTest());
|
| addTest(new OrderingWithAnyOfTest());
|
| addTest(new ShallowRefreshTest());
|
| addTest(new RefreshTest());
|
| addTest(new PessimisticLockTest(ObjectLevelReadQuery.LOCK));
|
| addTest(new PessimisticLockTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new PessimisticLockFineGrainedTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new PessimisticLockOutsideUnitOfWorkTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new PessimisticLockInheritanceTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new ServerSessionTestAdapter(new PessimisticLockJoinedAttributeTest()));
|
| addTest(new ServerSessionTestAdapter(new PessimisticLockBatchAttributeTest()));
|
| addTest(new PessimisticLockEmptyTransactionTest());
|
| addTest(new PessimisticLockIndirectionJoiningTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new PessimisticLockRefreshTest(ObjectLevelReadQuery.LOCK_NOWAIT));
|
| addTest(new OnlyRefreshIfNewTest());
|
| addTest(new DeepRefreshTest());
|
| addTest(new PredefinedQueryReadAllTest(Employee.class, 12));
|
| addTest(new PredefinedInQueryReadAllTest(Employee.class, 1));
|
| addTest(new PredefinedQueryReadObjectTest(PopulationManager.getDefaultManager().getObject(Employee.class, "0001")));
|
| addTest(new PredefinedQueryLikeIgnoreCaseTest());
|
| addTest(buildPredefinedObjectComparisonTest());
|
| addTest(buildPredefinedInTest());
|
| addTest(buildPredefinedEqualNullTest());
|
| addTest(buildPredefinedContainsSubStringTest());
|
| addTest(buildPredefinedAnyOfObjectComparisonTest());
|
| addTest(buildPredefinedObjectTypeTest());
|
| addTest(buildPredefinedNestedParameterTest());
|
| addTest(buildPredefinedRedirectorTest());
|
| addTest(buildPredefinedMethodRedirectorTest());
|
| addTest(new PredefinedQueryInheritanceTest());
|
| addTest(new PredefinedQueryToUpperOnParameterTest(PopulationManager.getDefaultManager().getObject(Employee.class, "0001")));
|
| addTest(new ReloadSelectionObjectTest(new EmployeePopulator().basicEmployeeExample1(), true));
|
| addTest(new ReloadSelectionObjectTest(new EmployeePopulator().basicEmployeeExample1(), false));
|
| addTest(new BadQueryTest());
|
| addTest(new Jdk12ScrollableCursorTest());
|
| //Bug#2839852 Refreshing is not possible if the query uses checkCacheOnly.
|
| addTest(new RefreshWithCheckCacheOnlyTest());
|
|
|
| /** Test cascaded read queries */
|
| addTest(new CascadingAllCacheTest());
|
| addTest(new CascadingAllNoCacheTest());
|
| addTest(new CascadingNoneCacheTest());
|
| addTest(new CascadingNoneNoCacheTest());
|
| addTest(new CascadingPrivateCacheTest());
|
| addTest(new CascadingPrivateNoCacheTest());
|
|
|
| /** Test cascaded modify queries */
|
| addTest(new DeepModifyTest());
|
| addTest(new PrivateModifyTest());
|
|
|
| /** Test cascaded delete queries */
|
| addTest(new DeepDeleteTest());
|
| addTest(new PrivateDeleteTest());
|
| addTest(new DoesExistTest());
|
| addTest(new DataReadQueryTest1());
|
| addTest(new DirectReadQueryTest1());
|
| addTest(new ValueReadQueryTest1());
|
|
|
| addTest(new GetValueFromObject());
|
| addTest(new CursoredStreamClientSessionTest());
|
| addTest(new CursoredStreamReadWriteClientSessionTest());
|
|
|
| addTest(new QBEObjectWithAllFieldsFilled());
|
| addTest(new QBESpecialOperators());
|
| addTest(new QBEExcludedValues());
|
| addTest(new QBEValidateUnsupportedMappingsFlag());
|
| addTest(new QBEObjectReferenceMapping());
|
| addTest(new QBECollectionMapping());
|
|
|
| // Conforming tests
|
| // For bug 3568141: shoudn't ignore policy if set to triggerIndirection()
|
| addTest(new ConformingShouldTriggerIndirectionTest());
|
| // For bug 3570561: shouldn't throw valueholder exceptions
|
| addTest(new ConformingThrowConformExceptionsTest());
|
| addTest(new ConformResultsAcrossOneToOneTest(ConformResultsAcrossOneToOneTest.EQUAL));
|
| addTest(new ConformResultsAcrossOneToOneTest(ConformResultsAcrossOneToOneTest.NOT_EQUAL));
|
| addTest(new ConformResultsAcrossOneToOneTest(ConformResultsAcrossOneToOneTest.IS_NULL));
|
| addTest(new ConformResultsAcrossOneToOneTest(ConformResultsAcrossOneToOneTest.NOT_NULL));
|
| // Added for bug 3324757: REDIRECT QUERY RESULTS DO NOT CONFORM TO A UNITOFWORK
|
| addTest(new ConformResultsRedirectorTest());
|
| addTest(new ConformResultsWithSelectionObjectTest());
|
| // Added for bug 2782991: Conforming find by primary key takes linear time.
|
| addTests(ConformResultsWithPrimaryKeyExpressionTest.buildTests());
|
| addTest(new ConformResultsAcrossOneToManyAcrossOneToOneTest());
|
| addTest(new ConformResultsAcrossOneToManyTest());
|
| addTest(new ConformResultsAcrossWrappedOneToManyTest());
|
| addTest(new ShouldRegisterResultsInUnitOfWorkTest(false));
|
| addTest(new ShouldRegisterResultsInUnitOfWorkTest(true));
|
| addTest(new ConformResultsPerformanceTest());
|
|
|
| addTest(new OneToManyMaxRowsSettingTest());
|
|
|
| // Created for BUG# 2745106
|
| addTest(new QueryExceptionStringTest());
|
| addTest(new NamedQueriesClientSessionTest());
|
| addTest(new NamedQueriesDescriptorQueryManagerTest());
|
| addTest(new NamedQueriesUOWTest());
|
| addTest(new NamedQueryGetQueryNoArgumentsTest());
|
| addTest(new ServerClientNamedQueryTest());
|
| addTest(new GetTableGetFieldTest());
|
| //code coverage
|
| addTest(new NamedQueryNotFoundInUOWTest());
|
|
|
| // Created for CR# 4286
|
| addTest(new DeleteAllQueryTest());
|
|
|
| // Created for bug 5840824
|
| addTest(new DeleteObjectPrivatelyOwningUntriggeredIndirection());
|
|
|
| // Created for BUG# 2692956
|
| addTest(new RedirectQueryOnUOWTest());
|
| addTest(new RedirectorOnDescriptorTest());
|
|
|
| addTest(new DoNotRedirectDefaultRedirectorTest());
|
|
|
| //created for BUG# 3037982
|
| addTest(new SetReferenceClassTest());
|
|
|
| // Created for BUG# 3136413
|
| addTest(new QueryByExampleInUOWTest());
|
|
|
| addTest(new InheritancePrepareTest());
|
| addTest(new InheritanceViewPrepareTest());
|
|
|
| // Create for BUG# 3337003
|
| addTest(new DataReadQueryContainerPolicyTest());
|
|
|
| // New tests added for the UpdateAllQuery feature work
|
| addTest(new UpdateAllQueryTest());
|
| addTest(new UpdateAllQueryUOWTest());
|
| addTest(new UpdateAllQueryUOWTest(false));
|
| addTest(new UpdateAllQueryExpressionMathTest());
|
| addTest(new UpdateAllQueryRollbackTest());
|
|
|
| addTest(new UOWgetQueryTest());
|
| addTest(new CascadeNoBindingOnQuery());
|
| addTest(new IncorrectPartialAttributeTest());
|
|
|
| addTest(new FirstResultAndMaxRowsTest(0, 0, 12));
|
| addTest(new FirstResultAndMaxRowsTest(1, 0, 11));
|
| addTest(new FirstResultAndMaxRowsTest(0, 5, 5));
|
| addTest(new FirstResultAndMaxRowsTest(2, 5, 3));
|
|
|
| addTest(new QueryCacheTest());
|
|
|
| // Created for Bug 4318924
|
| addTest(new TranslatedStringsTest());
|
|
|
| }
|
|
|
| /**
|
| * Test the read-only query feature.
|
| */
|
| public TestCase buildReadOnlyQueryTest() {
|
| TestCase test = new TestCase() {
|
| public void test() {
|
| UnitOfWork uow = getSession().acquireUnitOfWork();
|
| // Test read alls.
|
| ReadAllQuery query = new ReadAllQuery(Employee.class);
|
| query.setIsReadOnly(true);
|
| List result = (List) uow.executeQuery(query);
|
| if (((UnitOfWorkImpl)uow).isObjectRegistered(result.get(0))) {
|
| throwError("Read-only result was registered.");
|
| }
|
| // Test read objects.
|
| ReadObjectQuery objectQuery = new ReadObjectQuery(result.get(0));
|
| objectQuery.setIsReadOnly(true);
|
| Employee employee = (Employee)uow.executeQuery(objectQuery);
|
| if (((UnitOfWorkImpl)uow).isObjectRegistered(employee)) {
|
| throwError("Read-only result was registered.");
|
| }
|
| if (employee != result.get(0)) {
|
| throwError("Read-only result identity not maintained.");
|
| }
|
| // Test object works.
|
| employee.getAddress();
|
| }
|
| };
|
| test.setName("ReadOnlyQueryTest");
|
| return test;
|
| }
|
|
|
| /**
|
| * Test unions.
|
| */
|
| public TestCase buildUnionTest() {
|
| TestCase test = new TestCase() {
|
| @Override
|
| public void setup() {
|
| if (getSession().getPlatform().isMySQL() || getSession().getPlatform().isSybase() || getSession().getPlatform().isSymfoware() ) {
|
| throwWarning("Database does not support INTERSECT");
|
| }
|
| }
|
|
|
| @Override
|
| public void test() {
|
| ExpressionBuilder e = new ExpressionBuilder();
|
| ReadAllQuery query = new ReadAllQuery(Employee.class, e);
|
| query.setSelectionCriteria(e.get("firstName").equal("Bob"));
|
|
|
| ExpressionBuilder e2 = new ExpressionBuilder();
|
| ReportQuery union = new ReportQuery(Employee.class, e2);
|
| union.addItem("employee", e2);
|
| union.setSelectionCriteria(e2.get("firstName").equal("Sarah"));
|
| query.union(union);
|
|
|
| ExpressionBuilder e3 = new ExpressionBuilder();
|
| ReportQuery unionAll = new ReportQuery(Employee.class, e3);
|
| unionAll.addItem("employee", e3);
|
| unionAll.setSelectionCriteria(e3.get("firstName").equal("Sarah"));
|
| query.addUnionExpression(e.unionAll(e.subQuery(unionAll)));
|
|
|
| ExpressionBuilder e4 = new ExpressionBuilder();
|
| ReportQuery intersect = new ReportQuery(Employee.class, e4);
|
| intersect.addItem("employee", e4);
|
| intersect.setSelectionCriteria(e4.get("firstName").equal("Sarah"));
|
| query.intersect(intersect);
|
|
|
| /*ExpressionBuilder e5 = new ExpressionBuilder();
|
| ReportQuery intersectAll = new ReportQuery(Employee.class, e5);
|
| intersectAll.addItem("employee", e5);
|
| intersectAll.setSelectionCriteria(e5.get("firstName").equal("Sarah"));
|
| query.addUnionExpression(e.intersectAll(e.subQuery(intersectAll)));*/
|
|
|
| ExpressionBuilder e6 = new ExpressionBuilder();
|
| ReportQuery except = new ReportQuery(Employee.class, e6);
|
| except.addItem("employee", e6);
|
| except.setSelectionCriteria(e6.get("firstName").equal("Sarah"));
|
| query.except(except);
|
|
|
| /*ExpressionBuilder e7 = new ExpressionBuilder();
|
| ReportQuery exceptAll = new ReportQuery(Employee.class, e7);
|
| exceptAll.addItem("employee", e7);
|
| exceptAll.setSelectionCriteria(e7.get("firstName").equal("Sarah"));
|
| query.addUnionExpression(e.exceptAll(e.subQuery(exceptAll)));*/
|
|
|
| List result = (List)getSession().executeQuery(query);
|
| if (result.size() > 0) {
|
| throwError("Expected 0 elements: " + result);
|
| }
|
| }
|
| };
|
| test.setName("UnionTest");
|
| return test;
|
| }
|
|
|
| /**
|
| * Query argument values.
|
| */
|
| public TestCase buildArgumentValuesTest() {
|
| TestCase test = new TestCase() {
|
| public void test() {
|
| // Test read alls.
|
| ReadAllQuery query = new ReadAllQuery(Employee.class);
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("firstName").equal(
|
| query.getExpressionBuilder().getParameter("firstName")));
|
| query.addArgument("firstName");
|
| query.addArgumentValue("Bob");
|
| List<Employee> result = (List) getSession().executeQuery(query);
|
| for (Employee employee : result) {
|
| if (!employee.getFirstName().equals("Bob")) {
|
| throwError("Incorrect result: " + employee);
|
| }
|
| }
|
| }
|
| };
|
| test.setName("ArgumentValuesTest");
|
| return test;
|
| }
|
|
|
| /**
|
| * Test getting the SQL for a parameterized query.
|
| */
|
| public TestCase buildGetSQLTest() {
|
| TestCase test = new TestCase() {
|
| public void test() {
|
| ReadAllQuery query = new ReadAllQuery(Employee.class);
|
| ExpressionBuilder builder = query.getExpressionBuilder();
|
| query.setSelectionCriteria(builder.get("firstName").equal(builder.getParameter("name")));
|
| query.addArgument("name");
|
| Record record = new DatabaseRecord();
|
| record.put("name", "Bob");
|
| String sql = query.getTranslatedSQLString(getSession(), record);
|
| if (sql.indexOf("?") != -1) {
|
| throwError("SQL was not translated.");
|
| }
|
| }
|
| };
|
| test.setName("GetSQLTest");
|
| return test;
|
| }
|
|
|
| /**
|
| * Test the join-subclasses query feature.
|
| */
|
| public TestCase buildJoinSubclassesQueryTest() {
|
| TestCase test = new TestCase() {
|
| public void test() {
|
| UnitOfWork uow = getSession().acquireUnitOfWork();
|
| ReadAllQuery query = new ReadAllQuery(Project.class);
|
| boolean TYPE_SCROLL_INSENSITIVE_isSupported = true;
|
| boolean CONCUR_UPDATABLE_isSupported = true;
|
| if(getSession().getPlatform().isSQLServer()) {
|
| // In case either TYPE_SCROLL_INSENSITIVE or CONCUR_UPDATABLE used
|
| // MS SQL Server Version: 9.00.2050; MS SQL Server 2005 JDBC Driver Version: 1.2.2828.100 throws exception:
|
| // com.microsoft.sqlserver.jdbc.SQLServerException: The cursor type/concurrency combination is not supported.
|
| TYPE_SCROLL_INSENSITIVE_isSupported = false;
|
| CONCUR_UPDATABLE_isSupported = false;
|
| }
|
| if(getSession().getPlatform().isSymfoware()) {
|
| // Symfoware supports updatable cursors, but not in this way. Also,
|
| // it considers SQL queries that select from multiple tables as
|
| // non-updatable, thus raising an exception for this test.
|
| TYPE_SCROLL_INSENSITIVE_isSupported = false;
|
| CONCUR_UPDATABLE_isSupported = false;
|
| }
|
| // HANA supports only TYPE_FORWARD_ONLY and CONCUR_READ_ONLY, see bug 384116
|
| if (getSession().getPlatform().isHANA()) {
|
| ScrollableCursorPolicy policy = new ScrollableCursorPolicy();
|
| policy.setResultSetType(ScrollableCursorPolicy.TYPE_FORWARD_ONLY);
|
| policy.setResultSetConcurrency(ScrollableCursorPolicy.CONCUR_READ_ONLY);
|
| policy.setPageSize(10);
|
| query.useScrollableCursor(policy);
|
| } else if(TYPE_SCROLL_INSENSITIVE_isSupported && CONCUR_UPDATABLE_isSupported) {
|
| query.useScrollableCursor();
|
| } else {
|
| ScrollableCursorPolicy policy = new ScrollableCursorPolicy();
|
| if(!TYPE_SCROLL_INSENSITIVE_isSupported) {
|
| policy.setResultSetType(ScrollableCursorPolicy.TYPE_SCROLL_SENSITIVE);
|
| }
|
| if(!CONCUR_UPDATABLE_isSupported) {
|
| policy.setResultSetConcurrency(ScrollableCursorPolicy.CONCUR_READ_ONLY);
|
| }
|
| policy.setPageSize(10);
|
| query.useScrollableCursor(policy);
|
| }
|
| query.setShouldOuterJoinSubclasses(true);
|
| Cursor result = (Cursor) uow.executeQuery(query);
|
| result.nextElement();
|
| result.close();
|
| }
|
| };
|
| test.setName("JoinSubclassesQueryTest");
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedAnyOfObjectComparisonTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByPhone");
|
| query.setSelectionCriteria(query.getExpressionBuilder().anyOf("phoneNumbers").equal(query.getExpressionBuilder().getParameter("phone")));
|
| query.addArgument("phone");
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee.getPhoneNumbers().firstElement());
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedAnyOfObjectComparisonTest");
|
| test.setDescription("Test that any of object comparisons can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedContainsSubStringTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeWithNameContaining");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("firstName").containsSubstringIgnoringCase(query.getExpressionBuilder().getParameter("name")));
|
| query.addArgument("name");
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee.getFirstName().toLowerCase());
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedContainsSubStringTest");
|
| test.setDescription("Test that complex function can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedEqualNullTest() {
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByName");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("firstName").equal(query.getExpressionBuilder().getParameter("name")));
|
| query.addArgument("name");
|
| query.setShouldPrepare(false);
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(null);
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, null, arguments);
|
| test.setName("PredefinedEqualNullTest");
|
| test.setDescription("Test that equal null can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedInTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByName");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("firstName").in(query.getExpressionBuilder().getParameter("names")));
|
| query.addArgument("names");
|
| query.setShouldPrepare(false);
|
| query.bindAllParameters();
|
|
|
| Vector arguments = new Vector();
|
| Vector names = new Vector();
|
| names.addElement(employee.getFirstName());
|
| names.addElement("Hommer-Simpson");
|
| arguments.addElement(names);
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedInTest");
|
| test.setDescription("Test that in's can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedMethodRedirectorTest() {
|
| final Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByAnEmployee");
|
| query.addArgument("employee");
|
| MethodBaseQueryRedirector redirector = new MethodBaseQueryRedirector(QueryFrameworkTestSuite.class, "findEmployeeByAnEmployee");
|
| query.setRedirector(redirector);
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee);
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedMethodRedirectorTest");
|
| test.setDescription("Test query redirectors.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedNestedParameterTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeInSameCity");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("address").get("city").equal(query.getExpressionBuilder().getParameter("employee").get("address").get("city")));
|
| query.addArgument("employee");
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee);
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedNestedParameterTest");
|
| test.setDescription("Test nested parameters.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedObjectComparisonTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByAddress");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("address").equal(query.getExpressionBuilder().getParameter("address")));
|
| query.addArgument("address");
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee.getAddress());
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedObjectComparisonTest");
|
| test.setDescription("Test that object comparisons can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedObjectTypeTest() {
|
| Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByGender");
|
| query.setSelectionCriteria(query.getExpressionBuilder().get("firstName").equal(query.getExpressionBuilder().getParameter("firstName")).and(query.getExpressionBuilder().get("gender").equal(query.getExpressionBuilder().getParameter("gender"))));
|
| query.addArgument("firstName");
|
| query.addArgument("gender");
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee.getFirstName());
|
| arguments.addElement(employee.getGender());
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedObjectTypeTest");
|
| test.setDescription("Test that object type mappings can be parameterized.");
|
|
|
| return test;
|
| }
|
|
|
| public PredefinedQueryTest buildPredefinedRedirectorTest() {
|
| final Employee employee = (Employee)PopulationManager.getDefaultManager().getObject(Employee.class, "0002");
|
|
|
| ReadObjectQuery query = new ReadObjectQuery(Employee.class);
|
| query.setName("findEmployeeByEmployee");
|
| query.addArgument("employee");
|
| query.setRedirector(new QueryRedirector() {
|
| public Object invokeQuery(DatabaseQuery query, org.eclipse.persistence.sessions.Record arguments, org.eclipse.persistence.sessions.Session session) {
|
| return arguments.get("employee");
|
| }
|
| });
|
|
|
| Vector arguments = new Vector();
|
| arguments.addElement(employee);
|
|
|
| PredefinedQueryTest test = new PredefinedQueryTest(query, employee, arguments);
|
| test.setName("PredefinedRedirectorTest");
|
| test.setDescription("Test query redirectors.");
|
|
|
| return test;
|
| }
|
|
|
| /**
|
| * Test the record Map API.
|
| */
|
| public TestCase buildRecordTest() {
|
| TestCase test = new TestCase() {
|
| public void test() {
|
| ReadAllQuery query = new ReadAllQuery(Employee.class);
|
| query.setShouldIncludeData(true);
|
| ComplexQueryResult result = (ComplexQueryResult) getSession().executeQuery(query);
|
| DatabaseRecord record = (DatabaseRecord)((List)result.getData()).get(0);
|
| Iterator keySetKeys = record.keySet().iterator();
|
| Iterator keys = record.getFields().iterator();
|
| while (keys.hasNext() || keySetKeys.hasNext()) {
|
| if (keys.next() != keySetKeys.next()) {
|
| throwError("KeySet is incorrect.");
|
| }
|
| }
|
| Iterator valuesSetValues = record.values().iterator();
|
| Iterator values = record.getValues().iterator();
|
| while (values.hasNext() || valuesSetValues.hasNext()) {
|
| if (values.next() != valuesSetValues.next()) {
|
| throwError("ValuesSet is incorrect.");
|
| }
|
| }
|
| Iterator entries = record.entrySet().iterator();
|
| keys = record.getFields().iterator();
|
| values = record.getValues().iterator();
|
| while (entries.hasNext() || keys.hasNext()) {
|
| Map.Entry entry = (Map.Entry)entries.next();
|
| if ((entry.getKey() != keys.next()) || (entry.getValue() != values.next())) {
|
| throwError("EntrySet is incorrect.");
|
| }
|
| }
|
| }
|
| };
|
| test.setName("BuildRecordTest");
|
| return test;
|
| }
|
|
|
| public static Object findEmployeeByAnEmployee(DatabaseQuery query, org.eclipse.persistence.sessions.DatabaseRecord arguments, org.eclipse.persistence.sessions.Session session) {
|
| ((ReadObjectQuery)query).setSelectionObject(arguments.get("employee"));
|
|
|
| return session.executeQuery(query);
|
| }
|
|
|
| public static Object findEmployeeByAnEmployee(org.eclipse.persistence.sessions.Session session, Vector arguments) {
|
| return arguments.firstElement();
|
| }
|
| }
|