1 package org.mmbase.util; 2 3 import junit.framework.*; 4 import java.util.*; 5 import org.mmbase.module.core.*; 6 import org.mmbase.module.corebuilders.*; 7 import org.mmbase.storage.search.*; 8 import org.mmbase.storage.search.implementation.*; 9 10 16 public class QueryConvertorTest extends TestCase { 17 18 private final static String IMAGES = "images"; 19 20 private MMBase mmbase = null; 21 private MMObjectBuilder images = null; 22 private FieldDefs imagesNumber = null; 23 private FieldDefs imagesTitle = null; 24 private ClusterBuilder clusterBuilder = null; 25 26 public QueryConvertorTest(java.lang.String testName) { 27 super(testName); 28 } 29 30 public static void main(java.lang.String [] args) { 31 junit.textui.TestRunner.run(suite()); 32 System.exit(0); 33 } 34 35 38 public void setUp() throws Exception { 39 MMBaseContext.init(); 40 mmbase = MMBase.getMMBase(); 41 images = mmbase.getBuilder(IMAGES); 42 imagesNumber = images.getField("number"); 43 imagesTitle = images.getField("title"); 44 clusterBuilder = mmbase.getClusterBuilder(); 45 } 46 47 50 public void tearDown() throws Exception {} 51 52 53 public void testSetConstraint() { 54 List tables = Arrays.asList( 55 new Object [] {"news", "related", "images", "insrel", "news0"}); 56 List empty = new ArrayList(0); 57 BasicSearchQuery query = clusterBuilder.getMultiLevelSearchQuery( 58 empty, empty, null, tables, null, 59 empty, empty, ClusterBuilder.SEARCH_ALL); 60 61 altaVistaSearchQueryTests(); 63 QueryConvertor.setConstraint(query, 64 "news.title=E'test1'+related.number=E10+images.number=E10+news0.title=E'test2'"); 65 CompositeConstraint composite 66 = (CompositeConstraint) query.getConstraint(); 67 assertTrue(composite.getLogicalOperator() 68 == CompositeConstraint.LOGICAL_AND); 69 List constraints = composite.getChilds(); 70 assertTrue(constraints.size() == 4); 71 FieldValueConstraint constraint0 72 = (FieldValueConstraint) constraints.get(0); 73 assertTrue(constraint0.toString(), 74 constraint0.getField().getStep().getTableName().equals("news")); 75 assertTrue(constraint0.toString(), 76 constraint0.getField().getStep().getAlias().equals("news")); 77 assertTrue(constraint0.toString(), 78 constraint0.getField().getFieldName().equals("title")); 79 assertTrue(constraint0.getField().toString(), 80 constraint0.getField().getAlias() == null); 81 assertTrue(constraint0.toString(), 82 constraint0.getOperator() == FieldCompareConstraint.LIKE); 83 assertTrue(constraint0.toString(), 84 !constraint0.isCaseSensitive()); 85 assertTrue(constraint0.toString(), 86 constraint0.getValue().equals("test1")); 87 FieldValueConstraint constraint1 88 = (FieldValueConstraint) constraints.get(1); 89 assertTrue(constraint1.toString(), 90 constraint1.getField().getStep().getTableName().equals("insrel")); 91 assertTrue(constraint1.toString(), 92 constraint1.getField().getStep().getAlias().equals("related")); 93 assertTrue(constraint1.toString(), 94 constraint1.getField().getFieldName().equals("number")); 95 assertTrue(constraint1.getField().toString(), 96 constraint1.getField().getAlias() == null); 97 assertTrue(constraint1.toString(), 98 constraint1.getOperator() == FieldCompareConstraint.EQUAL); 99 assertTrue(constraint1.toString(), 100 constraint1.getValue().equals(new Double (10))); 101 FieldValueConstraint constraint2 102 = (FieldValueConstraint) constraints.get(2); 103 assertTrue(constraint2.toString(), 104 constraint2.getField().getStep().getTableName().equals("images")); 105 assertTrue(constraint2.toString(), 106 constraint2.getField().getStep().getAlias().equals("images")); 107 assertTrue(constraint2.toString(), 108 constraint2.getField().getFieldName().equals("number")); 109 assertTrue(constraint2.getField().toString(), 110 constraint2.getField().getAlias() == null); 111 assertTrue(constraint2.toString(), 112 constraint2.getOperator() == FieldCompareConstraint.EQUAL); 113 assertTrue(constraint2.toString(), 114 constraint2.getValue().equals(new Double (10))); 115 FieldValueConstraint constraint3 116 = (FieldValueConstraint) constraints.get(3); 117 assertTrue(constraint3.toString(), 118 constraint3.getField().getStep().getTableName().equals("news")); 119 assertTrue(constraint3.toString(), 120 constraint3.getField().getStep().getAlias().equals("news0")); 121 assertTrue(constraint3.toString(), 122 constraint3.getField().getFieldName().equals("title")); 123 assertTrue(constraint3.getField().toString(), 124 constraint3.getField().getAlias() == null); 125 assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE); 126 assertTrue(constraint3.toString(), 127 !constraint3.isCaseSensitive()); 128 assertTrue(constraint3.toString(), 129 constraint3.getValue().equals("test2")); 130 131 QueryConvertor.setConstraint(query, 133 "WHERE LOWER(news.title) LIKE 'test1' AND related.number=10" 134 + " AND images.number=10 AND LOWER(news0.title) LIKE 'test2'"); 135 composite = (CompositeConstraint) query.getConstraint(); 136 assertTrue(composite.getLogicalOperator() 137 == CompositeConstraint.LOGICAL_AND); 138 constraints = composite.getChilds(); 139 assertTrue(constraints.size() == 4); 140 constraint0 = (FieldValueConstraint) constraints.get(0); 141 assertTrue(constraint0.toString(), 142 constraint0.getField().getStep().getTableName().equals("news")); 143 assertTrue(constraint0.toString(), 144 constraint0.getField().getStep().getAlias().equals("news")); 145 assertTrue(constraint0.toString(), 146 constraint0.getField().getFieldName().equals("title")); 147 assertTrue(constraint0.getField().toString(), 148 constraint0.getField().getAlias() == null); 149 assertTrue(constraint0.toString(), 150 constraint0.getOperator() == FieldCompareConstraint.LIKE); 151 assertTrue(constraint0.toString(), 152 !constraint0.isCaseSensitive()); 153 assertTrue(constraint0.toString(), 154 constraint0.getValue().equals("test1")); 155 constraint1 = (FieldValueConstraint) constraints.get(1); 156 assertTrue(constraint1.toString(), 157 constraint1.getField().getStep().getTableName().equals("insrel")); 158 assertTrue(constraint1.toString(), 159 constraint1.getField().getStep().getAlias().equals("related")); 160 assertTrue(constraint1.toString(), 161 constraint1.getField().getFieldName().equals("number")); 162 assertTrue(constraint1.getField().toString(), 163 constraint1.getField().getAlias() == null); 164 assertTrue(constraint1.toString(), 165 constraint1.getOperator() == FieldCompareConstraint.EQUAL); 166 assertTrue(constraint1.toString(), 167 constraint1.getValue().equals(new Double (10))); 168 constraint2 = (FieldValueConstraint) constraints.get(2); 169 assertTrue(constraint2.toString(), 170 constraint2.getField().getStep().getTableName().equals("images")); 171 assertTrue(constraint2.toString(), 172 constraint2.getField().getStep().getAlias().equals("images")); 173 assertTrue(constraint2.toString(), 174 constraint2.getField().getFieldName().equals("number")); 175 assertTrue(constraint2.getField().toString(), 176 constraint2.getField().getAlias() == null); 177 assertTrue(constraint2.toString(), 178 constraint2.getOperator() == FieldCompareConstraint.EQUAL); 179 assertTrue(constraint2.toString(), 180 constraint2.getValue().equals(new Double (10))); 181 constraint3 = (FieldValueConstraint) constraints.get(3); 182 assertTrue(constraint3.toString(), 183 constraint3.getField().getStep().getTableName().equals("news")); 184 assertTrue(constraint3.toString(), 185 constraint3.getField().getStep().getAlias().equals("news0")); 186 assertTrue(constraint3.toString(), 187 constraint3.getField().getFieldName().equals("title")); 188 assertTrue(constraint3.getField().toString(), 189 constraint3.getField().getAlias() == null); 190 assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE); 191 assertTrue(constraint3.toString(), 192 !constraint3.isCaseSensitive()); 193 assertTrue(constraint3.toString(), 194 constraint3.getValue().equals("test2")); 195 196 QueryConvertor.setConstraint(query, 198 "WHERE(LOWER(news.title) LIKE 'test1' AND related.number=10" 199 + " AND images.number=10 AND LOWER(news0.title) LIKE 'test2'"); 200 composite = (CompositeConstraint) query.getConstraint(); 201 assertTrue(composite.getLogicalOperator() 202 == CompositeConstraint.LOGICAL_AND); 203 constraints = composite.getChilds(); 204 assertTrue(constraints.size() == 4); 205 constraint0 = (FieldValueConstraint) constraints.get(0); 206 assertTrue(constraint0.toString(), 207 constraint0.getField().getStep().getTableName().equals("news")); 208 assertTrue(constraint0.toString(), 209 constraint0.getField().getStep().getAlias().equals("news")); 210 assertTrue(constraint0.toString(), 211 constraint0.getField().getFieldName().equals("title")); 212 assertTrue(constraint0.getField().toString(), 213 constraint0.getField().getAlias() == null); 214 assertTrue(constraint0.toString(), 215 constraint0.getOperator() == FieldCompareConstraint.LIKE); 216 assertTrue(constraint0.toString(), 217 !constraint0.isCaseSensitive()); 218 assertTrue(constraint0.toString(), 219 constraint0.getValue().equals("test1")); 220 constraint1 = (FieldValueConstraint) constraints.get(1); 221 assertTrue(constraint1.toString(), 222 constraint1.getField().getStep().getTableName().equals("insrel")); 223 assertTrue(constraint1.toString(), 224 constraint1.getField().getStep().getAlias().equals("related")); 225 assertTrue(constraint1.toString(), 226 constraint1.getField().getFieldName().equals("number")); 227 assertTrue(constraint1.getField().toString(), 228 constraint1.getField().getAlias() == null); 229 assertTrue(constraint1.toString(), 230 constraint1.getOperator() == FieldCompareConstraint.EQUAL); 231 assertTrue(constraint1.toString(), 232 constraint1.getValue().equals(new Double (10))); 233 constraint2 = (FieldValueConstraint) constraints.get(2); 234 assertTrue(constraint2.toString(), 235 constraint2.getField().getStep().getTableName().equals("images")); 236 assertTrue(constraint2.toString(), 237 constraint2.getField().getStep().getAlias().equals("images")); 238 assertTrue(constraint2.toString(), 239 constraint2.getField().getFieldName().equals("number")); 240 assertTrue(constraint2.getField().toString(), 241 constraint2.getField().getAlias() == null); 242 assertTrue(constraint2.toString(), 243 constraint2.getOperator() == FieldCompareConstraint.EQUAL); 244 assertTrue(constraint2.toString(), 245 constraint2.getValue().equals(new Double (10))); 246 constraint3 = (FieldValueConstraint) constraints.get(3); 247 assertTrue(constraint3.toString(), 248 constraint3.getField().getStep().getTableName().equals("news")); 249 assertTrue(constraint3.toString(), 250 constraint3.getField().getStep().getAlias().equals("news0")); 251 assertTrue(constraint3.toString(), 252 constraint3.getField().getFieldName().equals("title")); 253 assertTrue(constraint3.getField().toString(), 254 constraint3.getField().getAlias() == null); 255 assertTrue(constraint0.getOperator() == FieldCompareConstraint.LIKE); 256 assertTrue(constraint3.toString(), 257 !constraint3.isCaseSensitive()); 258 assertTrue(constraint3.toString(), 259 constraint3.getValue().equals("test2")); 260 } 261 262 267 private void altaVistaSearchQueryTests() { 268 NodeSearchQuery query1 = new NodeSearchQuery(images); 269 NodeSearchQuery query2 = new NodeSearchQuery(images); 270 271 QueryConvertor.setConstraint(query2, ""); 273 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 274 query1.equals(query2)); 275 276 BasicFieldValueConstraint constraint1 278 = (BasicFieldValueConstraint) 279 new BasicFieldValueConstraint(query1.getField(imagesTitle), "t_st%") 280 .setOperator(FieldCompareConstraint.LIKE) 281 .setCaseSensitive(false); 282 query1.setConstraint(constraint1); 283 QueryConvertor.setConstraint(query2, "title=E't?st*'"); 284 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 285 query1.equals(query2)); 286 287 BasicCompositeConstraint composite1 = new BasicCompositeConstraint( 289 CompositeConstraint.LOGICAL_AND); 290 query1.setConstraint(composite1); 291 composite1.addChild(constraint1); 292 BasicFieldValueConstraint constraint2 293 = (BasicFieldValueConstraint) 294 new BasicFieldValueConstraint( 295 query1.getField(imagesNumber), new Double ("1.11")) 296 .setOperator(FieldCompareConstraint.LESS_EQUAL); 297 composite1.addChild(constraint2); 298 query1.getField(imagesNumber); 299 QueryConvertor.setConstraint(query2, 300 "title=E't?st*'+images.number=s1.11"); 301 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 302 query1.equals(query2)); 303 304 constraint2.setInverse(true); 306 QueryConvertor.setConstraint(query2, 307 "title=E't?st*'-images.number=s1.11"); 308 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 309 query1.equals(query2)); 310 311 BasicFieldValueConstraint constraint3 313 = (BasicFieldValueConstraint) 314 new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double ("100")) 315 .setOperator(FieldCompareConstraint.NOT_EQUAL); 316 composite1.addChild(constraint3); 317 QueryConvertor.setConstraint(query2, 318 "title=E't?st*'-images.number=s1.11+number=N100"); 319 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 320 query1.equals(query2)); 321 322 BasicCompositeConstraint composite2 = new BasicCompositeConstraint( 324 CompositeConstraint.LOGICAL_OR); 325 composite2.addChild(composite1); 326 query1.setConstraint(composite2); 327 BasicFieldValueConstraint constraint4 328 = (BasicFieldValueConstraint) 329 new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double ("200")) 330 .setOperator(FieldCompareConstraint.EQUAL); 331 composite2.addChild(constraint4); 332 QueryConvertor.setConstraint(query2, 333 "title=E't?st*'-images.number=s1.11+number=N100|number=E200"); 334 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 335 query1.equals(query2)); 336 337 BasicCompositeConstraint composite3 = new BasicCompositeConstraint( 339 CompositeConstraint.LOGICAL_AND); 340 composite3.addChild(composite2); 341 query1.setConstraint(composite3); 342 BasicFieldValueConstraint constraint5 343 = (BasicFieldValueConstraint) 344 new BasicFieldValueConstraint(query1.getField(imagesNumber), new Double ("0")) 345 .setOperator(FieldCompareConstraint.GREATER) 346 .setInverse(true); 347 composite3.addChild(constraint5); 348 QueryConvertor.setConstraint(query2, 349 "title=E't?st*'-images.number=s1.11+number=N100|number=E200-number=G0"); 350 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 351 query1.equals(query2)); 352 353 constraint5.setInverse(false); 355 QueryConvertor.setConstraint(query2, 356 "title=E't?st*'-images.number=s1.11+number=N100|number=E200+number=G0"); 357 assertTrue("\n1:" + query1.toString() + "\n2:" + query2.toString(), 358 query1.equals(query2)); 359 } 360 361 public static Test suite() { 362 TestSuite suite = new TestSuite(QueryConvertorTest.class); 363 364 return suite; 365 } 366 367 } 368 | Popular Tags |