56
56
import org .springframework .data .r2dbc .domain .SettableValue ;
57
57
import org .springframework .data .r2dbc .function .connectionfactory .ConnectionProxy ;
58
58
import org .springframework .data .r2dbc .function .convert .ColumnMapRowMapper ;
59
+ import org .springframework .data .r2dbc .function .query .Criteria ;
59
60
import org .springframework .data .r2dbc .support .R2dbcExceptionTranslator ;
60
61
import org .springframework .data .relational .core .sql .Insert ;
61
62
import org .springframework .lang .Nullable ;
@@ -619,6 +620,7 @@ private abstract class DefaultSelectSpecSupport {
619
620
620
621
final String table ;
621
622
final List <String > projectedFields ;
623
+ final @ Nullable Criteria criteria ;
622
624
final Sort sort ;
623
625
final Pageable page ;
624
626
@@ -628,6 +630,7 @@ private abstract class DefaultSelectSpecSupport {
628
630
629
631
this .table = table ;
630
632
this .projectedFields = Collections .emptyList ();
633
+ this .criteria = null ;
631
634
this .sort = Sort .unsorted ();
632
635
this .page = Pageable .unpaged ();
633
636
}
@@ -639,21 +642,28 @@ public DefaultSelectSpecSupport project(String... selectedFields) {
639
642
projectedFields .addAll (this .projectedFields );
640
643
projectedFields .addAll (Arrays .asList (selectedFields ));
641
644
642
- return createInstance (table , projectedFields , sort , page );
645
+ return createInstance (table , projectedFields , criteria , sort , page );
646
+ }
647
+
648
+ public DefaultSelectSpecSupport where (Criteria whereCriteria ) {
649
+
650
+ Assert .notNull (whereCriteria , "Criteria must not be null!" );
651
+
652
+ return createInstance (table , projectedFields , whereCriteria , sort , page );
643
653
}
644
654
645
655
public DefaultSelectSpecSupport orderBy (Sort sort ) {
646
656
647
657
Assert .notNull (sort , "Sort must not be null!" );
648
658
649
- return createInstance (table , projectedFields , sort , page );
659
+ return createInstance (table , projectedFields , criteria , sort , page );
650
660
}
651
661
652
662
public DefaultSelectSpecSupport page (Pageable page ) {
653
663
654
664
Assert .notNull (page , "Pageable must not be null!" );
655
665
656
- return createInstance (table , projectedFields , sort , page );
666
+ return createInstance (table , projectedFields , criteria , sort , page );
657
667
}
658
668
659
669
<R > FetchSpec <R > execute (String sql , BiFunction <Row , RowMetadata , R > mappingFunction ) {
@@ -676,14 +686,14 @@ <R> FetchSpec<R> execute(String sql, BiFunction<Row, RowMetadata, R> mappingFunc
676
686
mappingFunction );
677
687
}
678
688
679
- protected abstract DefaultSelectSpecSupport createInstance (String table , List <String > projectedFields , Sort sort ,
680
- Pageable page );
689
+ protected abstract DefaultSelectSpecSupport createInstance (String table , List <String > projectedFields ,
690
+ Criteria criteria , Sort sort , Pageable page );
681
691
}
682
692
683
693
private class DefaultGenericSelectSpec extends DefaultSelectSpecSupport implements GenericSelectSpec {
684
694
685
- DefaultGenericSelectSpec (String table , List <String > projectedFields , Sort sort , Pageable page ) {
686
- super (table , projectedFields , sort , page );
695
+ DefaultGenericSelectSpec (String table , List <String > projectedFields , Criteria criteria , Sort sort , Pageable page ) {
696
+ super (table , projectedFields , criteria , sort , page );
687
697
}
688
698
689
699
DefaultGenericSelectSpec (String table ) {
@@ -695,7 +705,7 @@ public <R> TypedSelectSpec<R> as(Class<R> resultType) {
695
705
696
706
Assert .notNull (resultType , "Result type must not be null!" );
697
707
698
- return new DefaultTypedSelectSpec <>(table , projectedFields , sort , page , resultType ,
708
+ return new DefaultTypedSelectSpec <>(table , projectedFields , criteria , sort , page , resultType ,
699
709
dataAccessStrategy .getRowMapper (resultType ));
700
710
}
701
711
@@ -712,6 +722,11 @@ public DefaultGenericSelectSpec project(String... selectedFields) {
712
722
return (DefaultGenericSelectSpec ) super .project (selectedFields );
713
723
}
714
724
725
+ @ Override
726
+ public DefaultGenericSelectSpec where (Criteria criteria ) {
727
+ return (DefaultGenericSelectSpec ) super .where (criteria );
728
+ }
729
+
715
730
@ Override
716
731
public DefaultGenericSelectSpec orderBy (Sort sort ) {
717
732
return (DefaultGenericSelectSpec ) super .orderBy (sort );
@@ -735,9 +750,9 @@ private <R> FetchSpec<R> exchange(BiFunction<Row, RowMetadata, R> mappingFunctio
735
750
}
736
751
737
752
@ Override
738
- protected DefaultGenericSelectSpec createInstance (String table , List <String > projectedFields , Sort sort ,
739
- Pageable page ) {
740
- return new DefaultGenericSelectSpec (table , projectedFields , sort , page );
753
+ protected DefaultGenericSelectSpec createInstance (String table , List <String > projectedFields , Criteria criteria ,
754
+ Sort sort , Pageable page ) {
755
+ return new DefaultGenericSelectSpec (table , projectedFields , criteria , sort , page );
741
756
}
742
757
}
743
758
@@ -758,14 +773,14 @@ private class DefaultTypedSelectSpec<T> extends DefaultSelectSpecSupport impleme
758
773
this .mappingFunction = dataAccessStrategy .getRowMapper (typeToRead );
759
774
}
760
775
761
- DefaultTypedSelectSpec (String table , List <String > projectedFields , Sort sort , Pageable page ,
776
+ DefaultTypedSelectSpec (String table , List <String > projectedFields , Criteria criteria , Sort sort , Pageable page ,
762
777
BiFunction <Row , RowMetadata , T > mappingFunction ) {
763
- this (table , projectedFields , sort , page , null , mappingFunction );
778
+ this (table , projectedFields , criteria , sort , page , null , mappingFunction );
764
779
}
765
780
766
- DefaultTypedSelectSpec (String table , List <String > projectedFields , Sort sort , Pageable page , Class < T > typeToRead ,
767
- BiFunction <Row , RowMetadata , T > mappingFunction ) {
768
- super (table , projectedFields , sort , page );
781
+ DefaultTypedSelectSpec (String table , List <String > projectedFields , Criteria criteria , Sort sort , Pageable page ,
782
+ Class < T > typeToRead , BiFunction <Row , RowMetadata , T > mappingFunction ) {
783
+ super (table , projectedFields , criteria , sort , page );
769
784
this .typeToRead = typeToRead ;
770
785
this .mappingFunction = mappingFunction ;
771
786
}
@@ -791,6 +806,11 @@ public DefaultTypedSelectSpec<T> project(String... selectedFields) {
791
806
return (DefaultTypedSelectSpec <T >) super .project (selectedFields );
792
807
}
793
808
809
+ @ Override
810
+ public DefaultTypedSelectSpec <T > where (Criteria criteria ) {
811
+ return (DefaultTypedSelectSpec <T >) super .where (criteria );
812
+ }
813
+
794
814
@ Override
795
815
public DefaultTypedSelectSpec <T > orderBy (Sort sort ) {
796
816
return (DefaultTypedSelectSpec <T >) super .orderBy (sort );
@@ -822,9 +842,9 @@ private <R> FetchSpec<R> exchange(BiFunction<Row, RowMetadata, R> mappingFunctio
822
842
}
823
843
824
844
@ Override
825
- protected DefaultTypedSelectSpec <T > createInstance (String table , List <String > projectedFields , Sort sort ,
826
- Pageable page ) {
827
- return new DefaultTypedSelectSpec <>(table , projectedFields , sort , page , typeToRead , mappingFunction );
845
+ protected DefaultTypedSelectSpec <T > createInstance (String table , List <String > projectedFields , Criteria criteria ,
846
+ Sort sort , Pageable page ) {
847
+ return new DefaultTypedSelectSpec <>(table , projectedFields , criteria , sort , page , typeToRead , mappingFunction );
828
848
}
829
849
}
830
850
0 commit comments