KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > db4ounit > common > querying > IndexedQueriesTestCase


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.db4ounit.common.querying;
22
23 import com.db4o.*;
24 import com.db4o.config.*;
25 import com.db4o.query.*;
26
27 import db4ounit.*;
28 import db4ounit.extensions.*;
29
30 public class IndexedQueriesTestCase extends AbstractDb4oTestCase{
31     
32     public static void main(String JavaDoc[] arguments) {
33         new IndexedQueriesTestCase().runSolo();
34     }
35     
36     public static class IndexedQueriesItem{
37         
38         public String JavaDoc _name;
39         
40         public int _int;
41         
42         public Integer JavaDoc _integer;
43         
44         public IndexedQueriesItem() {
45         }
46
47         public IndexedQueriesItem(String JavaDoc name) {
48             _name = name;
49         }
50
51         public IndexedQueriesItem(int int_) {
52             _int = int_;
53             _integer = new Integer JavaDoc(int_);
54         }
55
56     }
57
58     protected void configure(Configuration config) {
59         indexField(config,"_name");
60         indexField(config,"_int");
61         indexField(config,"_integer");
62     }
63     
64     private void indexField(Configuration config,String JavaDoc fieldName){
65         indexField(config,IndexedQueriesItem.class, fieldName);
66     }
67
68     protected void store() {
69         String JavaDoc[] strings = new String JavaDoc[] {"a", "c", "b", "f", "e"};
70         for (int i = 0; i < strings.length; i++) {
71             db().set(new IndexedQueriesItem(strings[i]));
72         }
73         
74         int[] ints = new int[] {1, 5, 7, 3, 2, 3};
75         for (int i = 0; i < ints.length; i++) {
76             db().set(new IndexedQueriesItem(ints[i]));
77         }
78     }
79     
80     public void testIntQuery() {
81         assertInts(5);
82     }
83     
84     /**
85      * @sharpen.ignore testing Integer queries only makes sense for java
86      */

87     public void testIntegerQuery() {
88         assertIntegers();
89     }
90
91     public void testStringQuery() throws Exception JavaDoc {
92         
93         assertNullNameCount(6);
94         
95         db().set(new IndexedQueriesItem("d"));
96         assertQuery(1, "b");
97         
98         updateB();
99         
100         db().set(new IndexedQueriesItem("z"));
101         db().set(new IndexedQueriesItem("y"));
102         
103         reopen();
104         assertQuery(1, "b");
105
106         assertInts(8);
107     }
108     
109     private void assertIntegers(){
110         Query q = newQuery();
111         q.descend("_integer").constrain(new Integer JavaDoc(4)).greater().equal();
112         assertIntsFound(new int[] { 5, 7 }, q);
113
114         q = newQuery();
115         q.descend("_integer").constrain(new Integer JavaDoc(4)).smaller();
116         assertIntsFound(new int[] { 1, 2, 3, 3 }, q);
117         
118     }
119
120     private void assertInts(int expectedZeroSize) {
121         
122         Query q = newQuery();
123         q.descend("_int").constrain(new Integer JavaDoc(0));
124         int zeroSize = q.execute().size();
125         Assert.areEqual(expectedZeroSize, zeroSize);
126         
127         q = newQuery();
128         q.descend("_int").constrain(new Integer JavaDoc(4)).greater().equal();
129         assertIntsFound(new int[] { 5, 7 }, q);
130          
131         q = newQuery();
132         q.descend("_int").constrain(new Integer JavaDoc(4)).greater();
133         assertIntsFound(new int[] { 5, 7 }, q);
134
135         q = newQuery();
136         q.descend("_int").constrain(new Integer JavaDoc(3)).greater();
137         assertIntsFound(new int[] { 5, 7 }, q);
138
139         q = newQuery();
140         q.descend("_int").constrain(new Integer JavaDoc(3)).greater().equal();
141         assertIntsFound(new int[] { 3, 3, 5, 7 }, q);
142
143         q = newQuery();
144         q.descend("_int").constrain(new Integer JavaDoc(2)).greater().equal();
145         assertIntsFound(new int[] { 2, 3, 3, 5, 7 }, q);
146         
147         q = newQuery();
148         q.descend("_int").constrain(new Integer JavaDoc(2)).greater();
149         assertIntsFound(new int[] { 3, 3, 5, 7 }, q);
150
151         q = newQuery();
152         q.descend("_int").constrain(new Integer JavaDoc(1)).greater().equal();
153         assertIntsFound(new int[] { 1, 2, 3, 3, 5, 7 }, q);
154
155         q = newQuery();
156         q.descend("_int").constrain(new Integer JavaDoc(1)).greater();
157         assertIntsFound(new int[] { 2, 3, 3, 5, 7 }, q);
158
159         q = newQuery();
160         q.descend("_int").constrain(new Integer JavaDoc(4)).smaller();
161         assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q);
162
163         q = newQuery();
164         q.descend("_int").constrain(new Integer JavaDoc(4)).smaller().equal();
165         assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q);
166
167         q = newQuery();
168         q.descend("_int").constrain(new Integer JavaDoc(3)).smaller();
169         assertIntsFound(new int[] { 1, 2 }, expectedZeroSize, q);
170
171         q = newQuery();
172         q.descend("_int").constrain(new Integer JavaDoc(3)).smaller().equal();
173         assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q);
174
175         q = newQuery();
176         q.descend("_int").constrain(new Integer JavaDoc(2)).smaller().equal();
177         assertIntsFound(new int[] { 1, 2 }, expectedZeroSize, q);
178
179         q = newQuery();
180         q.descend("_int").constrain(new Integer JavaDoc(2)).smaller();
181         assertIntsFound(new int[] { 1 }, expectedZeroSize, q);
182
183         q = newQuery();
184         q.descend("_int").constrain(new Integer JavaDoc(1)).smaller().equal();
185         assertIntsFound(new int[] { 1 }, expectedZeroSize, q);
186
187         q = newQuery();
188         q.descend("_int").constrain(new Integer JavaDoc(1)).smaller();
189         assertIntsFound(new int[] {}, expectedZeroSize, q);
190
191     }
192
193     private void assertIntsFound(int[] ints, int zeroSize, Query q) {
194         ObjectSet res = q.execute();
195         Assert.areEqual((ints.length + zeroSize), res.size());
196         while (res.hasNext()) {
197             IndexedQueriesItem ci = (IndexedQueriesItem)res.next();
198             for (int i = 0; i < ints.length; i++) {
199                 if (ints[i] == ci._int) {
200                     ints[i] = 0;
201                     break;
202                 }
203             }
204         }
205         for (int i = 0; i < ints.length; i++) {
206             Assert.areEqual(0, ints[i]);
207         }
208     }
209
210     private void assertIntsFound(int[] ints, Query q) {
211         assertIntsFound(ints, 0, q);
212     }
213
214     private void assertQuery(int count, String JavaDoc string) {
215         ObjectSet res = queryForName(string);
216         Assert.areEqual(count, res.size());
217
218         IndexedQueriesItem item = (IndexedQueriesItem)res.next();
219         Assert.areEqual("b", item._name);
220     }
221     
222     private void assertNullNameCount(int count) {
223         ObjectSet res = queryForName(null);
224         Assert.areEqual(count, res.size());
225         while(res.hasNext()){
226             IndexedQueriesItem ci = (IndexedQueriesItem)res.next();
227             Assert.isNull(ci._name);
228         }
229     }
230
231     private void updateB() {
232         ObjectSet res = queryForName("b");
233         IndexedQueriesItem ci = (IndexedQueriesItem)res.next();
234         ci._name = "j";
235         db().set(ci);
236         res = queryForName("b");
237         Assert.areEqual(0, res.size());
238         res = queryForName("j");
239         Assert.areEqual(1, res.size());
240         ci._name = "b";
241         db().set(ci);
242         assertQuery(1, "b");
243     }
244
245     private ObjectSet queryForName(String JavaDoc n) {
246         Query q = newQuery();
247         q.descend("_name").constrain(n);
248         return q.execute();
249     }
250     
251     protected Query newQuery(){
252         Query q = super.newQuery();
253         q.constrain(IndexedQueriesItem.class);
254         return q;
255     }
256
257 }
258
Popular Tags