KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > speedo > runtime > query > TestQueries


1 /**
2  * Speedo: an implementation of JDO compliant personality on top of JORM generic
3  * I/O sub-system.
4  * Copyright (C) 2001-2004 France Telecom R&D
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  *
21  *
22  * Contact: speedo@objectweb.org
23  *
24  * Authors: S. Chassande-Barrioz
25  *
26  */

27
28 package org.objectweb.speedo.runtime.query;
29
30 import java.util.ArrayList JavaDoc;
31 import java.util.Arrays JavaDoc;
32 import java.util.Collection JavaDoc;
33 import java.util.Collections JavaDoc;
34 import java.util.HashMap JavaDoc;
35 import java.util.HashSet JavaDoc;
36 import java.util.Iterator JavaDoc;
37 import java.util.List JavaDoc;
38 import java.util.Map JavaDoc;
39 import java.util.NoSuchElementException JavaDoc;
40
41 import javax.jdo.Extent;
42 import javax.jdo.JDOException;
43 import javax.jdo.PersistenceManager;
44 import javax.jdo.Query;
45
46 import junit.framework.Assert;
47
48 import org.objectweb.speedo.SpeedoTestHelper;
49 import org.objectweb.speedo.api.ExceptionHelper;
50 import org.objectweb.speedo.pobjects.basic.BasicA;
51 import org.objectweb.speedo.pobjects.basic.Product;
52 import org.objectweb.speedo.pobjects.collection.AMMB;
53 import org.objectweb.speedo.pobjects.collection.BMMB;
54 import org.objectweb.speedo.pobjects.collection.Group;
55 import org.objectweb.speedo.pobjects.collection.Ref2Ref2AMMB;
56 import org.objectweb.speedo.pobjects.collection.User;
57 import org.objectweb.speedo.pobjects.inheritance.query.GroupUser;
58 import org.objectweb.speedo.pobjects.inheritance.query.MailingList;
59 import org.objectweb.speedo.pobjects.inheritance.query.NewsGroup;
60 import org.objectweb.speedo.pobjects.inheritance.userCache.Litem;
61 import org.objectweb.speedo.pobjects.ref.Department;
62 import org.objectweb.speedo.pobjects.ref.Employee;
63 import org.objectweb.speedo.pobjects.ref.GeoRef;
64 import org.objectweb.speedo.pobjects.userid.AutoIncFieldId;
65 import org.objectweb.speedo.pobjects.userid.Ref2AutoIncFieldId;
66 import org.objectweb.util.monolog.api.BasicLevel;
67
68 /**
69  * This test tests the access to 2 fields from the Employee class (name
70  * and salary), Salary is a Float (with 2 parameters, a String and a Float
71  * object).
72  */

