Return-Path: Delivered-To: apmail-db-jdo-commits-archive@www.apache.org Received: (qmail 79310 invoked from network); 19 Mar 2005 04:54:50 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 19 Mar 2005 04:54:50 -0000 Received: (qmail 78183 invoked by uid 500); 19 Mar 2005 04:54:50 -0000 Mailing-List: contact jdo-commits-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jdo-dev@db.apache.org Delivered-To: mailing list jdo-commits@db.apache.org Delivered-To: moderator for jdo-commits@db.apache.org Received: (qmail 74682 invoked by uid 99); 19 Mar 2005 02:53:02 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Message-ID: <20050319010618.28403.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Mailer: svnmailer-1.0.0-dev Date: Sat, 19 Mar 2005 01:06:18 -0000 Subject: svn commit: r158176 [73/79] - in incubator/jdo/trunk/ri11: ./ src/ src/conf/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/jdo/ src/java/org/apache/jdo/ejb/ src/java/org/apache/jdo/enhancer/ src/java/org/apache/jdo/impl/ src/java/org/apache/jdo/impl/enhancer/ src/java/org/apache/jdo/impl/enhancer/classfile/ src/java/org/apache/jdo/impl/enhancer/core/ src/java/org/apache/jdo/impl/enhancer/generator/ src/java/org/apache/jdo/impl/enhancer/meta/ src/java/org/apache/jdo/impl/enhancer/meta/model/ src/java/org/apache/jdo/impl/enhancer/meta/prop/ src/java/org/apache/jdo/impl/enhancer/meta/util/ src/java/org/apache/jdo/impl/enhancer/util/ src/java/org/apache/jdo/impl/fostore/ src/java/org/apache/jdo/impl/jdoql/ src/java/org/apache/jdo/impl/jdoql/jdoqlc/ src/java/org/apache/jdo/impl/jdoql/scope/ src/java/org/apache/jdo/impl/jdoql/tree/ src/java/org/apache/jdo/impl/model/ src/java/org/apache/jdo/impl/model/java/ src/java/org/apache/jdo/impl/model/java/runtime/ src/java/org/apache/jdo/impl/model/jdo/ src/java/org/apache/jdo/impl/model/jdo/caching/ src/java/org/apache/jdo/impl/model/jdo/util/ src/java/org/apache/jdo/impl/model/jdo/xml/ src/java/org/apache/jdo/impl/pm/ src/java/org/apache/jdo/impl/sco/ src/java/org/apache/jdo/impl/state/ src/java/org/apache/jdo/jdoql/ src/java/org/apache/jdo/jdoql/tree/ src/java/org/apache/jdo/model/ src/java/org/apache/jdo/model/java/ src/java/org/apache/jdo/model/jdo/ src/java/org/apache/jdo/pm/ src/java/org/apache/jdo/sco/ src/java/org/apache/jdo/state/ src/java/org/apache/jdo/store/ src/java/org/apache/jdo/util/ test/ test/conf/ test/enhancer/ test/enhancer/sempdept/ test/enhancer/sempdept/src/ test/enhancer/sempdept/src/empdept/ test/fsuid2/ test/fsuid2/org/ test/fsuid2/org/apache/ test/fsuid2/org/apache/jdo/ test/fsuid2/org/apache/jdo/pc/ test/java/ test/java/org/ test/java/org/apache/ test/java/org/apache/jdo/ test/java/org/apache/jdo/impl/ test/java/org/apache/jdo/impl/fostore/ test/java/org/apache/jdo/pc/ test/java/org/apache/jdo/pc/appid/ test/java/org/apache/jdo/pc/empdept/ test/java/org/apache/jdo/pc/serializable/ test/java/org/apache/jdo/pc/xempdept/ test/java/org/apache/jdo/test/ test/java/org/apache/jdo/test/query/ test/java/org/apache/jdo/test/util/ test/jdo/ test/jdo/org/ test/jdo/org/apache/ test/jdo/org/apache/jdo/ test/jdo/org/apache/jdo/pc/ test/jdo/org/apache/jdo/pc/appid/ test/jdo/org/apache/jdo/pc/empdept/ test/jdo/org/apache/jdo/pc/serializable/ test/jdo/org/apache/jdo/pc/xempdept/ xdocs/ To: jdo-commits@db.apache.org From: mbo@apache.org X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Added: incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Collect= ionTest.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/test/java/org/a= pache/jdo/test/query/CollectionTest.java?view=3Dauto&rev=3D158176 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Collection= Test.java (added) +++ incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Collection= Test.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,1902 @@ +/* + * Copyright 2005 The Apache Software Foundation. + *=20 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at=20 + *=20 + * http://www.apache.org/licenses/LICENSE-2.0 + *=20 + * Unless required by applicable law or agreed to in writing, software=20 + * distributed under the License is distributed on an "AS IS" BASIS,=20 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied= .=20 + * See the License for the specific language governing permissions and=20 + * limitations under the License. + */ + +/* + * CollectionTest.java + * + * Created on April 10, 2000 + */ + +package org.apache.jdo.test.query; + +import java.util.*; +import java.io.PrintStream; + +import javax.jdo.*; + +import org.apache.jdo.pc.xempdept.Department; +import org.apache.jdo.pc.xempdept.Employee; +import org.apache.jdo.pc.xempdept.Project; + +/**=20 + * + * @author Michael Bouschen + */ +public class CollectionTest + extends PositiveTest +{ + public CollectionTest(PersistenceManagerFactory pmf, PrintStream log) + { + super(pmf, log); + } + + protected boolean isTestMethodName(String methodName) + { + return methodName.startsWith("collection"); + } + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + // Test methods + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + + /** + * Testcase: simple collection navigation (1:n) + */ + public void collection001() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & e.firstname =3D=3D \"firs= tEngOne\""); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + &-clause + */ + public void collection002() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("(employees.contains(e) & e.firstname =3D=3D \"fir= stEngOne\") & name =3D=3D \"Engineering\""); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + &-clause (changed or= der of & operators) + */ + public void collection003() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & (e.firstname =3D=3D \"fir= stEngOne\" & name =3D=3D \"Engineering\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + &-clause (changed or= der of & operators) + */ + public void collection004() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & (name =3D=3D \"Engineerin= g\" & e.firstname =3D=3D \"firstEngOne\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + &-clause (changed or= der of & operators) + */ + public void collection005() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("name =3D=3D \"Engineering\" & (employees.contains= (e) & e.firstname =3D=3D \"firstEngOne\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + |-clause + */ + public void collection006() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & e.firstname =3D=3D \"firs= tEngOne\" | name =3D=3D \"Sales\""); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + |-clause (changed or= der of | operands) + */ + public void collection007() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("name =3D=3D \"Sales\" | (employees.contains(e) & = e=2Efirstname =3D=3D \"firstEngOne\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (1:n) + simple reference nav= igation + */ + public void collection008() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & e.insurance.carrier =3D= =3D \"Carrier One\""); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (n:m) + */ + public void collection009() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & e.firstname =3D=3D \"firs= tEngOne\""); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation (n:m) + simple reference nav= igation + * checks bug report 4339510 + */ + public void collection010() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee;"= ); + query.declareVariables("Employee e"); + query.setFilter("employees.contains(e) & e.insurance.carrier =3D= =3D \"Carrier One\""); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: simple collection navigation +=20 + * navigating a reference relationship from the variable twice insid= e an or expression + */ + public void collection011() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e"); + query.setFilter("employees.contains(e) & " +=20 + "(e.insurance.carrier =3D=3D \"Carrier Three\" | e= .insurance.carrier =3D=3D \"Carrier Seven\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: collection navigation +=20 + * navigate a reference relationship to get the collection + + * navigating a reference relationship from the variable twice insid= e an or expression + */ + public void collection012() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e"); + query.setFilter("manager.team.contains(e) & " +=20 + "(e.department.deptid =3D=3D 1 || e.department.dep= tid =3D=3D 2)"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: variable field access + */ + public void collection013() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Project p =3D new Project(); + p.setProjid(1); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Project"); + query.declareParameters("Project p"); + query.declareVariables("Project project"); + query.setFilter("projects.contains(project) & project.projid =3D= =3D p.projid"); + setEmployeeCandidates(query); + Object result =3D query.execute(p); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + =20 + /** + * Testcase: object comparison + * variable =3D=3D param=20 + * navigating join table relationship + */ + public void collection014() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Project p =3D getProjectById(1L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Project"); + query.declareParameters("Project p"); + query.declareVariables("Project project"); + query.setFilter("projects.contains(project) & project =3D=3D p"); + setEmployeeCandidates(query); + Object result =3D query.execute(p); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * param =3D=3D variable=20 + * navigating join table relationship + */ + public void collection015() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Project p =3D getProjectById(1L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Project"); + query.declareParameters("Project p"); + query.declareVariables("Project project"); + query.setFilter("projects.contains(project) & p =3D=3D project"); + setEmployeeCandidates(query); + Object result =3D query.execute(p); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable !=3D param + * navigating join table relationship + */ + public void collection016() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Project p =3D getProjectById(1L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Project"); + query.declareParameters("Project p"); + query.declareVariables("Project project"); + query.setFilter("projects.contains(project) & project !=3D p"); + setEmployeeCandidates(query); + Object result =3D query.execute(p); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 13; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * param !=3D variable + * navigating join table relationship + */ + public void collection017() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Project p =3D getProjectById(1L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Project"); + query.declareParameters("Project p"); + query.declareVariables("Project project"); + query.setFilter("projects.contains(project) & p !=3D project"); + setEmployeeCandidates(query); + Object result =3D query.execute(p); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 13; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D param=20 + * navigating collection side of 1:n relationship + */ + public void collection018() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(8L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee"); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("employees.contains(employee) & employee =3D=3D e"= ); + setDepartmentCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * param =3D=3D variable + * navigating collection side of 1:n relationship + */ + public void collection019() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(8L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee"); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("employees.contains(employee) & e =3D=3D employee"= ); + setDepartmentCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable !=3D param=20 + * navigating collection side of 1:n relationship + */ + public void collection020() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(8L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee"); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("employees.contains(employee) & employee !=3D e"); + setDepartmentCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 3; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 4; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * param !=3D variable + * navigating collection side of 1:n relationship + */ + public void collection021() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(8L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareImports("import org.apache.jdo.pc.xempdept.Employee"); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("employees.contains(employee) & e !=3D employee"); + setDepartmentCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 3; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 4; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 11; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D param=20 + * navigating collection side of 1:n self referencing relationship + */ + public void collection022() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(2L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("team.contains(employee) & employee =3D=3D e"); + setEmployeeCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable !=3D param=20 + * navigating collection side of 1:n self referencing relationship + */ + public void collection023() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + + Employee e =3D getEmployeeById(5L); + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareParameters("Employee e"); + query.declareVariables("Employee employee"); + query.setFilter("team.contains(employee) & employee !=3D e"); + setEmployeeCandidates(query); + Object result =3D query.execute(e); + List oids =3D getResultOids(result); + Collections.sort(oids); + + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D this + */ + public void collection024() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e"); + query.setFilter("team.contains(e) & e =3D=3D this"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D this + * plus reference navigation to get to the collection + */ + public void collection025() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e"); + query.setFilter("manager.team.contains(e) & e =3D=3D this"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 9; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * this =3D=3D variable + * plus reference navigation to get to the collection + */ + public void collection026() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e"); + query.setFilter("manager.team.contains(e) & this =3D=3D e"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 9; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D variable + * one contains clause uses navigation to get to the collection + */ + public void collection027() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + // This query returns employees having an employee in its team wok= ing in the same department + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e1; or= g=2Eapache.jdo.pc.xempdept.Employee e2"); + query.setFilter("department.employees.contains(e1) & (team.contain= s(e2) & e1 =3D=3D e2)"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: object comparison + * variable =3D=3D variable + * both contains clauses use navigation to get to the collection + */ + public void collection028() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + // this query returns employees having a colleague (member of the = same team)=20 + // working in the same department. + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e1; or= g=2Eapache.jdo.pc.xempdept.Employee e2"); + query.setFilter("department.employees.contains(e1) & (manager.team= .contains(e2) & e1 =3D=3D e2)"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 9; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: nested collection navigation + * checks bug report 4423803=20 + */ + public void collection029() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e; org= .apache.jdo.pc.xempdept.Project p"); + query.setFilter("employees.contains(e) & (e.projects.contains(p) &= p.projid =3D=3D 1)"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: nested collection navigation + simple condition for each = variable + * checks bug report 4423803=20 + */ + public void collection030() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e; org= .apache.jdo.pc.xempdept.Project p"); + query.setFilter("employees.contains(e) & (e.empid =3D=3D 1 & (e.pr= ojects.contains(p) & p.projid =3D=3D 1))"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: nested collection navigation + simple condition for each = variable + * (changed order of conditions) + * checks bug report 4423803=20 + */ + public void collection031() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e; org= .apache.jdo.pc.xempdept.Project p"); + query.setFilter("employees.contains(e) & ((e.projects.contains(p) = & p.projid =3D=3D 1) & e.empid =3D=3D 1)"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: nested collection navigation=20 + * checks bug report 4423803=20 + */ + public void collection032() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("Employee deptEmp; Project p; Employee team= Member"); + query.setFilter("employees.contains(deptEmp) & " +=20 + "(deptEmp.projects.contains(p) & (p.projid =3D=3D = 1 & " +=20 + "(deptEmp.team.contains(teamMember) & teamMember.e= mpid =3D=3D 2)))"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: nested collection navigation=20 + * checks bug report 4423803=20 + */ + public void collection033() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Department.class); + query.declareVariables("Employee deptEmp; Project p; Employee proj= Emp"); + query.setFilter("employees.contains(deptEmp) & (deptEmp.projects.c= ontains(p) & " +=20 + "(p.employees.contains(projEmp) & projEmp.empid = =3D=3D 1))"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Department.Oid key =3D new Department.Oid(); + key.deptid =3D 1; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 2; + expected.add(key); + key =3D new Department.Oid(); + key.deptid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: collection comparison + * collection =3D=3D null + */ + public void collection034() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("team =3D=3D null"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 13; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 100; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: collection comparison + * null =3D=3D collection + */ + public void collection035() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.setFilter("null =3D=3D employees"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: collection comparison + * collection !=3D null + */ + public void collection036() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("team !=3D null"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 9; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: collection comparison + * null !=3D collection + */ + public void collection037() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.setFilter("null !=3D employees"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 11; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: isEmpty 1:n relationship + */ + public void collection038() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("team.isEmpty()"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 5; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 7; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 9; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 13; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 100; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: !isEmpty 1:n relationship + */ + public void collection039() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("!team.isEmpty()"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 6; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: isEmpty n:m relationship + */ + public void collection040() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.setFilter("employees.isEmpty()"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + =20 + /** + * Testcase: !isEmpty n:m relationship + */ + public void collection041() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.setFilter("!employees.isEmpty()"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 11; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection042() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("Employee e1; Employee e2"); + query.setFilter("(team.contains(e1) & e1.empid =3D=3D 9) & (hradvi= sees.contains(e2) & e2.empid =3D=3D 2)"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection043() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("Employee e1; Employee e2"); + query.setFilter("team.contains(e1) & (e1.empid =3D=3D 9 & (hradvis= ees.contains(e2) & e2.empid =3D=3D 2))"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection044() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("Employee e1; Employee e2"); + query.setFilter("(team.contains(e1) & e1.empid =3D=3D 9) && (hradv= isees.contains(e2) & e2.empid =3D=3D 2)"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection045() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareVariables("Employee e1; Employee e2"); + query.setFilter("team.contains(e1) & (e1.empid =3D=3D 9 && (hradvi= sees.contains(e2) & e2.empid =3D=3D 2))"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 8; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection046() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e1; or= g=2Eapache.jdo.pc.xempdept.Employee e2"); + query.setFilter("(employees.contains(e1) & e1.empid =3D=3D 1) & (r= eviewers.contains(e2) & e2.empid =3D=3D 4)"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: navigating different relationships between the same class= es (1:n) + */ + public void collection047() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Project.class); + query.declareVariables("org.apache.jdo.pc.xempdept.Employee e1; or= g=2Eapache.jdo.pc.xempdept.Employee e2"); + query.setFilter("employees.contains(e1) & e1.empid =3D=3D 1 & revi= ewers.contains(e2) & e2.empid =3D=3D 4"); + setProjectCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Project.Oid key =3D new Project.Oid(); + key.projid =3D 1; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 2; + expected.add(key); + key =3D new Project.Oid(); + key.projid =3D 3; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + =20 + +} Added: incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Inherit= anceTest.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/test/java/org/a= pache/jdo/test/query/InheritanceTest.java?view=3Dauto&rev=3D158176 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Inheritanc= eTest.java (added) +++ incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/Inheritanc= eTest.java Fri Mar 18 17:02:29 2005 @@ -0,0 +1,352 @@ +/* + * Copyright 2005 The Apache Software Foundation. + *=20 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at=20 + *=20 + * http://www.apache.org/licenses/LICENSE-2.0 + *=20 + * Unless required by applicable law or agreed to in writing, software=20 + * distributed under the License is distributed on an "AS IS" BASIS,=20 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied= .=20 + * See the License for the specific language governing permissions and=20 + * limitations under the License. + */ + +/* + * InheritanceTest.java + * + * Created on March 11, 2003 + */ + +package org.apache.jdo.test.query; + +import java.util.*; +import java.io.*; +import java.io.PrintStream; + +import javax.jdo.*; + +import org.apache.jdo.pc.xempdept.Employee; +import org.apache.jdo.pc.xempdept.FullTimeEmployee; +import org.apache.jdo.pc.xempdept.Person; + +/**=20 + * + * @author Michael Bouschen + */ +public class InheritanceTest + extends PositiveTest +{ + public InheritanceTest(PersistenceManagerFactory pmf, PrintStream log) + { + super(pmf, log); + } + + protected boolean isTestMethodName(String methodName) + { + return methodName.startsWith("inheritance"); + } + + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + // Test methods + // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + + /** + * Testcase: candidate class =3D Person, candidates =3D employees + */ + public void inheritance001() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Person.class); + query.setFilter("firstname.startsWith(\"firstEng\")"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: candidate class =3D Employee, candidates =3D employees + */ + public void inheritance002() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("firstname.startsWith(\"firstEng\")"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: candidate class =3D FullTimeEmployee, candidates =3D empl= oyees + */ + public void inheritance003() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(FullTimeEmployee.class); + query.setFilter("firstname.startsWith(\"firstEng\")"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + // Do not include employees with empid 3 and 12, because they are + // PartTimeEmployees=20 + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 1; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 11; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + =20 + /** + * Testcase: candidate class =3D Employee, candidates =3D partTimeEmpl= oyees + */ + public void inheritance004() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("firstname.startsWith(\"firstEng\")"); + setPartTimeEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 12; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + =20 + /** + * Testcase: candidate class =3D Employee, candidates =3D department + */ + public void inheritance005() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.setFilter("firstname.startsWith(\"firstEng\")"); + setDepartmentCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + // expected is empty, because of a mismatch of candidate class + // (Employee) and candidates (Department) + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: cast expression=20 + * checks bug report 4711477 + */ + public void inheritance006() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.FullTimeEm= ployee"); + query.setFilter("((FullTimeEmployee)this).salary < 50000.0D"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: cast expression inside or expression=20 + * checks bug report 4833898 + */ + public void inheritance007() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.FullTimeEm= ployee"); + query.setFilter("((FullTimeEmployee)this).salary < 50000.0D | this= .empid =3D=3D 3"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + + /** + * Testcase: cast expression inside or expression=20 + * checks bug report 4833898 + */ + public void inheritance008() + throws Exception + { + Transaction tx =3D pm.currentTransaction(); + tx.begin(); + =20 + // create query + =20 + Query query =3D pm.newQuery(); + query.setClass(Employee.class); + query.declareImports("import org.apache.jdo.pc.xempdept.FullTimeEm= ployee"); + query.setFilter("this.empid =3D=3D 3 || ((FullTimeEmployee)this).s= alary < 50000.0D"); + setEmployeeCandidates(query); + Object result =3D query.execute(); + List oids =3D getResultOids(result); + Collections.sort(oids); + =20 + // check query result + =20 + Collection expected =3D new ArrayList(); + Employee.Oid key =3D new Employee.Oid(); + key.empid =3D 2; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 3; + expected.add(key); + key =3D new Employee.Oid(); + key.empid =3D 4; + expected.add(key); + checkQueryResult(oids, expected); + =20 + tx.commit(); + } + +} +