15
15
*/
16
16
package org .mybatis .dynamic .sql .select .render ;
17
17
18
+ import java .util .Objects ;
18
19
import java .util .concurrent .atomic .AtomicInteger ;
19
20
import java .util .stream .Collectors ;
20
21
import java .util .stream .Stream ;
27
28
import org .mybatis .dynamic .sql .select .SelectModel ;
28
29
import org .mybatis .dynamic .sql .select .join .JoinModel ;
29
30
import org .mybatis .dynamic .sql .util .CustomCollectors ;
31
+ import org .mybatis .dynamic .sql .where .WhereModel ;
30
32
import org .mybatis .dynamic .sql .where .render .WhereRenderer ;
31
33
import org .mybatis .dynamic .sql .where .render .WhereSupport ;
32
34
33
35
public class SelectRenderer {
34
36
private SelectModel selectModel ;
35
37
36
38
private SelectRenderer (SelectModel selectModel ) {
37
- this .selectModel = selectModel ;
39
+ this .selectModel = Objects . requireNonNull ( selectModel ) ;
38
40
}
39
41
40
42
public SelectSupport render (RenderingStrategy renderingStrategy ) {
@@ -45,32 +47,24 @@ public SelectSupport render(RenderingStrategy renderingStrategy, AtomicInteger s
45
47
SelectSupport .Builder builder = new SelectSupport .Builder ()
46
48
.isDistinct (selectModel .isDistinct ())
47
49
.withColumnList (calculateColumnList ())
48
- .withTableName (calculateTableName (selectModel .table ()))
49
- .withJoinClause (calculateJoinClause ())
50
- .withOrderByClause (calculateOrderByPhrase ());
50
+ .withTableName (calculateTableName (selectModel .table ()));
51
51
52
- selectModel .whereModel ().ifPresent (wm -> {
53
- WhereSupport whereSupport = new WhereRenderer .Builder (wm , renderingStrategy , selectModel .tableAliases ())
54
- .withSequence (sequence )
55
- .build ()
56
- .render ();
57
-
58
- builder .withWhereClause (whereSupport .getWhereClause ())
59
- .withParameters (whereSupport .getParameters ());
60
- });
52
+ selectModel .joinModel ().ifPresent (jm -> applyJoin (builder , jm ));
53
+ selectModel .whereModel ().ifPresent (wm -> applyWhere (builder , wm , renderingStrategy , sequence ));
54
+ selectModel .orderByColumns ().ifPresent (cs -> applyOrderBy (builder , cs ));
61
55
62
56
return builder .build ();
63
57
}
64
58
65
- private String calculateTableName (SqlTable table ) {
66
- return RenderingUtilities .tableNameIncludingAlias (table , selectModel .tableAliases ());
67
- }
68
-
69
59
private String calculateColumnList () {
70
60
return selectModel .columns ()
71
61
.map (this ::nameIncludingTableAndColumnAlias )
72
62
.collect (Collectors .joining (", " )); //$NON-NLS-1$
73
63
}
64
+
65
+ private String calculateTableName (SqlTable table ) {
66
+ return RenderingUtilities .tableNameIncludingAlias (table , selectModel .tableAliases ());
67
+ }
74
68
75
69
private String nameIncludingTableAndColumnAlias (SelectListItem selectListItem ) {
76
70
StringBuilder buffer = new StringBuilder (calculateColumnNameAndTableAlias (selectListItem ));
@@ -86,26 +80,29 @@ private String calculateColumnNameAndTableAlias(SelectListItem selectListItem) {
86
80
return selectListItem .nameIncludingTableAlias (selectModel .tableAlias (selectListItem .table ()));
87
81
}
88
82
89
- private String calculateJoinClause () {
90
- return selectModel .joinModel ()
91
- .map (this ::calculateJoinClause )
92
- .orElse (null );
93
- }
94
-
95
- private String calculateJoinClause (JoinModel joinModel ) {
96
- return JoinRenderer .of (joinModel , selectModel .tableAliases ())
83
+ private void applyJoin (SelectSupport .Builder builder , JoinModel joinModel ) {
84
+ String joinClause = JoinRenderer .of (joinModel , selectModel .tableAliases ())
97
85
.render ();
86
+
87
+ builder .withJoinClause (joinClause );
98
88
}
99
89
100
- private String calculateOrderByPhrase () {
101
- return selectModel .orderByColumns ()
102
- .map (this ::calculateOrderByPhrase )
103
- .orElse (null );
90
+ private void applyWhere (SelectSupport .Builder builder , WhereModel whereModel , RenderingStrategy renderingStrategy ,
91
+ AtomicInteger sequence ) {
92
+ WhereSupport whereSupport = new WhereRenderer .Builder (whereModel , renderingStrategy , selectModel .tableAliases ())
93
+ .withSequence (sequence )
94
+ .build ()
95
+ .render ();
96
+
97
+ builder .withWhereClause (whereSupport .getWhereClause ());
98
+ builder .withParameters (whereSupport .getParameters ());
104
99
}
105
100
106
- private String calculateOrderByPhrase ( Stream <SqlColumn <?>> columns ) {
107
- return columns .map (this ::orderByPhrase )
101
+ private void applyOrderBy ( SelectSupport . Builder builder , Stream <SqlColumn <?>> columns ) {
102
+ String orderByClause = columns .map (this ::orderByPhrase )
108
103
.collect (CustomCollectors .joining (", " , "order by " , "" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
104
+
105
+ builder .withOrderByClause (orderByClause );
109
106
}
110
107
111
108
private String orderByPhrase (SqlColumn <?> column ) {
0 commit comments