73 public class TestQueries extends SpeedoTestHelper {
74
75     public TestQueries(String JavaDoc name) {
76         super(name);
77     }
78
79     protected String JavaDoc getLoggerName() {
80         return LOG_NAME + ".rt.query.TestQueries";
81     }
82
83     public void test0Parameter() {
84         logger.log(BasicLevel.DEBUG, "test0Parameter");
85         PersistenceManager pm = pmf.getPersistenceManager();
86         try {
87             Class JavaDoc empClass = Employee.class;
88             Query query = pm.newQuery(empClass);
89             Collection JavaDoc col = (Collection JavaDoc) query.execute();
90             Iterator JavaDoc it = col.iterator();
91             while(it.hasNext()) {
92                 Employee e = (Employee) it.next();
93                 Assert.assertNotNull("null element in the query result", e);
94                 Assert.assertNotNull("null name of a element in the query result", e.getName());
95             }
96             query.close(col);
97         } catch (JDOException e) {
98             Exception JavaDoc ie = ExceptionHelper.getNested(e);
99             logger.log(BasicLevel.ERROR, "", ie);
100             fail(ie.getMessage());
101         } finally {
102             pm.close();
103         }
104     }
105
106     public void test10rder() {
107         logger.log(BasicLevel.DEBUG, "test10rder");
108         PersistenceManager pm = pmf.getPersistenceManager();
109         try {
110             Class JavaDoc empClass = Employee.class;
111             Query query = pm.newQuery(empClass);
112             query.setOrdering("name ascending");
113             Collection JavaDoc col = (Collection JavaDoc) query.execute();
114             Iterator JavaDoc it = col.iterator();
115             int i=0;
116             while(it.hasNext()) {
117                 assertTrue("More result than expected ", i<POBuilder.nameOrder.length);
118                 Employee e = (Employee) it.next();
119                 Assert.assertNotNull("null element in the query result", e);
120                 try {
121                     Assert.assertEquals("Bad order (" + i + ")",
122                         POBuilder.names[POBuilder.nameOrder[i]],e.getName());
123                 } catch (Throwable JavaDoc e1) {
124                     e1.printStackTrace();
125                 }
126                 i++;
127             }
128             assertEquals("Not enough result", POBuilder.nameOrder.length, i);
129             query.close(col);
130         } catch (JDOException e) {
131             Exception JavaDoc ie = ExceptionHelper.getNested(e);
132             logger.log(BasicLevel.ERROR, "", ie);
133             fail(ie.getMessage());
134         } finally {
135             pm.close();
136         }
137     }
138
139     public void test20rder() {
140         logger.log(BasicLevel.DEBUG, "test20rder");
141         PersistenceManager pm = pmf.getPersistenceManager();
142         Class JavaDoc empClass = Employee.class;
143         Query query = pm.newQuery(empClass);
144         Collection JavaDoc col = null;
145         try {
146             query.setOrdering("salary descending, name ascending");
147             col = (Collection JavaDoc) query.execute();
148             Iterator JavaDoc it = col.iterator();
149             int i=0;
150             while(it.hasNext()) {
151                 assertTrue("More result than expected ", i<POBuilder.salariesOrder.length);
152                 Assert.assertTrue("No enough values in the result", it.hasNext());
153                 Employee e = (Employee) it.next();
154                 Assert.assertNotNull("null element in the query result", e);
155                 try {
156                     Assert.assertEquals("Bad order (" + i + ")",
157                         POBuilder.names[POBuilder.salariesOrder[i]],e.getName());
158                 } catch (Throwable JavaDoc e1) {
159                     e1.printStackTrace();
160                 }
161                 i++;
162             }
163             assertEquals("Not enough result", POBuilder.salariesOrder.length, i);
164         } catch (JDOException e) {
165             Exception JavaDoc ie = ExceptionHelper.getNested(e);
166             logger.log(BasicLevel.ERROR, "", ie);
167             fail(ie.getMessage());
168         } finally {
169             try {
170                 query.closeAll();
171             } finally {
172                 pm.close();
173             }
174         }
175     }
176
177     public void test1Parameter() {
178         logger.log(BasicLevel.DEBUG, "test1Parameter");
179         PersistenceManager pm = pmf.getPersistenceManager();
180         try {
181             Class JavaDoc empClass = Employee.class;
182             Query query = pm.newQuery(empClass);
183             query.declareParameters("String aName");
184             query.setFilter("(name == aName)");
185             Collection JavaDoc col = (Collection JavaDoc) query.execute(POBuilder.names[1]);
186             Iterator JavaDoc iter = col.iterator();
187             Assert.assertTrue("The query result is empty", iter.hasNext());
188             Employee e = (Employee) iter.next();
189             Assert.assertNotNull("Null collection element", e);
190             Assert.assertEquals("Bad employee name", POBuilder.names[1], e.getName());
191             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
192             Assert.assertEquals("Bad query result size", 1, col.size());
193             query.close(col);
194         } catch (JDOException e) {
195             Exception JavaDoc ie = ExceptionHelper.getNested(e);
196             logger.log(BasicLevel.ERROR, "", ie);
197             fail(ie.getMessage());
198         } finally {
199             pm.close();
200         }
201     }
202
203     public void test1ParameterBis() {
204         logger.log(BasicLevel.DEBUG, "test1ParameterBis");
205         PersistenceManager pm = pmf.getPersistenceManager();
206         try {
207             Class JavaDoc empClass = Employee.class;
208             Query query = pm.newQuery(empClass);
209             query.declareParameters("float sal");
210             query.setFilter("(salary > sal)");
211             Collection JavaDoc col = (Collection JavaDoc) query.execute(new Float JavaDoc(POBuilder.salaries[2]));
212             Iterator JavaDoc iter = col.iterator();
213             HashSet JavaDoc s = new HashSet JavaDoc();
214             while(iter.hasNext()) {
215                 Employee e = (Employee) iter.next();
216                 s.add(e.getName());
217             }
218             query.close(col);
219             assertSameCollection("Bad query result",
220                 Arrays.asList(new String JavaDoc[]{POBuilder.names[0],POBuilder.names[1],POBuilder.names[3]}),
221                 s);
222         } catch (JDOException e) {
223             Exception JavaDoc ie = ExceptionHelper.getNested(e);
224             logger.log(BasicLevel.ERROR, "", ie);
225             fail(ie.getMessage());
226         } finally {
227             pm.close();
228         }
229     }
230
231     public void testFieldParameter() {
232         logger.log(BasicLevel.DEBUG, "testFieldParameter");
233         PersistenceManager pm = pmf.getPersistenceManager();
234         try {
235             Class JavaDoc empClass = Employee.class;
236             Query query = pm.newQuery(empClass);
237
238             String JavaDoc filterFieldParameter = "((salary == mysalary) && (name == myname))";
239             String JavaDoc param = "String myname, Float mysalary";
240
241             query.declareParameters(param);
242             query.setFilter(filterFieldParameter);
243
244             Collection JavaDoc col = (Collection JavaDoc)
245                     query.execute(POBuilder.names[1], new Float JavaDoc(3000.0));
246             Iterator JavaDoc iter = col.iterator();
247             Assert.assertTrue("The query result is empty", iter.hasNext());
248             Employee e = (Employee) iter.next();
249             Assert.assertNotNull("Null collection element", e);
250             Assert.assertEquals("Bad employee name", POBuilder.names[1], e.getName());
251             Assert.assertEquals("Bad employee salary", new Float JavaDoc(3000.0), new Float JavaDoc(e.getSalary()));
252             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
253             Assert.assertEquals("Bad query result size", 1, col.size());
254             query.close(col);
255         } catch (JDOException e) {
256             Exception JavaDoc ie = ExceptionHelper.getNested(e);
257             logger.log(BasicLevel.ERROR, "", ie);
258             fail(ie.getMessage());
259         } finally {
260             pm.close();
261         }
262     }
263
264     public void testMatches() {
265         logger.log(BasicLevel.DEBUG, "testMatches");
266         PersistenceManager pm = pmf.getPersistenceManager();
267         try {
268             Query query = pm.newQuery(Employee.class);
269             String JavaDoc filterFieldParameter = "((name.toUpperCase().matches(\"%IE\")) && (name.length()>2))";
270             query.setFilter(filterFieldParameter);
271             ArrayList JavaDoc col = new ArrayList JavaDoc((Collection JavaDoc) query.execute());
272             query.closeAll();
273             for(int i=0; i<col.size(); i++) {
274                 col.add(i, ((Employee) col.remove(i)).getName());
275             }
276             assertSameCollection("Bad result of the testMatches method",
277                 Arrays.asList(new String JavaDoc[]{ POBuilder.names[2], POBuilder.names[3]}),
278                 col);
279         } catch (JDOException e) {
280             Exception JavaDoc ie = ExceptionHelper.getNested(e);
281             logger.log(BasicLevel.ERROR, "", ie);
282             fail(ie.getMessage());
283         } finally {
284             pm.close();
285         }
286     }
287
288     public void testStartsWith() {
289         logger.log(BasicLevel.DEBUG, "testStartsWith");
290         PersistenceManager pm = pmf.getPersistenceManager();
291         try {
292             Query query = pm.newQuery(Employee.class);
293             String JavaDoc filterFieldParameter = "(name.toUpperCase().startsWith(\"JOH\"))";
294             query.setFilter(filterFieldParameter);
295             ArrayList JavaDoc col = new ArrayList JavaDoc((Collection JavaDoc) query.execute());
296             query.closeAll();
297             for(int i=0; i<col.size(); i++) {
298                 col.add(i, ((Employee) col.remove(i)).getName());
299             }
300             assertSameCollection("Bad result of the testStartsWith method",
301                 Arrays.asList(new String JavaDoc[]{ POBuilder.names[0]}),
302                 col);
303         } catch (JDOException e) {
304             Exception JavaDoc ie = ExceptionHelper.getNested(e);
305             logger.log(BasicLevel.ERROR, "", ie);
306             fail(ie.getMessage());
307         } finally {
308             pm.close();
309         }
310     }
311     
312     public void _testSubString() {
313 //TODO: support Substring operator in parsing
314
logger.log(BasicLevel.DEBUG, "testMatches");
315         PersistenceManager pm = pmf.getPersistenceManager();
316         try {
317             Query query = pm.newQuery(Employee.class);
318             String JavaDoc filterFieldParameter = "(name.substring(0 2).matches(\"%ie\"))";
319             query.setFilter(filterFieldParameter);
320             ArrayList JavaDoc col = new ArrayList JavaDoc((Collection JavaDoc) query.execute());
321             query.closeAll();
322             for(int i=0; i<col.size(); i++) {
323                 col.add(i, ((Employee) col.remove(i)).getName());
324             }
325             assertSameCollection("Bad result of the testMatches method",
326                 Arrays.asList(new String JavaDoc[]{ POBuilder.names[2], POBuilder.names[3]}),
327                 col);
328         } catch (JDOException e) {
329             Exception JavaDoc ie = ExceptionHelper.getNested(e);
330             logger.log(BasicLevel.ERROR, "", ie);
331             fail(ie.getMessage());
332         } finally {
333             pm.close();
334         }
335     }
336
337     public void testUpper() {
338         logger.log(BasicLevel.DEBUG, "testMatches");
339         PersistenceManager pm = pmf.getPersistenceManager();
340         try {
341             Query query = pm.newQuery(Employee.class);
342             String JavaDoc filterFieldParameter = "(name.toUpperCase().matches(\"%IE\"))";
343             query.setFilter(filterFieldParameter);
344             ArrayList JavaDoc col = new ArrayList JavaDoc((Collection JavaDoc) query.execute());
345             query.closeAll();
346             for(int i=0; i<col.size(); i++) {
347                 col.add(i, ((Employee) col.remove(i)).getName());
348             }
349             assertSameCollection("Bad result of the testMatches method",
350                 Arrays.asList(new String JavaDoc[]{ POBuilder.names[2], POBuilder.names[3]}),
351                 col);
352         } catch (JDOException e) {
353             Exception JavaDoc ie = ExceptionHelper.getNested(e);
354             logger.log(BasicLevel.ERROR, "", ie);
355             fail(ie.getMessage());
356         } finally {
357             pm.close();
358         }
359     }
360
361     public void test2Parameters() {
362         logger.log(BasicLevel.DEBUG, "test2Parameters");
363         PersistenceManager pm = pmf.getPersistenceManager();
364         try {
365             Class JavaDoc empClass = Employee.class;
366             Query query = pm.newQuery(empClass);
367             query.declareParameters("String aName, String anotherName");
368             query.setFilter("((name == aName) || (name == anotherName))");
369             Collection JavaDoc col = (Collection JavaDoc)
370                     query.execute(POBuilder.names[1], POBuilder.names[2]);
371             Iterator JavaDoc iter = col.iterator();
372             Assert.assertTrue("The query result is empty", iter.hasNext());
373             Employee e1 = (Employee) iter.next();
374             Assert.assertNotNull("Null collection element 1", e1);
375             Assert.assertTrue("Only one element in the query result", iter.hasNext());
376             Employee e2 = (Employee) iter.next();
377             Assert.assertNotNull("Null collection element 2", e2);
378             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
379             Assert.assertEquals("Bad query result size", 2, col.size());
380             query.close(col);
381
382             if (POBuilder.names[1].equals(e1.getName())) {
383                 Assert.assertEquals("Bad employee name", POBuilder.names[2], e2.getName());
384             } else if (POBuilder.names[1].equals(e2.getName())) {
385                 Assert.assertEquals("Bad employee name", POBuilder.names[2], e1.getName());
386             } else {
387                 fail("Bad employee name");
388             }
389         } catch (JDOException e) {
390             Exception JavaDoc ie = ExceptionHelper.getNested(e);
391             logger.log(BasicLevel.ERROR, "", ie);
392             fail(ie.getMessage());
393         } finally {
394             pm.close();
395         }
396     }
397
398     public void test3Parameters() {
399         logger.log(BasicLevel.DEBUG, "test3Parameters");
400         PersistenceManager pm = pmf.getPersistenceManager();
401         try {
402             Class JavaDoc empClass = Employee.class;
403             Query query = pm.newQuery(empClass);
404             String JavaDoc filter = "(name == aName) | (name == anotherName) | (name == thirdName)";
405             String JavaDoc param = "String aName, String anotherName, String thirdName";
406             query.declareParameters(param);
407             query.setFilter(filter);
408             Collection JavaDoc col = (Collection JavaDoc) query.execute(POBuilder.names[1],
409                                                         POBuilder.names[2],
410                                                         POBuilder.names[3]);
411             Iterator JavaDoc iter = col.iterator();
412             Collection JavaDoc expectedNames = new ArrayList JavaDoc(3);
413             Collection JavaDoc foundNames = new ArrayList JavaDoc(3);
414             expectedNames.add(POBuilder.names[1]);
415             expectedNames.add(POBuilder.names[2]);
416             expectedNames.add(POBuilder.names[3]);
417             Assert.assertTrue("The query result is empty", iter.hasNext());
418             Employee e = (Employee) iter.next();
419             Assert.assertNotNull("Null collection element 1", e);
420             foundNames.add(e.getName());
421             Assert.assertTrue("Only one element in the query result", iter.hasNext());
422             e = (Employee) iter.next();
423             Assert.assertNotNull("Null collection element 2", e);
424             foundNames.add(e.getName());
425             e = (Employee) iter.next();
426             Assert.assertNotNull("Null collection element 3", e);
427             foundNames.add(e.getName());
428             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
429             Assert.assertEquals("Bad query result size", expectedNames.size(), col.size());
430             query.close(col);
431
432             Assert.assertTrue("Bad Employee names, expected:"
433                     + expectedNames + " / found: " + foundNames,
434                     expectedNames.containsAll(foundNames)
435                     && foundNames.containsAll(expectedNames));
436         } catch (JDOException e) {
437             Exception JavaDoc ie = ExceptionHelper.getNested(e);
438             logger.log(BasicLevel.ERROR, "", ie);
439             fail(ie.getMessage());
440         } finally {
441             pm.close();
442         }
443     }
444
445     public void testMapParameters() {
446         logger.log(BasicLevel.DEBUG, "testMapParameters");
447         PersistenceManager pm = pmf.getPersistenceManager();
448         try {
449             Class JavaDoc empClass = Employee.class;
450             Query query = pm.newQuery(empClass);
451
452             String JavaDoc filter = "((name == aName) || (name == anotherName))";
453             String JavaDoc param = "String aName, String anotherName";
454
455             query.declareParameters(param);
456             query.setFilter(filter);
457
458             Map JavaDoc map = new HashMap JavaDoc();
459             map.put("aName", POBuilder.names[1]);
460             map.put("anotherName", POBuilder.names[2]);
461
462             Collection JavaDoc col = (Collection JavaDoc) query.executeWithMap(map);
463             Iterator JavaDoc iter = col.iterator();
464             Collection JavaDoc foundNames = new ArrayList JavaDoc(2);
465             Collection JavaDoc expectedNames = map.values();
466
467             Assert.assertTrue("The query result is empty", iter.hasNext());
468             Employee e = (Employee) iter.next();
469             Assert.assertNotNull("Null collection element 1", e);
470             foundNames.add(e.getName());
471             Assert.assertTrue("Only one element in the query result", iter.hasNext());
472             e = (Employee) iter.next();
473             Assert.assertNotNull("Null collection element 2", e);
474             foundNames.add(e.getName());
475             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
476             Assert.assertEquals("Bad query result size", expectedNames.size(), col.size());
477             query.close(col);
478
479             Assert.assertTrue("Bad Employee names, expected:"
480                     + expectedNames + " / found: " + foundNames,
481                     expectedNames.containsAll(foundNames)
482                     && foundNames.containsAll(expectedNames));
483         } catch (JDOException e) {
484             Exception JavaDoc ie = ExceptionHelper.getNested(e);
485             logger.log(BasicLevel.ERROR, "", ie);
486             fail(ie.getMessage());
487         } finally {
488             pm.close();
489         }
490     }
491
492     public void testArrayParameters() {
493         logger.log(BasicLevel.DEBUG, "testArrayParameters");
494         PersistenceManager pm = pmf.getPersistenceManager();
495         try {
496             Class JavaDoc empClass = Employee.class;
497             Query query = pm.newQuery(empClass);
498
499             String JavaDoc filter = "((name == aName) | (name == anotherName))";
500             String JavaDoc param = "String aName, String anotherName";
501
502             query.declareParameters(param);
503             query.setFilter(filter);
504
505             Collection JavaDoc expectedNames = new ArrayList JavaDoc(2);
506             expectedNames.add(POBuilder.names[1]);
507             expectedNames.add(POBuilder.names[2]);
508             Collection JavaDoc col = (Collection JavaDoc) query.executeWithArray(expectedNames.toArray());
509             Iterator JavaDoc iter = col.iterator();
510
511             Collection JavaDoc foundNames = new ArrayList JavaDoc(2);
512             Assert.assertTrue("The query result is empty", iter.hasNext());
513             Employee e = (Employee) iter.next();
514             Assert.assertNotNull("Null collection element 1", e);
515             foundNames.add(e.getName());
516             Assert.assertTrue("Only one element in the query result", iter.hasNext());
517             e = (Employee) iter.next();
518             Assert.assertNotNull("Null collection element 2", e);
519             foundNames.add(e.getName());
520             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
521             Assert.assertEquals("Bad query result size", expectedNames.size(), col.size());
522             query.close(col);
523
524             Assert.assertTrue("Bad Employee names, expected:"
525                     + expectedNames + " / found: " + foundNames,
526                     expectedNames.containsAll(foundNames)
527                     && foundNames.containsAll(expectedNames));
528         } catch (JDOException e) {
529             Exception JavaDoc ie = ExceptionHelper.getNested(e);
530             logger.log(BasicLevel.ERROR, "", ie);
531             fail(ie.getMessage());
532         } finally {
533             pm.close();
534         }
535     }
536
537     public void testFieldRef() {
538         logger.log(BasicLevel.DEBUG, "testFieldRef");
539         PersistenceManager pm = pmf.getPersistenceManager();
540         try {
541             Class JavaDoc empClass = Employee.class;
542             Query query = pm.newQuery(empClass);
543             String JavaDoc filterFieldRef = "((dept.name == depName) && (name == \""
544                 + POBuilder.names[0] + "\"))";
545             String JavaDoc param = "String depName";
546
547             query.declareParameters(param);
548             query.setFilter(filterFieldRef);
549
550             Collection JavaDoc col = (Collection JavaDoc) query.execute("RD");
551             Iterator JavaDoc iter = col.iterator();
552             Assert.assertTrue("The query result is empty", iter.hasNext());
553             Employee e = (Employee) iter.next();
554             Assert.assertNotNull("Null collection element", e);
555             Assert.assertEquals("Bad employee name", POBuilder.names[0], e.getName());
556             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
557             Assert.assertEquals("Bad query result size", 1, col.size());
558
559             iter = col.iterator();
560             Assert.assertTrue("The query result is empty", iter.hasNext());
561             e = (Employee) iter.next();
562             Assert.assertNotNull("Null collection element", e);
563             Assert.assertEquals("Bad employee name", POBuilder.names[0], e.getName());
564             Assert.assertTrue("More than one element in the query result", !iter.hasNext());
565
566             query.close(col);
567         } catch (Exception JavaDoc e) {
568             Exception JavaDoc ie = ExceptionHelper.getNested(e);
569             logger.log(BasicLevel.ERROR, "", ie);
570             fail(ie.getMessage());
571         } finally {
572             pm.close();
573         }
574     }
575
576     public void testFieldRefNull() {
577         logger.log(BasicLevel.DEBUG, "testFieldRef");
578         PersistenceManager pm = pmf.getPersistenceManager();
579         final int nbEmp = 5;
580         Object JavaDoc[] oid = new Object JavaDoc[nbEmp];
581         for(int i=0; i<nbEmp; i++) {
582             Employee e = new Employee("testFieldRefNull" + i, null);
583             pm.makePersistent(e);
584             oid[i] = pm.getObjectId(e);
585         }
586         pm.close();
587         try {
588             pm = pmf.getPersistenceManager();
589             Query query = pm.newQuery(Employee.class);
590             query.declareParameters("Department d");
591             query.setFilter("(dept == d)");
592             Collection JavaDoc col = (Collection JavaDoc) query.execute(null);
593             int size = col.size();
594             query.close(col);
595             assertEquals("Bad number of employee without department", nbEmp, size);
596         } catch (Exception JavaDoc e) {
597             Exception JavaDoc ie = ExceptionHelper.getNested(e);
598             logger.log(BasicLevel.ERROR, "", ie);
599             fail(ie.getMessage());
600         } finally {
601             pm.currentTransaction().begin();
602             for(int i=0; i<nbEmp; i++) {
603                 Employee e = (Employee) pm.getObjectById(oid[i], false);
604                 pm.deletePersistent(e);
605             }
606             pm.currentTransaction().commit();
607             pm.close();
608         }
609     }
610
611     public void testThis() {
612         logger.log(BasicLevel.DEBUG, "testThis");
613         PersistenceManager pm = pmf.getPersistenceManager();
614         try {
615             Class JavaDoc empClass = Employee.class;
616             Query query = pm.newQuery(empClass);
617
618             String JavaDoc filter = "(this.name == aName)";
619             String JavaDoc param = "String aName";
620
621             query.declareParameters(param);
622             query.setFilter(filter);
623
624             Collection JavaDoc col = (Collection JavaDoc) query.execute(POBuilder.names[1]);
625             Iterator JavaDoc iter = col.iterator();
626             Assert.assertTrue("The query result is empty", iter.hasNext());
627             Employee e = (Employee) iter.next();
628             Assert.assertNotNull("Null collection element", e);
629             Assert.assertEquals("Bad employee name", POBuilder.names[1], e.getName());