1 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 [] arguments) { 33 new IndexedQueriesTestCase().runSolo(); 34 } 35 36 public static class IndexedQueriesItem{ 37 38 public String _name; 39 40 public int _int; 41 42 public Integer _integer; 43 44 public IndexedQueriesItem() { 45 } 46 47 public IndexedQueriesItem(String name) { 48 _name = name; 49 } 50 51 public IndexedQueriesItem(int int_) { 52 _int = int_; 53 _integer = new Integer (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 fieldName){ 65 indexField(config,IndexedQueriesItem.class, fieldName); 66 } 67 68 protected void store() { 69 String [] strings = new String [] {"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 87 public void testIntegerQuery() { 88 assertIntegers(); 89 } 90 91 public void testStringQuery() throws Exception { 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 (4)).greater().equal(); 112 assertIntsFound(new int[] { 5, 7 }, q); 113 114 q = newQuery(); 115 q.descend("_integer").constrain(new Integer (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 (0)); 124 int zeroSize = q.execute().size(); 125 Assert.areEqual(expectedZeroSize, zeroSize); 126 127 q = newQuery(); 128 q.descend("_int").constrain(new Integer (4)).greater().equal(); 129 assertIntsFound(new int[] { 5, 7 }, q); 130 131 q = newQuery(); 132 q.descend("_int").constrain(new Integer (4)).greater(); 133 assertIntsFound(new int[] { 5, 7 }, q); 134 135 q = newQuery(); 136 q.descend("_int").constrain(new Integer (3)).greater(); 137 assertIntsFound(new int[] { 5, 7 }, q); 138 139 q = newQuery(); 140 q.descend("_int").constrain(new Integer (3)).greater().equal(); 141 assertIntsFound(new int[] { 3, 3, 5, 7 }, q); 142 143 q = newQuery(); 144 q.descend("_int").constrain(new Integer (2)).greater().equal(); 145 assertIntsFound(new int[] { 2, 3, 3, 5, 7 }, q); 146 147 q = newQuery(); 148 q.descend("_int").constrain(new Integer (2)).greater(); 149 assertIntsFound(new int[] { 3, 3, 5, 7 }, q); 150 151 q = newQuery(); 152 q.descend("_int").constrain(new Integer (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 (1)).greater(); 157 assertIntsFound(new int[] { 2, 3, 3, 5, 7 }, q); 158 159 q = newQuery(); 160 q.descend("_int").constrain(new Integer (4)).smaller(); 161 assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q); 162 163 q = newQuery(); 164 q.descend("_int").constrain(new Integer (4)).smaller().equal(); 165 assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q); 166 167 q = newQuery(); 168 q.descend("_int").constrain(new Integer (3)).smaller(); 169 assertIntsFound(new int[] { 1, 2 }, expectedZeroSize, q); 170 171 q = newQuery(); 172 q.descend("_int").constrain(new Integer (3)).smaller().equal(); 173 assertIntsFound(new int[] { 1, 2, 3, 3 }, expectedZeroSize, q); 174 175 q = newQuery(); 176 q.descend("_int").constrain(new Integer (2)).smaller().equal(); 177 assertIntsFound(new int[] { 1, 2 }, expectedZeroSize, q); 178 179 q = newQuery(); 180 q.descend("_int").constrain(new Integer (2)).smaller(); 181 assertIntsFound(new int[] { 1 }, expectedZeroSize, q); 182 183 q = newQuery(); 184 q.descend("_int").constrain(new Integer (1)).smaller().equal(); 185 assertIntsFound(new int[] { 1 }, expectedZeroSize, q); 186 187 q = newQuery(); 188 q.descend("_int").constrain(new Integer (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 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 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 |