1 package org.mmbase.storage.search.implementation.database; 2 3 import junit.framework.*; 4 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 import org.mmbase.bridge.Field; 10 import java.util.*; 11 12 18 public class BasicSqlHandlerTest extends TestCase { 19 20 21 private BasicSqlHandler instance; 22 23 24 private Map disallowedValues = null; 25 26 27 private String prefix = null; 28 29 30 private MMBase mmbase = null; 31 32 33 private MMObjectBuilder images = null; 34 35 36 private MMObjectBuilder news = null; 37 38 39 private InsRel insrel = null; 40 41 public BasicSqlHandlerTest(java.lang.String testName) { 42 super(testName); 43 } 44 45 public static void main(java.lang.String [] args) { 46 junit.textui.TestRunner.run(suite()); 47 System.exit(0); 48 } 49 50 53 public void setUp() throws Exception { 54 MMBaseContext.init(); 55 mmbase = MMBase.getMMBase(); 56 images = mmbase.getBuilder("images"); 57 insrel = mmbase.getInsRel(); 58 news = mmbase.getBuilder("news"); 59 60 disallowedValues = new HashMap(); 62 disallowedValues.put("table", "m_table"); 63 disallowedValues.put("TABLE", "m_table"); 64 instance = new BasicSqlHandler(); 65 66 prefix = mmbase.getBaseName() + "_"; 67 } 68 69 72 public void tearDown() throws Exception {} 73 74 75 public void testInit() throws Exception { 76 testToSqlString(); 78 testToSql(); 79 } 80 81 82 public void testToSqlString() throws Exception { 83 assertTrue(BasicSqlHandler.toSqlString(null) == null); 84 assertTrue(BasicSqlHandler.toSqlString("'").equals("''")); 85 assertTrue(BasicSqlHandler.toSqlString("'''''").equals("''''''''''")); 86 assertTrue(BasicSqlHandler.toSqlString("AsDf'").equals("AsDf''")); 87 assertTrue(BasicSqlHandler.toSqlString("AsDf'jkl").equals("AsDf''jkl")); 88 assertTrue(BasicSqlHandler.toSqlString("AsDf'jkl'").equals("AsDf''jkl''")); 89 assertTrue(BasicSqlHandler.toSqlString("'AsDf'jkl").equals("''AsDf''jkl")); 90 assertTrue(BasicSqlHandler.toSqlString("qwerty").equals("qwerty")); 91 } 92 93 94 public void testToSql() throws Exception { 95 BasicSearchQuery query = new BasicSearchQuery(); 96 97 try { 99 instance.toSql(query, instance); 100 fail("Query without step, should throw IllegalStateException."); 101 } catch (IllegalStateException e) {}; 102 103 BasicStep step1 = query.addStep(images).setAlias(null); 104 105 try { 107 instance.toSql(query, instance); 108 fail("Query without field, should throw IllegalStateException."); 109 } catch (IllegalStateException e) {}; 110 111 FieldDefs imagesTitle = images.getField("title"); 112 FieldDefs insrelRNumber = insrel.getField("rnumber"); 113 FieldDefs newsTitle = news.getField("title"); 114 115 BasicStepField field1a 117 = query.addField(step1, imagesTitle).setAlias(null); 118 String strSql = instance.toSql(query, instance); 119 assertTrue(strSql, strSql.equalsIgnoreCase("SELECT TITLE FROM " + prefix + "images IMAGES")); 120 121 step1.setAlias("i"); 123 strSql = instance.toSql(query, instance); 124 assertTrue(strSql, strSql.equalsIgnoreCase("SELECT TITLE FROM " + prefix + "images I")); 125 126 field1a.setAlias("imageTitle"); 128 strSql = instance.toSql(query, instance); 129 assertTrue(strSql, strSql.equalsIgnoreCase("SELECT TITLE AS IMAGETITLE FROM " + prefix + "images I")); 130 131 FieldDefs imagesNumber = images.getField("number"); 133 BasicStepField field1b 134 = query.addField(step1, imagesNumber).setAlias(null); 135 strSql = instance.toSql(query, instance); 136 assertTrue(strSql, strSql.equalsIgnoreCase("SELECT TITLE AS IMAGETITLE,NUMBER FROM " + prefix + "images I")); 137 138 field1b.setAlias("imageNumber"); 140 strSql = instance.toSql(query, instance); 141 assertTrue(strSql, strSql.equalsIgnoreCase("SELECT TITLE AS IMAGETITLE,NUMBER AS IMAGENUMBER FROM " + prefix + "images I")); 142 143 query.setDistinct(true); 145 strSql = instance.toSql(query, instance); 146 assertTrue(strSql, strSql.equalsIgnoreCase( 147 "SELECT DISTINCT TITLE AS IMAGETITLE," 148 + "NUMBER AS IMAGENUMBER " 149 + "FROM " + prefix + "images I")); 150 151 BasicSortOrder sortOrder1a = query.addSortOrder(field1a); 153 strSql = instance.toSql(query, instance); 154 assertTrue(strSql, strSql.equalsIgnoreCase( 155 "SELECT DISTINCT TITLE AS IMAGETITLE," 156 + "NUMBER AS IMAGENUMBER " 157 + "FROM " + prefix + "images I " 158 + "ORDER BY TITLE ASC")); 159 160 Constraint constraint1 = new BasicFieldValueConstraint(field1a, "abd"); 162 query.setConstraint(constraint1); 163 strSql = instance.toSql(query, instance); 164 assertTrue(strSql, strSql.equalsIgnoreCase( 165 "SELECT DISTINCT TITLE AS IMAGETITLE," 166 + "NUMBER AS IMAGENUMBER " 167 + "FROM " + prefix + "images I " 168 + "WHERE TITLE='abd' " 169 + "ORDER BY TITLE ASC")); 170 171 Constraint constraint2 173 = new BasicFieldValueConstraint(field1b, new Integer (123)); 174 BasicCompositeConstraint constraint3 175 = new BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND) 176 .addChild(constraint1) 177 .addChild(constraint2); 178 query.setConstraint(constraint3); 179 strSql = instance.toSql(query, instance); 180 assertTrue(strSql, strSql.equalsIgnoreCase( 181 "SELECT DISTINCT TITLE AS IMAGETITLE," 182 + "NUMBER AS IMAGENUMBER " 183 + "FROM " + prefix + "images I " 184 + "WHERE TITLE='abd' AND NUMBER=123 " 185 + "ORDER BY TITLE ASC")); 186 187 sortOrder1a.setDirection(SortOrder.ORDER_DESCENDING); 189 strSql = instance.toSql(query, instance); 190 assertTrue(strSql, strSql.equalsIgnoreCase( 191 "SELECT DISTINCT TITLE AS IMAGETITLE," 192 + "NUMBER AS IMAGENUMBER " 193 + "FROM " + prefix + "images I " 194 + "WHERE TITLE='abd' AND NUMBER=123 " 195 + "ORDER BY TITLE DESC")); 196 197 sortOrder1a.setDirection(SortOrder.ORDER_ASCENDING); 199 strSql = instance.toSql(query, instance); 200 assertTrue(strSql, strSql.equalsIgnoreCase( 201 "SELECT DISTINCT TITLE AS IMAGETITLE," 202 + "NUMBER AS IMAGENUMBER " 203 + "FROM " + prefix + "images I " 204 + "WHERE TITLE='abd' AND NUMBER=123 " 205 + "ORDER BY TITLE ASC")); 206 207 query.setDistinct(false); 209 strSql = instance.toSql(query, instance); 210 assertTrue(strSql, strSql.equalsIgnoreCase( 211 "SELECT TITLE AS IMAGETITLE," 212 + "NUMBER AS IMAGENUMBER " 213 + "FROM " + prefix + "images I " 214 + "WHERE TITLE='abd' AND NUMBER=123 " 215 + "ORDER BY TITLE ASC")); 216 217 step1.addNode(123); 219 strSql = instance.toSql(query, instance); 220 assertTrue(strSql, strSql.equalsIgnoreCase( 221 "SELECT TITLE AS IMAGETITLE," 222 + "NUMBER AS IMAGENUMBER " 223 + "FROM " + prefix + "images I " 224 + "WHERE NUMBER=123 " 225 + "AND (TITLE='abd' AND NUMBER=123) " 226 + "ORDER BY TITLE ASC")); 227 228 229 230 231 step1.addNode(456); 233 strSql = instance.toSql(query, instance); 234 assertTrue(strSql, strSql.equalsIgnoreCase( 235 "SELECT TITLE AS IMAGETITLE," 236 + "NUMBER AS IMAGENUMBER " 237 + "FROM " + prefix + "images I " 238 + "WHERE NUMBER IN (123,456) " 239 + "AND (TITLE='abd' AND NUMBER=123) " 240 + "ORDER BY TITLE ASC")); 241 242 BasicRelationStep step2 = query.addRelationStep(insrel,news); 244 BasicStep step3 = (BasicStep) step2.getNext(); 245 strSql = instance.toSql(query, instance); 246 assertTrue(strSql, strSql.equalsIgnoreCase( 247 "SELECT I.TITLE AS IMAGETITLE," 248 + "I.NUMBER AS IMAGENUMBER " 249 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," 250 + prefix + "news NEWS " 251 + "WHERE I.NUMBER IN (123,456) " 252 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 253 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 254 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 255 + "ORDER BY I.TITLE ASC")); 256 257 step2.setAlias("insrel"); 259 step3.setAlias("news"); 260 261 step2.setRole(new Integer (890)); 263 strSql = instance.toSql(query, instance); 264 assertTrue(strSql, strSql.equalsIgnoreCase( 265 "SELECT I.TITLE AS IMAGETITLE," 266 + "I.NUMBER AS IMAGENUMBER " 267 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 268 + "WHERE I.NUMBER IN (123,456) " 269 + "AND (((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 270 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 271 + "AND INSREL.rnumber=890) " 272 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 273 + "ORDER BY I.TITLE ASC")); 274 275 step2.setDirectionality(RelationStep.DIRECTIONS_DESTINATION); 277 strSql = instance.toSql(query, instance); 278 assertTrue(strSql, strSql.equalsIgnoreCase( 279 "SELECT I.TITLE AS IMAGETITLE," 280 + "I.NUMBER AS IMAGENUMBER " 281 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 282 + "WHERE I.NUMBER IN (123,456) " 283 + "AND (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER " 284 + "AND INSREL.rnumber=890) " 285 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 286 + "ORDER BY I.TITLE ASC")); 287 288 step2.setCheckedDirectionality(true); 290 strSql = instance.toSql(query, instance); 291 assertTrue(strSql, strSql.equalsIgnoreCase( 292 "SELECT I.TITLE AS IMAGETITLE," 293 + "I.NUMBER AS IMAGENUMBER " 294 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 295 + "WHERE I.NUMBER IN (123,456) " 296 + "AND (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER " 297 + "AND INSREL.rnumber=890) " 298 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 299 + "ORDER BY I.TITLE ASC")); 300 301 step2.setDirectionality(RelationStep.DIRECTIONS_SOURCE); 304 step2.setCheckedDirectionality(false); 305 strSql = instance.toSql(query, instance); 306 assertTrue(strSql, strSql.equalsIgnoreCase( 307 "SELECT I.TITLE AS IMAGETITLE," 308 + "I.NUMBER AS IMAGENUMBER " 309 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 310 + "WHERE I.NUMBER IN (123,456) " 311 + "AND (I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER " 312 + "AND INSREL.rnumber=890) " 313 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 314 + "ORDER BY I.TITLE ASC")); 315 316 step2.setCheckedDirectionality(true); 318 strSql = instance.toSql(query, instance); 319 assertTrue(strSql, strSql.equalsIgnoreCase( 320 "SELECT I.TITLE AS IMAGETITLE," 321 + "I.NUMBER AS IMAGENUMBER " 322 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 323 + "WHERE I.NUMBER IN (123,456) " 324 + "AND (I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER " 325 + "AND INSREL.dir<>1 " 326 + "AND INSREL.rnumber=890) " 327 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 328 + "ORDER BY I.TITLE ASC")); 329 330 step2.setDirectionality(RelationStep.DIRECTIONS_BOTH); 333 step2.setCheckedDirectionality(false); 334 strSql = instance.toSql(query, instance); 335 assertTrue(strSql, strSql.equalsIgnoreCase( 336 "SELECT I.TITLE AS IMAGETITLE," 337 + "I.NUMBER AS IMAGENUMBER " 338 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 339 + "WHERE I.NUMBER IN (123,456) " 340 + "AND (((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 341 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 342 + "AND INSREL.rnumber=890) " 343 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 344 + "ORDER BY I.TITLE ASC")); 345 346 step2.setCheckedDirectionality(true); 348 strSql = instance.toSql(query, instance); 349 assertTrue(strSql, strSql.equalsIgnoreCase( 350 "SELECT I.TITLE AS IMAGETITLE," 351 + "I.NUMBER AS IMAGENUMBER " 352 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 353 + "WHERE I.NUMBER IN (123,456) " 354 + "AND (((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER " 355 + "AND INSREL.dir<>1) " 356 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 357 + "AND INSREL.rnumber=890) " 358 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 359 + "ORDER BY I.TITLE ASC")); 360 361 step2.setRole(null); 363 step2.setCheckedDirectionality(false); 364 strSql = instance.toSql(query, instance); 365 assertTrue(strSql, strSql.equalsIgnoreCase( 366 "SELECT I.TITLE AS IMAGETITLE," 367 + "I.NUMBER AS IMAGENUMBER " 368 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 369 + "WHERE I.NUMBER IN (123,456) " 370 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 371 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 372 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 373 + "ORDER BY I.TITLE ASC")); 374 375 StepField field2a = query.addField(step2, insrelRNumber).setAlias(null); 377 strSql = instance.toSql(query, instance); 378 assertTrue(strSql, strSql.equalsIgnoreCase( 379 "SELECT I.TITLE AS IMAGETITLE," 380 + "I.NUMBER AS IMAGENUMBER," 381 + "INSREL.rnumber " 382 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 383 + "WHERE I.NUMBER IN (123,456) " 384 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 385 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 386 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 387 + "ORDER BY I.TITLE ASC")); 388 389 StepField field3a = query.addField(step3, newsTitle).setAlias(null); 391 strSql = instance.toSql(query, instance); 392 assertTrue(strSql, strSql.equalsIgnoreCase( 393 "SELECT I.TITLE AS IMAGETITLE," 394 + "I.NUMBER AS IMAGENUMBER," 395 + "INSREL.rnumber," 396 + "NEWS.TITLE " 397 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 398 + "WHERE I.NUMBER IN (123,456) " 399 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 400 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 401 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 402 + "ORDER BY I.TITLE ASC")); 403 404 query.addSortOrder(field3a); 406 strSql = instance.toSql(query, instance); 407 assertTrue(strSql, strSql.equalsIgnoreCase( 408 "SELECT I.TITLE AS IMAGETITLE," 409 + "I.NUMBER AS IMAGENUMBER," 410 + "INSREL.rnumber," 411 + "NEWS.TITLE " 412 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 413 + "WHERE I.NUMBER IN (123,456) " 414 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 415 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 416 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 417 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC")); 418 419 query.addSortOrder(field2a); 421 strSql = instance.toSql(query, instance); 422 assertTrue(strSql, strSql.equalsIgnoreCase( 423 "SELECT I.TITLE AS IMAGETITLE," 424 + "I.NUMBER AS IMAGENUMBER," 425 + "INSREL.rnumber," 426 + "NEWS.TITLE " 427 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 428 + "WHERE I.NUMBER IN (123,456) " 429 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 430 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 431 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 432 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC,INSREL.rnumber ASC")); 433 434 step2.addNode(789); 436 strSql = instance.toSql(query, instance); 437 assertTrue(strSql, strSql.equalsIgnoreCase( 438 "SELECT I.TITLE AS IMAGETITLE," 439 + "I.NUMBER AS IMAGENUMBER," 440 + "INSREL.rnumber," 441 + "NEWS.TITLE " 442 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 443 + "WHERE I.NUMBER IN (123,456) AND INSREL.NUMBER=789 " 444 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 445 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 446 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 447 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC,INSREL.rnumber ASC")); 448 449 query = new BasicSearchQuery(true); 451 step1 = query.addStep(images).setAlias(null); 452 query.addAggregatedField( 453 step1, imagesTitle, AggregatedField.AGGREGATION_TYPE_COUNT) 454 .setAlias(null); 455 strSql = instance.toSql(query, instance); 456 assertTrue(strSql, strSql.equalsIgnoreCase( 457 "SELECT COUNT(TITLE) " 458 + "FROM " + prefix + "images IMAGES")); 459 460 query.setDistinct(true); 462 strSql = instance.toSql(query, instance); 463 assertTrue(strSql, strSql.equalsIgnoreCase( 464 "SELECT COUNT(TITLE) " 465 + "FROM " + prefix + "images IMAGES")); 466 } 467 468 469 470 public void testAppendQueryBodyToSql() throws Exception { 471 BasicSearchQuery query = new BasicSearchQuery(); 472 473 FieldDefs imagesTitle = images.getField("title"); 474 FieldDefs insrelRNumber = insrel.getField("rnumber"); 475 FieldDefs newsTitle = news.getField("title"); 476 StringBuffer sb = new StringBuffer (); 477 BasicStep step1 = query.addStep(images).setAlias(null); 478 479 BasicStepField field1a 481 = query.addField(step1, imagesTitle).setAlias(null); 482 instance.appendQueryBodyToSql(sb, query, instance); 483 String strSql = sb.toString(); 484 assertTrue(strSql, strSql.equalsIgnoreCase( 485 "TITLE " 486 + "FROM " + prefix + "images IMAGES")); 487 488 step1.setAlias("i"); 490 sb.setLength(0); 491 instance.appendQueryBodyToSql(sb, query, instance); 492 strSql = sb.toString(); 493 assertTrue(strSql, strSql.equalsIgnoreCase( 494 "TITLE " 495 + "FROM " + prefix + "images I")); 496 497 field1a.setAlias("imageTitle"); 499 sb.setLength(0); 500 instance.appendQueryBodyToSql(sb, query, instance); 501 strSql = sb.toString(); 502 assertTrue(strSql, strSql.equalsIgnoreCase( 503 "TITLE AS IMAGETITLE " 504 + "FROM " + prefix + "images I")); 505 506 FieldDefs imagesNumber = images.getField("number"); 508 BasicStepField field1b 509 = query.addField(step1, imagesNumber).setAlias(null); 510 sb.setLength(0); 511 instance.appendQueryBodyToSql(sb, query, instance); 512 strSql = sb.toString(); 513 assertTrue(strSql, strSql.equalsIgnoreCase( 514 "TITLE AS IMAGETITLE," 515 + "NUMBER " 516 + "FROM " + prefix + "images I")); 517 518 field1b.setAlias("IMAGENUMBER"); 520 sb.setLength(0); 521 instance.appendQueryBodyToSql(sb, query, instance); 522 strSql = sb.toString(); 523 assertTrue(strSql, strSql.equalsIgnoreCase( 524 "TITLE AS IMAGETITLE," 525 + "NUMBER AS IMAGENUMBER " 526 + "FROM " + prefix + "images I")); 527 528 query.setDistinct(true); 530 sb.setLength(0); 531 instance.appendQueryBodyToSql(sb, query, instance); 532 strSql = sb.toString(); 533 assertTrue(strSql, strSql.equalsIgnoreCase( 534 "TITLE AS IMAGETITLE," 535 + "NUMBER AS IMAGENUMBER " 536 + "FROM " + prefix + "images I")); 537 538 BasicSortOrder sortOrder1a = query.addSortOrder(field1a); 540 sb.setLength(0); 541 instance.appendQueryBodyToSql(sb, query, instance); 542 strSql = sb.toString(); 543 assertTrue(strSql, strSql.equalsIgnoreCase( 544 "TITLE AS IMAGETITLE," 545 + "NUMBER AS IMAGENUMBER " 546 + "FROM " + prefix + "images I " 547 + "ORDER BY TITLE ASC")); 548 549 Constraint constraint1 = new BasicFieldValueConstraint(field1a, "abd"); 551 query.setConstraint(constraint1); 552 sb.setLength(0); 553 instance.appendQueryBodyToSql(sb, query, instance); 554 strSql = sb.toString(); 555 assertTrue(strSql, strSql.equalsIgnoreCase( 556 "TITLE AS IMAGETITLE," 557 + "NUMBER AS IMAGENUMBER " 558 + "FROM " + prefix + "images I " 559 + "WHERE TITLE='abd' " 560 + "ORDER BY TITLE ASC")); 561 562 Constraint constraint2 564 = new BasicFieldValueConstraint(field1b, new Integer (123)); 565 BasicCompositeConstraint constraint3 566 = new BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND) 567 .addChild(constraint1) 568 .addChild(constraint2); 569 query.setConstraint(constraint3); 570 sb.setLength(0); 571 instance.appendQueryBodyToSql(sb, query, instance); 572 strSql = sb.toString(); 573 assertTrue(strSql, strSql.equalsIgnoreCase( 574 "TITLE AS IMAGETITLE," 575 + "NUMBER AS IMAGENUMBER " 576 + "FROM " + prefix + "images I " 577 + "WHERE TITLE='abd' AND NUMBER=123 " 578 + "ORDER BY TITLE ASC")); 579 580 sortOrder1a.setDirection(SortOrder.ORDER_DESCENDING); 582 sb.setLength(0); 583 instance.appendQueryBodyToSql(sb, query, instance); 584 strSql = sb.toString(); 585 assertTrue(strSql, strSql.equalsIgnoreCase( 586 "TITLE AS IMAGETITLE," 587 + "NUMBER AS IMAGENUMBER " 588 + "FROM " + prefix + "images I " 589 + "WHERE TITLE='abd' AND NUMBER=123 " 590 + "ORDER BY TITLE DESC")); 591 592 sortOrder1a.setDirection(SortOrder.ORDER_ASCENDING); 594 sb.setLength(0); 595 instance.appendQueryBodyToSql(sb, query, instance); 596 strSql = sb.toString(); 597 assertTrue(strSql, strSql.equalsIgnoreCase( 598 "TITLE AS IMAGETITLE," 599 + "NUMBER AS IMAGENUMBER " 600 + "FROM " + prefix + "images I " 601 + "WHERE TITLE='abd' AND NUMBER=123 " 602 + "ORDER BY TITLE ASC")); 603 604 query.setDistinct(false); 606 sb.setLength(0); 607 instance.appendQueryBodyToSql(sb, query, instance); 608 strSql = sb.toString(); 609 assertTrue(strSql, strSql.equalsIgnoreCase( 610 "TITLE AS IMAGETITLE," 611 + "NUMBER AS IMAGENUMBER " 612 + "FROM " + prefix + "images I " 613 + "WHERE TITLE='abd' AND NUMBER=123 " 614 + "ORDER BY TITLE ASC")); 615 616 step1.addNode(123); 618 sb.setLength(0); 619 instance.appendQueryBodyToSql(sb, query, instance); 620 strSql = sb.toString(); 621 assertTrue(strSql, strSql.equalsIgnoreCase( 622 "TITLE AS IMAGETITLE," 623 + "NUMBER AS IMAGENUMBER " 624 + "FROM " + prefix + "images I " 625 + "WHERE NUMBER=123 " 626 + "AND (TITLE='abd' AND NUMBER=123) " 627 + "ORDER BY TITLE ASC")); 628 629 step1.addNode(456); 631 sb.setLength(0); 632 instance.appendQueryBodyToSql(sb, query, instance); 633 strSql = sb.toString(); 634 assertTrue(strSql, strSql.equalsIgnoreCase( 635 "TITLE AS IMAGETITLE," 636 + "NUMBER AS IMAGENUMBER " 637 + "FROM " + prefix + "images I " 638 + "WHERE NUMBER IN (123,456) " 639 + "AND (TITLE='abd' AND NUMBER=123) " 640 + "ORDER BY TITLE ASC")); 641 642 BasicRelationStep step2 = (BasicRelationStep) 644 query.addRelationStep(insrel, news).setAlias("insrel"); 645 BasicStep step3 = (BasicStep) step2.getNext(); 646 step3.setAlias("news"); 647 sb.setLength(0); 648 instance.appendQueryBodyToSql(sb, query, instance); 649 strSql = sb.toString(); 650 assertTrue(strSql, strSql.equalsIgnoreCase( 651 "I.TITLE AS IMAGETITLE," 652 + "I.NUMBER AS IMAGENUMBER " 653 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 654 + "WHERE I.NUMBER IN (123,456) " 655 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 656 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 657 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 658 + "ORDER BY I.TITLE ASC")); 659 660 step2.setDirectionality(RelationStep.DIRECTIONS_DESTINATION); 662 sb.setLength(0); 663 instance.appendQueryBodyToSql(sb, query, instance); 664 strSql = sb.toString(); 665 assertTrue(strSql, strSql.equalsIgnoreCase( 666 "I.TITLE AS IMAGETITLE," 667 + "I.NUMBER AS IMAGENUMBER " 668 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 669 + "WHERE I.NUMBER IN (123,456) " 670 + "AND (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER) " 671 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 672 + "ORDER BY I.TITLE ASC")); 673 674 step2.setDirectionality(RelationStep.DIRECTIONS_SOURCE); 676 sb.setLength(0); 677 instance.appendQueryBodyToSql(sb, query, instance); 678 strSql = sb.toString(); 679 assertTrue(strSql, strSql.equalsIgnoreCase( 680 "I.TITLE AS IMAGETITLE," 681 + "I.NUMBER AS IMAGENUMBER " 682 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 683 + "WHERE I.NUMBER IN (123,456) " 684 + "AND (I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 685 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 686 + "ORDER BY I.TITLE ASC")); 687 688 step2.setDirectionality(RelationStep.DIRECTIONS_BOTH); 690 sb.setLength(0); 691 instance.appendQueryBodyToSql(sb, query, instance); 692 strSql = sb.toString(); 693 assertTrue(strSql, strSql.equalsIgnoreCase( 694 "I.TITLE AS IMAGETITLE," 695 + "I.NUMBER AS IMAGENUMBER " 696 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 697 + "WHERE I.NUMBER IN (123,456) " 698 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 699 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 700 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 701 + "ORDER BY I.TITLE ASC")); 702 703 StepField field2a = query.addField(step2, insrelRNumber).setAlias(null); 705 sb.setLength(0); 706 instance.appendQueryBodyToSql(sb, query, instance); 707 strSql = sb.toString(); 708 assertTrue(strSql, strSql.equalsIgnoreCase( 709 "I.TITLE AS IMAGETITLE," 710 + "I.NUMBER AS IMAGENUMBER," 711 + "INSREL.rnumber " 712 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 713 + "WHERE I.NUMBER IN (123,456) " 714 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 715 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 716 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 717 + "ORDER BY I.TITLE ASC")); 718 719 StepField field3a = query.addField(step3, newsTitle).setAlias(null); 721 sb.setLength(0); 722 instance.appendQueryBodyToSql(sb, query, instance); 723 strSql = sb.toString(); 724 assertTrue(strSql, strSql.equalsIgnoreCase( 725 "I.TITLE AS IMAGETITLE," 726 + "I.NUMBER AS IMAGENUMBER," 727 + "INSREL.rnumber," 728 + "NEWS.TITLE " 729 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 730 + "WHERE I.NUMBER IN (123,456) " 731 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 732 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 733 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 734 + "ORDER BY I.TITLE ASC")); 735 736 query.addSortOrder(field3a); 738 sb.setLength(0); 739 instance.appendQueryBodyToSql(sb, query, instance); 740 strSql = sb.toString(); 741 assertTrue(strSql, strSql.equalsIgnoreCase( 742 "I.TITLE AS IMAGETITLE," 743 + "I.NUMBER AS IMAGENUMBER," 744 + "INSREL.rnumber," 745 + "NEWS.TITLE " 746 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 747 + "WHERE I.NUMBER IN (123,456) " 748 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 749 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 750 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 751 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC")); 752 753 query.addSortOrder(field2a); 755 sb.setLength(0); 756 instance.appendQueryBodyToSql(sb, query, instance); 757 strSql = sb.toString(); 758 assertTrue(strSql, strSql.equalsIgnoreCase( 759 "I.TITLE AS IMAGETITLE," 760 + "I.NUMBER AS IMAGENUMBER," 761 + "INSREL.rnumber," 762 + "NEWS.TITLE " 763 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 764 + "WHERE I.NUMBER IN (123,456) " 765 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 766 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 767 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 768 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC,INSREL.rnumber ASC")); 769 770 step2.addNode(789); 772 sb.setLength(0); 773 instance.appendQueryBodyToSql(sb, query, instance); 774 strSql = sb.toString(); 775 assertTrue(strSql, strSql.equalsIgnoreCase( 776 "I.TITLE AS IMAGETITLE," 777 + "I.NUMBER AS IMAGENUMBER," 778 + "INSREL.rnumber," 779 + "NEWS.TITLE " 780 + "FROM " + prefix + "images I," + prefix + "insrel INSREL," + prefix + "news NEWS " 781 + "WHERE I.NUMBER IN (123,456) AND INSREL.NUMBER=789 " 782 + "AND ((I.NUMBER=INSREL.DNUMBER AND NEWS.NUMBER=INSREL.SNUMBER) " 783 + "OR (I.NUMBER=INSREL.SNUMBER AND NEWS.NUMBER=INSREL.DNUMBER)) " 784 + "AND (I.TITLE='abd' AND I.NUMBER=123) " 785 + "ORDER BY I.TITLE ASC,NEWS.TITLE ASC,INSREL.rnumber ASC")); 786 787 query = new BasicSearchQuery(true); 789 step1 = query.addStep(images).setAlias(null); 790 BasicAggregatedField field4a 791 = (BasicAggregatedField) query.addAggregatedField( 792 step1, imagesTitle, AggregatedField.AGGREGATION_TYPE_COUNT) 793 .setAlias(null); 794 sb.setLength(0); 795 instance.appendQueryBodyToSql(sb, query, instance); 796 strSql = sb.toString(); 797 assertTrue(strSql, strSql.equalsIgnoreCase( 798 "COUNT(TITLE) " + "FROM " + prefix + "images IMAGES")); 799 800 field4a.setAggregationType( 801 AggregatedField.AGGREGATION_TYPE_COUNT_DISTINCT); 802 sb.setLength(0); 803 instance.appendQueryBodyToSql(sb, query, instance); 804 strSql = sb.toString(); 805 assertTrue(strSql, strSql.equalsIgnoreCase( 806 "COUNT(DISTINCT TITLE) " 807 + "FROM " + prefix + "images IMAGES")); 808 809 field4a.setAggregationType(AggregatedField.AGGREGATION_TYPE_MIN); 810 sb.setLength(0); 811 instance.appendQueryBodyToSql(sb, query, instance); 812 strSql = sb.toString(); 813 assertTrue(strSql, strSql.equalsIgnoreCase( 814 "MIN(TITLE) " 815 + "FROM " + prefix + "images IMAGES")); 816 817 field4a.setAggregationType(AggregatedField.AGGREGATION_TYPE_MAX); 818 sb.setLength(0); 819 instance.appendQueryBodyToSql(sb, query, instance); 820 strSql = sb.toString(); 821 assertTrue(strSql, strSql.equalsIgnoreCase( 822 "MAX(TITLE) " 823 + "FROM " + prefix + "images IMAGES")); 824 825 field4a.setAlias("maxTitle"); 826 sb.setLength(0); 827 instance.appendQueryBodyToSql(sb, query, instance); 828 strSql = sb.toString(); 829 assertTrue(strSql, strSql.equalsIgnoreCase( 830 "MAX(TITLE) AS maxTitle " 831 + "FROM " + prefix + "images IMAGES")); 832 833 BasicAggregatedField field4b 834 = (BasicAggregatedField) query.addAggregatedField( 835 step1, imagesNumber, AggregatedField.AGGREGATION_TYPE_COUNT) 836 .setAlias(null); 837 sb.setLength(0); 838 instance.appendQueryBodyToSql(sb, query, instance); 839 strSql = sb.toString(); 840 assertTrue(strSql, strSql.equalsIgnoreCase( 841 "MAX(TITLE) AS maxTitle," 842 + "COUNT(NUMBER) " 843 + "FROM " + prefix + "images IMAGES")); 844 845 field4b.setAggregationType(AggregatedField.AGGREGATION_TYPE_GROUP_BY); 846 sb.setLength(0); 847 instance.appendQueryBodyToSql(sb, query, instance); 848 strSql = sb.toString(); 849 assertTrue(strSql, strSql.equalsIgnoreCase( 850 "MAX(TITLE) AS maxTitle," 851 + "NUMBER " 852 + "FROM " + prefix + "images IMAGES " 853 + "GROUP BY NUMBER")); 854 855 field4b.setAlias("IMAGENUMBER"); 856 sb.setLength(0); 857 instance.appendQueryBodyToSql(sb, query, instance); 858 strSql = sb.toString(); 859 assertTrue(strSql, strSql.equalsIgnoreCase( 860 "MAX(TITLE) AS maxTitle," 861 + "NUMBER AS IMAGENUMBER " 862 + "FROM " + prefix + "images IMAGES " 863 + "GROUP BY IMAGENUMBER")); 864 } 865 866 867 public void testAppendConstraintToSql() { 868 869 BasicSearchQuery query = new BasicSearchQuery(); 870 StringBuffer sb = new StringBuffer (); 871 BasicStep step1 = query.addStep(images); 872 step1.setAlias(null); 873 FieldDefs imagesTitle = images.getField("title"); 874 StepField field1 = query.addField(step1, imagesTitle); 875 FieldDefs imagesNumber = images.getField("number"); 876 StepField field2 = query.addField(step1, imagesNumber); 877 BasicStep step2 = query.addStep(news); 878 step2.setAlias(null); 879 FieldDefs newsNumber = news.getField("number"); 880 StepField field3 = query.addField(step2, newsNumber); 881 FieldDefs newsTitle = news.getField("title"); 882 StepField field4 = query.addField(step2, newsTitle); 883 884 BasicFieldNullConstraint constraint1 886 = new BasicFieldNullConstraint(field1); 887 888 sb.setLength(0); 889 instance.appendConstraintToSql(sb, constraint1, query, false, false); 890 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 891 "IMAGES.TITLE IS NULL")); 892 893 sb.setLength(0); 894 instance.appendConstraintToSql(sb, constraint1, query, false, true); 895 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 896 "IMAGES.TITLE IS NULL")); 897 898 sb.setLength(0); 899 instance.appendConstraintToSql(sb, constraint1, query, true, false); 900 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 901 "IMAGES.TITLE IS NOT NULL")); 902 903 sb.setLength(0); 904 constraint1.setInverse(true); instance.appendConstraintToSql(sb, constraint1, query, true, false); 906 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 907 "IMAGES.TITLE IS NULL")); 908 909 sb.setLength(0); 910 instance.appendConstraintToSql(sb, constraint1, query, false, false); 911 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 912 "IMAGES.TITLE IS NOT NULL")); 913 914 BasicFieldValueInConstraint constraint2 916 = new BasicFieldValueInConstraint(field1); 917 918 sb.setLength(0); 920 try { 921 instance.appendConstraintToSql(sb, constraint2, query, false, false); 922 fail("Empty values list, should throw IllegalStateException."); 923 } catch (IllegalStateException e) {} 924 925 sb.setLength(0); 926 constraint2.addValue("AsDf"); instance.appendConstraintToSql(sb, constraint2, query, false, false); 928 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 929 "IMAGES.TITLE='AsDf'")); 930 931 sb.setLength(0); 932 constraint2.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint2, query, false, false); 934 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 935 "LOWER(IMAGES.TITLE)='asdf'")); 936 937 sb.setLength(0); 938 constraint2.addValue("qWeR"); instance.appendConstraintToSql(sb, constraint2, query, false, false); 940 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 941 "LOWER(IMAGES.TITLE) IN ('asdf','qwer')")); 942 943 sb.setLength(0); 944 constraint2.setCaseSensitive(true); instance.appendConstraintToSql(sb, constraint2, query, false, false); 946 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 947 "IMAGES.TITLE IN ('AsDf','qWeR')")); 948 949 sb.setLength(0); 950 instance.appendConstraintToSql(sb, constraint2, query, false, true); 951 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 952 "IMAGES.TITLE IN ('AsDf','qWeR')")); 953 954 sb.setLength(0); 955 instance.appendConstraintToSql(sb, constraint2, query, true, false); 956 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 957 "IMAGES.TITLE NOT IN ('AsDf','qWeR')")); 958 959 sb.setLength(0); 960 constraint2.setInverse(true); instance.appendConstraintToSql(sb, constraint2, query, true, false); 962 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 963 "IMAGES.TITLE IN ('AsDf','qWeR')")); 964 965 sb.setLength(0); 966 instance.appendConstraintToSql(sb, constraint2, query, false, false); 967 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 968 "IMAGES.TITLE NOT IN ('AsDf','qWeR')")); 969 970 BasicFieldValueBetweenConstraint constraint2a 972 = new BasicFieldValueBetweenConstraint(field1, "AsDf", "jkLM"); 973 974 sb.setLength(0); 975 instance.appendConstraintToSql(sb, constraint2a, query, false, false); 976 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 977 "IMAGES.TITLE BETWEEN 'AsDf' AND 'jkLM'")); 978 979 sb.setLength(0); 980 constraint2a.setInverse(true); instance.appendConstraintToSql(sb, constraint2a, query, false, false); 982 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 983 "IMAGES.TITLE NOT BETWEEN 'AsDf' AND 'jkLM'")); 984 985 sb.setLength(0); 986 instance.appendConstraintToSql(sb, constraint2a, query, true, false); 987 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 988 "IMAGES.TITLE BETWEEN 'AsDf' AND 'jkLM'")); 989 990 sb.setLength(0); 991 constraint2a.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint2a, query, true, false); 993 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 994 "LOWER(IMAGES.TITLE) BETWEEN 'asdf' AND 'jklm'")); 995 996 BasicFieldValueInConstraint constraint3 = new BasicFieldValueInConstraint(field2); 998 999 sb.setLength(0); 1001 try { 1002 instance.appendConstraintToSql(sb, constraint3, query, false, false); 1003 fail("Empty values list, should throw IllegalStateException."); 1004 } catch (IllegalStateException e) {} 1005 1006 sb.setLength(0); 1007 constraint3.addValue(new Integer (1234)); 1009 instance.appendConstraintToSql(sb, constraint3, query, false, false); 1010 1011 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER=1234")); 1012 1013 sb.setLength(0); 1014 constraint3.addValue(new Integer (5678)); instance.appendConstraintToSql(sb, constraint3, query, false, false); 1016 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER IN (1234,5678)")); 1017 1018 sb.setLength(0); 1019 instance.appendConstraintToSql(sb, constraint3, query, false, true); 1020 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER IN (1234,5678)")); 1021 1022 sb.setLength(0); 1023 instance.appendConstraintToSql(sb, constraint3, query, true, false); 1024 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER NOT IN (1234,5678)")); 1025 1026 sb.setLength(0); 1027 constraint3.setInverse(true); instance.appendConstraintToSql(sb, constraint3, query, true, false); 1029 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER IN (1234,5678)")); 1030 1031 sb.setLength(0); 1032 instance.appendConstraintToSql(sb, constraint3, query, false, false); 1033 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1034 "IMAGES.NUMBER NOT IN (1234,5678)")); 1035 1036 sb.setLength(0); 1037 constraint3.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint3, query, false, false); 1039 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1040 "IMAGES.NUMBER NOT IN (1234,5678)")); 1041 1042 BasicFieldValueBetweenConstraint constraint3a 1044 = new BasicFieldValueBetweenConstraint( 1045 field2, new Integer (123), new Double (456.0)); 1046 1047 sb.setLength(0); 1048 instance.appendConstraintToSql(sb, constraint3a, query, false, false); 1049 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1050 "IMAGES.NUMBER BETWEEN 123 AND 456")); 1051 1052 sb.setLength(0); 1053 constraint3a.setInverse(true); instance.appendConstraintToSql(sb, constraint3a, query, false, false); 1055 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1056 "IMAGES.NUMBER NOT BETWEEN 123 AND 456")); 1057 1058 sb.setLength(0); 1059 instance.appendConstraintToSql(sb, constraint3a, query, true, false); 1060 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1061 "IMAGES.NUMBER BETWEEN 123 AND 456")); 1062 1063 sb.setLength(0); 1064 constraint3a.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint3a, query, true, false); 1066 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1067 "IMAGES.NUMBER BETWEEN 123 AND 456")); 1068 1069 BasicFieldValueConstraint constraint6 1071 = new BasicFieldValueConstraint(field1, "qWeRtY"); 1072 1073 sb.setLength(0); 1074 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1075 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1076 "IMAGES.TITLE='qWeRtY'")); 1077 1078 sb.setLength(0); 1079 constraint6.setOperator(FieldCompareConstraint.LESS); 1080 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1081 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1082 "IMAGES.TITLE<'qWeRtY'")); 1083 1084 sb.setLength(0); 1085 constraint6.setOperator(FieldCompareConstraint.LESS_EQUAL); 1086 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1087 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1088 "IMAGES.TITLE<='qWeRtY'")); 1089 1090 sb.setLength(0); 1091 constraint6.setOperator(FieldCompareConstraint.EQUAL); 1092 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1093 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1094 "IMAGES.TITLE='qWeRtY'")); 1095 1096 sb.setLength(0); 1097 constraint6.setOperator(FieldCompareConstraint.NOT_EQUAL); 1098 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1099 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1100 "IMAGES.TITLE<>'qWeRtY'")); 1101 1102 sb.setLength(0); 1103 constraint6.setOperator(FieldCompareConstraint.GREATER); 1104 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1105 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1106 "IMAGES.TITLE>'qWeRtY'")); 1107 1108 sb.setLength(0); 1109 constraint6.setOperator(FieldCompareConstraint.GREATER_EQUAL); 1110 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1111 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1112 "IMAGES.TITLE>='qWeRtY'")); 1113 1114 sb.setLength(0); 1115 constraint6.setOperator(FieldCompareConstraint.LIKE); 1116 instance.appendConstraintToSql(sb, constraint6, query, false, false); 1117 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1118 "IMAGES.TITLE LIKE 'qWeRtY'")); 1119 1120 sb.setLength(0); 1121 constraint6.setInverse(true); instance.appendConstraintToSql(sb, constraint6, query, false, false); 1123 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1124 "IMAGES.TITLE NOT LIKE 'qWeRtY'")); 1125 1126 sb.setLength(0); 1127 instance.appendConstraintToSql(sb, constraint6, query, true, false); 1128 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1129 "IMAGES.TITLE LIKE 'qWeRtY'")); 1130 1131 sb.setLength(0); 1132 constraint6.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint6, query, true, false); 1134 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1135 "LOWER(IMAGES.TITLE) LIKE 'qwerty'")); 1136 1137 BasicFieldValueConstraint constraint7 1139 = new BasicFieldValueConstraint(field2, new Integer (9876)); 1140 1141 sb.setLength(0); 1142 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1143 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1144 "IMAGES.NUMBER=9876")); 1145 1146 sb.setLength(0); 1147 constraint7.setOperator(FieldCompareConstraint.LESS); 1148 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1149 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1150 "IMAGES.NUMBER<9876")); 1151 1152 sb.setLength(0); 1153 constraint7.setOperator(FieldCompareConstraint.LESS_EQUAL); 1154 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1155 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1156 "IMAGES.NUMBER<=9876")); 1157 1158 sb.setLength(0); 1159 constraint7.setOperator(FieldCompareConstraint.EQUAL); 1160 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1161 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1162 "IMAGES.NUMBER=9876")); 1163 1164 sb.setLength(0); 1165 constraint7.setOperator(FieldCompareConstraint.NOT_EQUAL); 1166 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1167 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1168 "IMAGES.NUMBER<>9876")); 1169 1170 sb.setLength(0); 1171 constraint7.setOperator(FieldCompareConstraint.GREATER); 1172 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1173 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1174 "IMAGES.NUMBER>9876")); 1175 1176 sb.setLength(0); 1177 constraint7.setOperator(FieldCompareConstraint.GREATER_EQUAL); 1178 instance.appendConstraintToSql(sb, constraint7, query, false, false); 1179 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1180 "IMAGES.NUMBER>=9876")); 1181 1182 sb.setLength(0); 1183 constraint7.setInverse(true); instance.appendConstraintToSql(sb, constraint7, query, false, false); 1185 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1186 "NOT (IMAGES.NUMBER>=9876)")); 1187 1188 sb.setLength(0); 1189 instance.appendConstraintToSql(sb, constraint7, query, true, false); 1190 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1191 "IMAGES.NUMBER>=9876")); 1192 1193 sb.setLength(0); 1194 constraint7.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint7, query, true, false); 1196 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1197 "IMAGES.NUMBER>=9876")); 1198 1199 BasicCompareFieldsConstraint constraint8 1201 = new BasicCompareFieldsConstraint(field2, field3); 1202 1203 sb.setLength(0); 1204 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1205 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1206 "IMAGES.NUMBER=NEWS.NUMBER")); 1207 1208 sb.setLength(0); 1209 constraint8.setOperator(FieldCompareConstraint.LESS); 1210 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1211 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1212 "IMAGES.NUMBER<NEWS.NUMBER")); 1213 1214 sb.setLength(0); 1215 constraint8.setOperator(FieldCompareConstraint.LESS_EQUAL); 1216 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1217 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1218 "IMAGES.NUMBER<=NEWS.NUMBER")); 1219 1220 sb.setLength(0); 1221 constraint8.setOperator(FieldCompareConstraint.EQUAL); 1222 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1223 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1224 "IMAGES.NUMBER=NEWS.NUMBER")); 1225 1226 sb.setLength(0); 1227 constraint8.setOperator(FieldCompareConstraint.NOT_EQUAL); 1228 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1229 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1230 "IMAGES.NUMBER<>NEWS.NUMBER")); 1231 1232 sb.setLength(0); 1233 constraint8.setOperator(FieldCompareConstraint.GREATER); 1234 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1235 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1236 "IMAGES.NUMBER>NEWS.NUMBER")); 1237 1238 sb.setLength(0); 1239 constraint8.setOperator(FieldCompareConstraint.GREATER_EQUAL); 1240 instance.appendConstraintToSql(sb, constraint8, query, false, false); 1241 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1242 "IMAGES.NUMBER>=NEWS.NUMBER")); 1243 1244 sb.setLength(0); 1245 constraint8.setInverse(true); instance.appendConstraintToSql(sb, constraint8, query, false, false); 1247 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1248 "NOT (IMAGES.NUMBER>=NEWS.NUMBER)")); 1249 1250 sb.setLength(0); 1251 instance.appendConstraintToSql(sb, constraint8, query, true, false); 1252 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1253 "IMAGES.NUMBER>=NEWS.NUMBER")); 1254 1255 sb.setLength(0); 1256 constraint8.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint8, query, true, false); 1258 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1259 "IMAGES.NUMBER>=NEWS.NUMBER")); 1260 1261 BasicCompareFieldsConstraint constraint9 = 1263 new BasicCompareFieldsConstraint(field1, field4); 1264 1265 sb.setLength(0); 1266 instance.appendConstraintToSql(sb, constraint9, query, false, false); 1267 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1268 "IMAGES.TITLE=NEWS.TITLE")); 1269 1270 sb.setLength(0); 1271 constraint9.setOperator(FieldCompareConstraint.LESS); 1272 instance.appendConstraintToSql(sb, constraint9, query, false, false); 1273 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1274 "IMAGES.TITLE<NEWS.TITLE")); 1275 1276 sb.setLength(0); 1277 constraint9.setOperator(FieldCompareConstraint.GREATER); 1278 instance.appendConstraintToSql(sb, constraint9, query, false, false); 1279 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1280 "IMAGES.TITLE>NEWS.TITLE")); 1281 1282 sb.setLength(0); 1283 constraint9.setInverse(true); instance.appendConstraintToSql(sb, constraint9, query, false, false); 1285 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1286 "NOT (IMAGES.TITLE>NEWS.TITLE)")); 1287 1288 sb.setLength(0); 1289 instance.appendConstraintToSql(sb, constraint9, query, true, false); 1290 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1291 "IMAGES.TITLE>NEWS.TITLE")); 1292 1293 sb.setLength(0); 1294 constraint9.setCaseSensitive(false); instance.appendConstraintToSql(sb, constraint9, query, true, false); 1296 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1297 "LOWER(IMAGES.TITLE)>LOWER(NEWS.TITLE)")); 1298 1299 BasicCompositeConstraint constraint10 = 1301 new BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND); 1302 1303 sb.setLength(0); 1304 try { 1305 instance.appendConstraintToSql(sb, constraint10, query, false, false); 1307 fail("Composite constraint, should throw IllegalArgumentException."); 1308 } catch (IllegalArgumentException e) {} 1309 1310 BasicLegacyConstraint constraint11 1312 = new BasicLegacyConstraint("a=b AND c=d"); 1313 sb.setLength(0); 1314 instance.appendConstraintToSql(sb, constraint11, query, false, false); 1315 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1316 "a=b AND c=d")); 1317 1318 sb.setLength(0); 1319 instance.appendConstraintToSql(sb, constraint11, query, true, false); 1320 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1321 "NOT (a=b AND c=d)")); 1322 1323 sb.setLength(0); 1324 instance.appendConstraintToSql(sb, constraint11, query, false, true); 1325 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1326 "(a=b AND c=d)")); 1327 1328 sb.setLength(0); 1329 instance.appendConstraintToSql(sb, constraint11, query, true, true); 1330 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1331 "NOT (a=b AND c=d)")); 1332 1333 sb.setLength(0); 1335 constraint11.setConstraint(" "); 1336 instance.appendConstraintToSql(sb, constraint11, query, true, true); 1337 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("")); 1338 1339 sb.setLength(0); 1340 instance.appendConstraintToSql(sb, constraint11, query, true, false); 1341 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("")); 1342 1343 sb.setLength(0); 1344 instance.appendConstraintToSql(sb, constraint11, query, false, true); 1345 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("")); 1346 1347 sb.setLength(0); 1348 instance.appendConstraintToSql(sb, constraint11, query, false, false); 1349 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("")); 1350 } 1351 1352 1353 public void testGetSupportLevel() throws Exception { 1354 BasicSearchQuery query = new BasicSearchQuery(); 1355 1356 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_MAX_NUMBER, query) 1358 == SearchQueryHandler.SUPPORT_OPTIMAL); 1359 query.setMaxNumber(100); 1360 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_MAX_NUMBER, query) 1361 == SearchQueryHandler.SUPPORT_NONE); 1362 query.setMaxNumber(-1); 1363 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_MAX_NUMBER, query) 1364 == SearchQueryHandler.SUPPORT_OPTIMAL); 1365 1366 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_OFFSET, query) 1368 == SearchQueryHandler.SUPPORT_OPTIMAL); 1369 query.setOffset(100); 1370 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_OFFSET, query) 1371 == SearchQueryHandler.SUPPORT_NONE); 1372 query.setOffset(0); 1373 assertTrue(instance.getSupportLevel(SearchQueryHandler.FEATURE_OFFSET, query) 1374 == SearchQueryHandler.SUPPORT_OPTIMAL); 1375 } 1376 1377 1378 public void testGetSupportLevel2() throws Exception { 1379 SearchQuery query = new BasicSearchQuery(); 1381 Constraint constraint = new TestConstraint(SearchQueryHandler.SUPPORT_NONE); 1382 assertTrue(instance.getSupportLevel(constraint, query) == SearchQueryHandler.SUPPORT_NONE); 1383 constraint = new TestConstraint(SearchQueryHandler.SUPPORT_WEAK); 1384 assertTrue(instance.getSupportLevel(constraint, query) == SearchQueryHandler.SUPPORT_WEAK); 1385 constraint = new TestConstraint(SearchQueryHandler.SUPPORT_NORMAL); 1386 assertTrue(instance.getSupportLevel(constraint, query) == SearchQueryHandler.SUPPORT_NORMAL); 1387 constraint = new TestConstraint(SearchQueryHandler.SUPPORT_OPTIMAL); 1388 assertTrue(instance.getSupportLevel(constraint, query) == SearchQueryHandler.SUPPORT_OPTIMAL); 1389 } 1390 1391 1392 public void testGetAllowedValue() { 1393 Set entries = disallowedValues.entrySet(); 1394 Iterator iEntries = entries.iterator(); 1395 while (iEntries.hasNext()) { 1396 Map.Entry entry = (Map.Entry) iEntries.next(); 1397 String disallowedValue = (String ) entry.getKey(); 1398 String allowedValue = (String ) entry.getValue(); 1399 1400 assertTrue(instance.getAllowedValue(disallowedValue) + " was expected to equal " + allowedValue, 1402 instance.getAllowedValue(disallowedValue).equalsIgnoreCase(allowedValue)); 1403 1404 assertTrue(instance.getAllowedValue(allowedValue) + " was expected to equal " + allowedValue, 1406 instance.getAllowedValue(allowedValue).equalsIgnoreCase(allowedValue)); 1407 allowedValue += "_must_be_allowed_as_well"; 1408 assertTrue(instance.getAllowedValue(allowedValue).equalsIgnoreCase(allowedValue)); 1409 } 1410 1411 try { 1412 instance.getAllowedValue(null); 1414 fail("Null value, shoul throw IllegalArgumentException."); 1415 } catch (IllegalArgumentException e) {} 1416 } 1417 1418 1419 public void testAppendCompositeConstraintToSql() throws Exception { 1420 BasicSearchQuery query = new BasicSearchQuery(); 1421 StringBuffer sb = new StringBuffer (); 1422 Step step1 = query.addStep(images).setAlias(null); 1423 FieldDefs imagesNumber = images.getField("number"); 1424 StepField field1 = query.addField(step1, imagesNumber); 1425 Step step2 = query.addStep(news).setAlias(null); 1426 FieldDefs newsNumber = news.getField("number"); 1427 StepField field2 = query.addField(step2, newsNumber); 1428 1429 BasicFieldValueConstraint constraint1 1430 = new BasicFieldValueConstraint(field1, new Integer (9876)); 1431 constraint1.setOperator(FieldCompareConstraint.LESS); 1432 constraint1.setOperator(FieldCompareConstraint.GREATER); 1433 constraint1.setInverse(true); 1435 BasicCompareFieldsConstraint constraint2 1436 = new BasicCompareFieldsConstraint(field1, field2); 1437 constraint2.setOperator(FieldCompareConstraint.GREATER); 1438 constraint2.setInverse(true); 1440 BasicCompositeConstraint compositeConstraint = 1442 new BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND); 1443 1444 try { 1445 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1447 query, false, false, instance); 1448 fail("Empty composite constraint, should throw IllegalStateException."); 1449 } catch (IllegalStateException e) {} 1450 1451 sb.setLength(0); 1452 compositeConstraint.addChild(constraint2); instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1454 query, false, false, instance); 1455 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1456 "NOT (IMAGES.NUMBER>NEWS.NUMBER)")); 1457 1458 sb.setLength(0); 1459 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1460 query, true, false, instance); 1461 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1462 "IMAGES.NUMBER>NEWS.NUMBER")); 1463 1464 sb.setLength(0); 1465 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1466 query, true, true, instance); 1467 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1468 "IMAGES.NUMBER>NEWS.NUMBER")); 1469 1470 1471 sb.setLength(0); 1472 compositeConstraint.addChild(constraint1); instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1474 query, false, false, instance); 1475 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1476 "NOT (IMAGES.NUMBER>NEWS.NUMBER) AND NOT (IMAGES.NUMBER>9876)")); 1477 1478 sb.setLength(0); 1479 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1480 query, true, false, instance); 1481 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1482 "IMAGES.NUMBER>NEWS.NUMBER OR IMAGES.NUMBER>9876")); 1483 1484 sb.setLength(0); 1485 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1486 query, true, true, instance); 1487 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1488 "(IMAGES.NUMBER>NEWS.NUMBER OR IMAGES.NUMBER>9876)")); 1489 1490 sb.setLength(0); 1491 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1492 query, false, true, instance); 1493 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1494 "(NOT (IMAGES.NUMBER>NEWS.NUMBER) AND NOT (IMAGES.NUMBER>9876))")); 1495 1496 sb.setLength(0); 1497 constraint1.setInverse(false); instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1499 query, false, false, instance); 1500 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1501 "NOT (IMAGES.NUMBER>NEWS.NUMBER) AND IMAGES.NUMBER>9876")); 1502 1503 sb.setLength(0); 1504 instance.appendCompositeConstraintToSql(sb, compositeConstraint, 1505 query, true, false, instance); 1506 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1507 "IMAGES.NUMBER>NEWS.NUMBER OR NOT (IMAGES.NUMBER>9876)")); 1508 1509 sb.setLength(0); 1511 BasicCompositeConstraint composite2 = 1512 new BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND) 1513 .addChild(compositeConstraint); 1514 instance.appendCompositeConstraintToSql( 1515 sb, composite2, query, false, false, instance); 1516 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1517 "NOT (IMAGES.NUMBER>NEWS.NUMBER) AND IMAGES.NUMBER>9876")); 1518 1519 sb.setLength(0); 1521 composite2.addChild(compositeConstraint); 1522 instance.appendCompositeConstraintToSql( 1523 sb, composite2, query, false, false, instance); 1524 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase( 1525 "(NOT (IMAGES.NUMBER>NEWS.NUMBER) AND IMAGES.NUMBER>9876) AND " 1526 + "(NOT (IMAGES.NUMBER>NEWS.NUMBER) AND IMAGES.NUMBER>9876)")); 1527 } 1528 1529 1530 public void testAppendFieldValue() { 1531 StringBuffer sb = new StringBuffer (); 1532 instance.appendFieldValue(sb, "asd EFG", false, Field.TYPE_STRING); 1533 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("'asd EFG'")); 1534 1535 sb.setLength(0); 1536 instance.appendFieldValue(sb, "asd EFG", true, Field.TYPE_STRING); 1537 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("'asd efg'")); 1538 1539 sb.setLength(0); 1540 instance.appendFieldValue(sb, "asd EFG", false, Field.TYPE_XML); 1541 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("'asd EFG'")); 1542 1543 sb.setLength(0); 1544 instance.appendFieldValue(sb, "asd EFG", true, Field.TYPE_XML); 1545 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("'asd efg'")); 1546 1547 sb.setLength(0); 1548 instance.appendFieldValue(sb, "123.0", true, Field.TYPE_DOUBLE); 1549 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("123.0")); 1550 1551 sb.setLength(0); 1552 instance.appendFieldValue(sb, new Double (123.45), false, 1553 Field.TYPE_DOUBLE); 1554 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("123.45")); 1555 1556 sb.setLength(0); 1557 instance.appendFieldValue(sb, new Double (123.0), false, 1558 Field.TYPE_DOUBLE); 1559 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("123")); 1560 } 1561 1562 public static Test suite() { 1563 TestSuite suite = new TestSuite(BasicSqlHandlerTest.class); 1564 1565 return suite; 1566 } 1567 1568 1569 public void testUseLower() { 1570 assertTrue(instance.useLower(null)); 1572 } 1573 1574 1575 public void testAppendLikeOperator() { 1576 StringBuffer sb = new StringBuffer (); 1578 instance.appendLikeOperator(sb, true); 1579 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase(" LIKE ")); 1580 1581 sb.setLength(0); 1582 instance.appendLikeOperator(sb, false); 1583 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase(" LIKE ")); 1584 } 1585 1586 1587 public void testAppendField() { 1588 BasicSearchQuery query = new BasicSearchQuery(); 1589 BasicStep step = query.addStep(images); 1590 images.getField("number"); 1591 1592 StringBuffer sb = new StringBuffer (); 1593 instance.appendField(sb, step, "number", false); 1594 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("NUMBER")); 1595 1596 sb.setLength(0); 1597 instance.appendField(sb, step, "number", true); 1598 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGES.NUMBER")); 1599 1600 sb.setLength(0); 1601 step.setAlias("IMAGENUMBER"); 1602 instance.appendField(sb, step, "number", true); 1603 assertTrue(sb.toString(), sb.toString().equalsIgnoreCase("IMAGENUMBER.NUMBER")); 1604 } 1605 1606} 1607 | Popular Tags |