@@ -437,6 +437,54 @@ public void shouldReplaceParametersInInQuotedExpressionOfNestedQueryOperator() t
437
437
assertThat (query .getQueryObject (), is ((DBObject ) new BasicDBObject ("lastname" , Pattern .compile ("^(calamity)" ))));
438
438
}
439
439
440
+ @ Test // DATAMONGO-1603
441
+ public void shouldAllowReuseOfPlaceholderWithinQuery () throws Exception {
442
+
443
+ StringBasedMongoQuery mongoQuery = createQueryForMethod ("findByReusingPlaceholdersMultipleTimes" , String .class ,
444
+ String .class );
445
+ ConvertingParameterAccessor accessor = StubParameterAccessor .getAccessor (converter , "calamity" , "regalia" );
446
+
447
+ org .springframework .data .mongodb .core .query .Query query = mongoQuery .createQuery (accessor );
448
+ assertThat (query .getQueryObject (), is ((DBObject ) new BasicDBObject ().append ("arg0" , "calamity" )
449
+ .append ("arg1" , "regalia" ).append ("arg2" , "calamity" )));
450
+ }
451
+
452
+ @ Test // DATAMONGO-1603
453
+ public void shouldAllowReuseOfQuotedPlaceholderWithinQuery () throws Exception {
454
+
455
+ StringBasedMongoQuery mongoQuery = createQueryForMethod ("findByReusingPlaceholdersMultipleTimesWhenQuoted" ,
456
+ String .class , String .class );
457
+ ConvertingParameterAccessor accessor = StubParameterAccessor .getAccessor (converter , "calamity" , "regalia" );
458
+
459
+ org .springframework .data .mongodb .core .query .Query query = mongoQuery .createQuery (accessor );
460
+ assertThat (query .getQueryObject (), is ((DBObject ) new BasicDBObject ().append ("arg0" , "calamity" )
461
+ .append ("arg1" , "regalia" ).append ("arg2" , "calamity" )));
462
+ }
463
+
464
+ @ Test // DATAMONGO-1603
465
+ public void shouldAllowReuseOfQuotedPlaceholderWithinQueryAndIncludeSuffixCorrectly () throws Exception {
466
+
467
+ StringBasedMongoQuery mongoQuery = createQueryForMethod (
468
+ "findByReusingPlaceholdersMultipleTimesWhenQuotedAndSomeStuffAppended" , String .class , String .class );
469
+ ConvertingParameterAccessor accessor = StubParameterAccessor .getAccessor (converter , "calamity" , "regalia" );
470
+
471
+ org .springframework .data .mongodb .core .query .Query query = mongoQuery .createQuery (accessor );
472
+ assertThat (query .getQueryObject (), is ((DBObject ) new BasicDBObject ().append ("arg0" , "calamity" )
473
+ .append ("arg1" , "regalia" ).append ("arg2" , "calamitys" )));
474
+ }
475
+
476
+ @ Test // DATAMONGO-1603
477
+ public void shouldAllowQuotedParameterWithSuffixAppended () throws Exception {
478
+
479
+ StringBasedMongoQuery mongoQuery = createQueryForMethod ("findByWhenQuotedAndSomeStuffAppended" , String .class ,
480
+ String .class );
481
+ ConvertingParameterAccessor accessor = StubParameterAccessor .getAccessor (converter , "calamity" , "regalia" );
482
+
483
+ org .springframework .data .mongodb .core .query .Query query = mongoQuery .createQuery (accessor );
484
+ assertThat (query .getQueryObject (),
485
+ is ((DBObject ) new BasicDBObject ().append ("arg0" , "calamity" ).append ("arg1" , "regalias" )));
486
+ }
487
+
440
488
private StringBasedMongoQuery createQueryForMethod (String name , Class <?>... parameters ) throws Exception {
441
489
442
490
Method method = SampleRepository .class .getMethod (name , parameters );
@@ -510,5 +558,17 @@ private interface SampleRepository extends Repository<Person, Long> {
510
558
511
559
@ Query ("{ 'arg0' : ?0 }" )
512
560
List <Person > findByWithBsonArgument (DBObject arg0 );
561
+
562
+ @ Query ("{ 'arg0' : ?0, 'arg1' : ?1, 'arg2' : ?0 }" )
563
+ List <Person > findByReusingPlaceholdersMultipleTimes (String arg0 , String arg1 );
564
+
565
+ @ Query ("{ 'arg0' : ?0, 'arg1' : ?1, 'arg2' : '?0' }" )
566
+ List <Person > findByReusingPlaceholdersMultipleTimesWhenQuoted (String arg0 , String arg1 );
567
+
568
+ @ Query ("{ 'arg0' : '?0', 'arg1' : ?1, 'arg2' : '?0s' }" )
569
+ List <Person > findByReusingPlaceholdersMultipleTimesWhenQuotedAndSomeStuffAppended (String arg0 , String arg1 );
570
+
571
+ @ Query ("{ 'arg0' : '?0', 'arg1' : '?1s' }" )
572
+ List <Person > findByWhenQuotedAndSomeStuffAppended (String arg0 , String arg1 );
513
573
}
514
574
}
0 commit comments