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