15
15
*/
16
16
package org .mybatis .dynamic .sql .insert .render ;
17
17
18
- import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
18
+ import static org .mybatis .dynamic .sql .util .StringUtilities .spaceAfter ;
19
19
20
20
import java .util .Objects ;
21
- import java .util .Optional ;
22
21
import java .util .stream .Collectors ;
23
22
24
23
import org .mybatis .dynamic .sql .SqlColumn ;
25
- import org .mybatis .dynamic .sql .configuration .StatementConfiguration ;
26
24
import org .mybatis .dynamic .sql .insert .InsertColumnListModel ;
27
25
import org .mybatis .dynamic .sql .insert .InsertSelectModel ;
28
26
import org .mybatis .dynamic .sql .render .RenderingContext ;
29
27
import org .mybatis .dynamic .sql .render .RenderingStrategy ;
30
- import org .mybatis .dynamic .sql .select .render .SelectStatementProvider ;
31
- import org .mybatis .dynamic .sql .util .StringUtilities ;
28
+ import org .mybatis .dynamic .sql .select .render .SubQueryRenderer ;
29
+ import org .mybatis .dynamic .sql .util .FragmentAndParameters ;
32
30
33
31
public class InsertSelectRenderer {
34
32
@@ -38,34 +36,34 @@ public class InsertSelectRenderer {
38
36
private InsertSelectRenderer (Builder builder ) {
39
37
model = Objects .requireNonNull (builder .model );
40
38
renderingContext = RenderingContext .withRenderingStrategy (builder .renderingStrategy )
41
- .withStatementConfiguration (builder .statementConfiguration )
39
+ .withStatementConfiguration (model .statementConfiguration () )
42
40
.build ();
43
41
}
44
42
45
43
public InsertSelectStatementProvider render () {
46
- SelectStatementProvider selectStatement = model .selectModel ().render (renderingContext );
47
-
48
44
String statementStart = InsertRenderingUtilities .calculateInsertStatementStart (model .table ());
49
- Optional < String > columnsPhrase = calculateColumnsPhrase ();
50
- String renderedSelectStatement = selectStatement . getSelectStatement ( );
45
+ String columnsPhrase = calculateColumnsPhrase ();
46
+ String prefix = statementStart + spaceAfter ( columnsPhrase );
51
47
52
- String insertStatement = statementStart
53
- + columnsPhrase .map (StringUtilities ::spaceBefore ).orElse ("" ) //$NON-NLS-1$
54
- + spaceBefore (renderedSelectStatement );
48
+ FragmentAndParameters fragmentAndParameters = SubQueryRenderer .withSelectModel (model .selectModel ())
49
+ .withRenderingContext (renderingContext )
50
+ .withPrefix (prefix )
51
+ .build ()
52
+ .render ();
55
53
56
- return DefaultGeneralInsertStatementProvider .withInsertStatement (insertStatement )
57
- .withParameters (selectStatement . getParameters ())
54
+ return DefaultGeneralInsertStatementProvider .withInsertStatement (fragmentAndParameters . fragment () )
55
+ .withParameters (fragmentAndParameters . parameters ())
58
56
.build ();
59
57
}
60
58
61
- private Optional < String > calculateColumnsPhrase () {
62
- return model .columnList ().map (this ::calculateColumnsPhrase );
59
+ private String calculateColumnsPhrase () {
60
+ return model .columnList ().map (this ::calculateColumnsPhrase ). orElse ( "" ); //$NON-NLS-1$
63
61
}
64
62
65
63
private String calculateColumnsPhrase (InsertColumnListModel columnList ) {
66
64
return columnList .columns ()
67
65
.map (SqlColumn ::name )
68
- .collect (Collectors .joining (", " , "(" , ")" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
66
+ .collect (Collectors .joining (", " , " (" , ")" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
69
67
}
70
68
71
69
public static Builder withInsertSelectModel (InsertSelectModel model ) {
@@ -75,7 +73,6 @@ public static Builder withInsertSelectModel(InsertSelectModel model) {
75
73
public static class Builder {
76
74
private InsertSelectModel model ;
77
75
private RenderingStrategy renderingStrategy ;
78
- private StatementConfiguration statementConfiguration ;
79
76
80
77
public Builder withInsertSelectModel (InsertSelectModel model ) {
81
78
this .model = model ;
@@ -87,11 +84,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
87
84
return this ;
88
85
}
89
86
90
- public Builder withStatementConfiguration (StatementConfiguration statementConfiguration ) {
91
- this .statementConfiguration = statementConfiguration ;
92
- return this ;
93
- }
94
-
95
87
public InsertSelectRenderer build () {
96
88
return new InsertSelectRenderer (this );
97
89
}
0 commit comments