1515 */ 
1616package  org .mybatis .dynamic .sql .select .render ;
1717
18- import  java .util .Objects ;
19- 
20- import  org .mybatis .dynamic .sql .render .RendererFactory ;
18+ import  org .mybatis .dynamic .sql .common .OrderByModel ;
19+ import  org .mybatis .dynamic .sql .common .OrderByRenderer ;
2120import  org .mybatis .dynamic .sql .render .RenderingContext ;
22- import  org .mybatis .dynamic .sql .render .RenderingStrategy ;
21+ import  org .mybatis .dynamic .sql .select .PagingModel ;
22+ import  org .mybatis .dynamic .sql .select .QueryExpressionModel ;
2323import  org .mybatis .dynamic .sql .select .SelectModel ;
2424import  org .mybatis .dynamic .sql .util .FragmentAndParameters ;
25+ import  org .mybatis .dynamic .sql .util .FragmentCollector ;
26+ 
27+ import  java .util .Objects ;
28+ import  java .util .Optional ;
29+ import  java .util .stream .Collectors ;
2530
2631public  class  SelectRenderer  {
2732    private  final  SelectModel  selectModel ;
2833    private  final  RenderingContext  renderingContext ;
2934
3035    private  SelectRenderer (Builder  builder ) {
3136        selectModel  = Objects .requireNonNull (builder .selectModel );
32-         renderingContext  = RenderingContext .withRenderingStrategy (builder .renderingStrategy )
33-                 .withStatementConfiguration (selectModel .statementConfiguration ())
34-                 .build ();
37+         renderingContext  = Objects .requireNonNull (builder .renderingContext );
38+     }
39+ 
40+     public  FragmentAndParameters  render (String  prefix , String  suffix ) {
41+         FragmentCollector  fragmentCollector  = selectModel 
42+                 .queryExpressions ()
43+                 .map (this ::renderQueryExpression )
44+                 .collect (FragmentCollector .collect ());
45+ 
46+         renderOrderBy ().ifPresent (fragmentCollector ::add );
47+         renderPagingModel ().ifPresent (fragmentCollector ::add );
48+ 
49+         return  fragmentCollector .toFragmentAndParameters (Collectors .joining (" " , prefix , suffix )); //$NON-NLS-1$ 
50+     }
51+ 
52+     private  FragmentAndParameters  renderQueryExpression (QueryExpressionModel  queryExpressionModel ) {
53+         return  QueryExpressionRenderer .withQueryExpression (queryExpressionModel )
54+                 .withRenderingContext (renderingContext )
55+                 .build ()
56+                 .render ();
57+     }
58+ 
59+     private  Optional <FragmentAndParameters > renderOrderBy () {
60+         return  selectModel .orderByModel ().map (this ::renderOrderBy );
61+     }
62+ 
63+     private  FragmentAndParameters  renderOrderBy (OrderByModel  orderByModel ) {
64+         return  new  OrderByRenderer (renderingContext ).render (orderByModel );
65+     }
66+ 
67+     private  Optional <FragmentAndParameters > renderPagingModel () {
68+         return  selectModel .pagingModel ().map (this ::renderPagingModel );
3569    }
3670
37-     public   SelectStatementProvider   render ( ) {
38-         FragmentAndParameters   fragmentAndParameters  =  RendererFactory . createSubQueryRenderer ( selectModel )
39-                 .render ( renderingContext ); 
40-         return   DefaultSelectStatementProvider . withSelectStatement ( fragmentAndParameters . fragment () )
41-                 .withParameters ( fragmentAndParameters . parameters () )
42-                 .build ();
71+     private   FragmentAndParameters   renderPagingModel ( PagingModel   pagingModel ) {
72+         return   new   PagingModelRenderer . Builder ( )
73+                 .withPagingModel ( pagingModel ) 
74+                 . withRenderingContext ( renderingContext )
75+                 .build ( )
76+                 .render ();
4377    }
4478
4579    public  static  Builder  withSelectModel (SelectModel  selectModel ) {
@@ -48,10 +82,10 @@ public static Builder withSelectModel(SelectModel selectModel) {
4882
4983    public  static  class  Builder  {
5084        private  SelectModel  selectModel ;
51-         private  RenderingStrategy   renderingStrategy ;
85+         private  RenderingContext   renderingContext ;
5286
53-         public  Builder  withRenderingStrategy ( RenderingStrategy   renderingStrategy ) {
54-             this .renderingStrategy  = renderingStrategy ;
87+         public  Builder  withRenderingContext ( RenderingContext   renderingContext ) {
88+             this .renderingContext  = renderingContext ;
5589            return  this ;
5690        }
5791
0 commit comments