17
17
18
18
import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
19
19
20
+ import java .util .HashMap ;
21
+ import java .util .List ;
22
+ import java .util .Map ;
20
23
import java .util .Objects ;
21
24
import java .util .Optional ;
22
25
import java .util .concurrent .atomic .AtomicInteger ;
@@ -43,50 +46,59 @@ private UpdateRenderer(Builder builder) {
43
46
}
44
47
45
48
public UpdateStatementProvider render () {
46
- OptionalFragmentCollector fc = calculateColumnMappings ();
49
+ SetPhraseVisitor visitor = new SetPhraseVisitor (sequence , renderingStrategy );
50
+
51
+ List <Optional <FragmentAndParameters >> fragmentsAndParameters =
52
+ updateModel .mapColumnMappings (toFragmentAndParameters (visitor ))
53
+ .collect (Collectors .toList ());
47
54
48
55
return updateModel .whereModel ()
49
56
.flatMap (this ::renderWhereClause )
50
- .map (wc -> renderWithWhereClause (fc , wc ))
51
- .orElseGet (() -> renderWithoutWhereClause (fc ));
57
+ .map (wc -> renderWithWhereClause (fragmentsAndParameters , wc ))
58
+ .orElseGet (() -> renderWithoutWhereClause (fragmentsAndParameters ));
52
59
}
53
60
54
- private OptionalFragmentCollector calculateColumnMappings () {
55
- SetPhraseVisitor visitor = new SetPhraseVisitor (sequence , renderingStrategy );
56
-
57
- return updateModel .mapColumnMappings (toFragmentAndParameters (visitor ))
58
- .collect (OptionalFragmentCollector .collect ());
59
- }
60
-
61
- private UpdateStatementProvider renderWithWhereClause (OptionalFragmentCollector columnMappings ,
61
+ private UpdateStatementProvider renderWithWhereClause (List <Optional <FragmentAndParameters >> fragmentsAndParameters ,
62
62
WhereClauseProvider whereClause ) {
63
- return DefaultUpdateStatementProvider .withUpdateStatement (calculateUpdateStatement (columnMappings , whereClause ))
64
- .withParameters (columnMappings . parameters ( ))
63
+ return DefaultUpdateStatementProvider .withUpdateStatement (calculateUpdateStatement (fragmentsAndParameters , whereClause ))
64
+ .withParameters (calculateParameters ( fragmentsAndParameters ))
65
65
.withParameters (whereClause .getParameters ())
66
66
.build ();
67
67
}
68
68
69
- private String calculateUpdateStatement (OptionalFragmentCollector fc , WhereClauseProvider whereClause ) {
70
- return calculateUpdateStatement (fc )
69
+ private String calculateUpdateStatement (List <Optional <FragmentAndParameters >> fragmentsAndParameters ,
70
+ WhereClauseProvider whereClause ) {
71
+ return calculateUpdateStatement (fragmentsAndParameters )
71
72
+ spaceBefore (whereClause .getWhereClause ());
72
73
}
73
74
74
- private String calculateUpdateStatement (OptionalFragmentCollector fc ) {
75
+ private String calculateUpdateStatement (List < Optional < FragmentAndParameters >> fragmentsAndParameters ) {
75
76
return "update" //$NON-NLS-1$
76
77
+ spaceBefore (updateModel .table ().tableNameAtRuntime ())
77
- + spaceBefore (calculateSetPhrase (fc ));
78
+ + spaceBefore (calculateSetPhrase (fragmentsAndParameters ));
78
79
}
79
80
80
- private UpdateStatementProvider renderWithoutWhereClause (OptionalFragmentCollector columnMappings ) {
81
- return DefaultUpdateStatementProvider .withUpdateStatement (calculateUpdateStatement (columnMappings ))
82
- .withParameters (columnMappings . parameters ( ))
81
+ private UpdateStatementProvider renderWithoutWhereClause (List < Optional < FragmentAndParameters >> fragmentsAndParameters ) {
82
+ return DefaultUpdateStatementProvider .withUpdateStatement (calculateUpdateStatement (fragmentsAndParameters ))
83
+ .withParameters (calculateParameters ( fragmentsAndParameters ))
83
84
.build ();
84
85
}
85
86
86
- private String calculateSetPhrase (OptionalFragmentCollector collector ) {
87
- return collector .fragments ()
87
+ private String calculateSetPhrase (List <Optional <FragmentAndParameters >> fragmentsAndParameters ) {
88
+ return fragmentsAndParameters .stream ()
89
+ .filter (Optional ::isPresent )
90
+ .map (Optional ::get )
91
+ .map (FragmentAndParameters ::fragment )
88
92
.collect (Collectors .joining (", " , "set " , "" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
89
93
}
94
+
95
+ private Map <String , Object > calculateParameters (List <Optional <FragmentAndParameters >> fragmentsAndParameters ) {
96
+ return fragmentsAndParameters .stream ()
97
+ .filter (Optional ::isPresent )
98
+ .map (Optional ::get )
99
+ .map (FragmentAndParameters ::parameters )
100
+ .collect (HashMap ::new , HashMap ::putAll , HashMap ::putAll );
101
+ }
90
102
91
103
private Optional <WhereClauseProvider > renderWhereClause (WhereModel whereModel ) {
92
104
return WhereRenderer .withWhereModel (whereModel )
0 commit comments