@@ -57,20 +57,28 @@ public class Criteria {
57
57
private final @ Nullable SqlIdentifier column ;
58
58
private final @ Nullable Comparator comparator ;
59
59
private final @ Nullable Object value ;
60
+ private final boolean ignoreCase ;
60
61
61
62
private Criteria (SqlIdentifier column , Comparator comparator , @ Nullable Object value ) {
62
- this (null , Combinator .INITIAL , Collections .emptyList (), column , comparator , value );
63
+ this (null , Combinator .INITIAL , Collections .emptyList (), column , comparator , value , false );
63
64
}
64
65
65
66
private Criteria (@ Nullable Criteria previous , Combinator combinator , List <Criteria > group ,
66
67
@ Nullable SqlIdentifier column , @ Nullable Comparator comparator , @ Nullable Object value ) {
68
+ this (previous , combinator , group , column , comparator , value , false );
69
+ }
70
+
71
+ private Criteria (@ Nullable Criteria previous , Combinator combinator , List <Criteria > group ,
72
+ @ Nullable SqlIdentifier column , @ Nullable Comparator comparator , @ Nullable Object value ,
73
+ boolean ignoreCase ) {
67
74
68
75
this .previous = previous ;
69
76
this .combinator = previous != null && previous .isEmpty () ? Combinator .INITIAL : combinator ;
70
77
this .group = group ;
71
78
this .column = column ;
72
79
this .comparator = comparator ;
73
80
this .value = value ;
81
+ this .ignoreCase = ignoreCase ;
74
82
}
75
83
76
84
private Criteria (@ Nullable Criteria previous , Combinator combinator , List <Criteria > group ) {
@@ -81,6 +89,7 @@ private Criteria(@Nullable Criteria previous, Combinator combinator, List<Criter
81
89
this .column = null ;
82
90
this .comparator = null ;
83
91
this .value = null ;
92
+ this .ignoreCase = false ;
84
93
}
85
94
86
95
/**
@@ -236,6 +245,19 @@ public Criteria or(List<Criteria> criteria) {
236
245
return new Criteria (Criteria .this , Combinator .OR , criteria );
237
246
}
238
247
248
+ /**
249
+ * Creates a new {@link Criteria} with the given "ignore case" flag.
250
+ *
251
+ * @param ignoreCase {@literal true} if comparison should be done in case-insensitive way
252
+ * @return a new {@link Criteria} object
253
+ */
254
+ public Criteria ignoreCase (boolean ignoreCase ) {
255
+ if (this .ignoreCase != ignoreCase ) {
256
+ return new Criteria (previous , combinator , group , column , comparator , value , ignoreCase );
257
+ }
258
+ return this ;
259
+ }
260
+
239
261
/**
240
262
* @return the previous {@link Criteria} object. Can be {@literal null} if there is no previous {@link Criteria}.
241
263
* @see #hasPrevious()
@@ -338,8 +360,17 @@ Object getValue() {
338
360
return value ;
339
361
}
340
362
363
+ /**
364
+ * Checks whether comparison should be done in case-insensitive way.
365
+ *
366
+ * @return {@literal true} if comparison should be done in case-insensitive way
367
+ */
368
+ boolean isIgnoreCase () {
369
+ return ignoreCase ;
370
+ }
371
+
341
372
enum Comparator {
342
- INITIAL , EQ , NEQ , LT , LTE , GT , GTE , IS_NULL , IS_NOT_NULL , LIKE , NOT_IN , IN ,
373
+ INITIAL , EQ , NEQ , LT , LTE , GT , GTE , IS_NULL , IS_NOT_NULL , LIKE , NOT_LIKE , NOT_IN , IN , IS_TRUE , IS_FALSE
343
374
}
344
375
345
376
enum Combinator {
@@ -428,6 +459,14 @@ public interface CriteriaStep {
428
459
*/
429
460
Criteria like (Object value );
430
461
462
+ /**
463
+ * Creates a {@link Criteria} using {@code NOT LIKE}.
464
+ *
465
+ * @param value must not be {@literal null}
466
+ * @return a new {@link Criteria} object
467
+ */
468
+ Criteria notLike (Object value );
469
+
431
470
/**
432
471
* Creates a {@link Criteria} using {@code IS NULL}.
433
472
*/
@@ -437,6 +476,20 @@ public interface CriteriaStep {
437
476
* Creates a {@link Criteria} using {@code IS NOT NULL}.
438
477
*/
439
478
Criteria isNotNull ();
479
+
480
+ /**
481
+ * Creates a {@link Criteria} using {@code IS TRUE}.
482
+ *
483
+ * @return a new {@link Criteria} object
484
+ */
485
+ Criteria isTrue ();
486
+
487
+ /**
488
+ * Creates a {@link Criteria} using {@code IS FALSE}.
489
+ *
490
+ * @return a new {@link Criteria} object
491
+ */
492
+ Criteria isFalse ();
440
493
}
441
494
442
495
/**
@@ -596,6 +649,16 @@ public Criteria like(Object value) {
596
649
return createCriteria (Comparator .LIKE , value );
597
650
}
598
651
652
+ /*
653
+ * (non-Javadoc)
654
+ * @see org.springframework.data.r2dbc.function.query.Criteria.CriteriaStep#notLike(java.lang.Object)
655
+ */
656
+ @ Override
657
+ public Criteria notLike (Object value ) {
658
+ Assert .notNull (value , "Value must not be null!" );
659
+ return createCriteria (Comparator .NOT_LIKE , value );
660
+ }
661
+
599
662
/*
600
663
* (non-Javadoc)
601
664
* @see org.springframework.data.r2dbc.function.query.Criteria.CriteriaStep#isNull()
@@ -614,6 +677,24 @@ public Criteria isNotNull() {
614
677
return createCriteria (Comparator .IS_NOT_NULL , null );
615
678
}
616
679
680
+ /*
681
+ * (non-Javadoc)
682
+ * @see org.springframework.data.r2dbc.function.query.Criteria.CriteriaStep#isTrue()
683
+ */
684
+ @ Override
685
+ public Criteria isTrue () {
686
+ return createCriteria (Comparator .IS_TRUE , null );
687
+ }
688
+
689
+ /*
690
+ * (non-Javadoc)
691
+ * @see org.springframework.data.r2dbc.function.query.Criteria.CriteriaStep#isFalse()
692
+ */
693
+ @ Override
694
+ public Criteria isFalse () {
695
+ return createCriteria (Comparator .IS_FALSE , null );
696
+ }
697
+
617
698
protected Criteria createCriteria (Comparator comparator , Object value ) {
618
699
return new Criteria (this .property , comparator , value );
619
700
}
0 commit comments