@@ -38,6 +38,7 @@ public class UpdateRenderer {
3838 private final UpdateModel updateModel ;
3939 private final RenderingContext renderingContext ;
4040 private final SetPhraseVisitor visitor ;
41+ private final UpdateRendererVisitor updateRendererVisitor ;
4142
4243 private UpdateRenderer (Builder builder ) {
4344 updateModel = Objects .requireNonNull (builder .updateModel );
@@ -50,16 +51,19 @@ private UpdateRenderer(Builder builder) {
5051 .withStatementConfiguration (builder .statementConfiguration )
5152 .build ();
5253 visitor = new SetPhraseVisitor (renderingContext );
54+ updateRendererVisitor = Objects .requireNonNull (builder .visitor );
5355 }
5456
5557 public UpdateStatementProvider render () {
5658 FragmentCollector fragmentCollector = new FragmentCollector ();
5759
5860 fragmentCollector .add (calculateUpdateStatementStart ());
61+ fragmentCollector .add (calculateTableName ());
5962 fragmentCollector .add (calculateSetPhrase ());
6063 calculateWhereClause ().ifPresent (fragmentCollector ::add );
6164 calculateOrderByClause ().ifPresent (fragmentCollector ::add );
6265 calculateLimitClause ().ifPresent (fragmentCollector ::add );
66+ updateRendererVisitor .visitStatementEnd (renderingContext ).ifPresent (fragmentCollector ::add );
6367
6468 return toUpdateStatementProvider (fragmentCollector );
6569 }
@@ -72,8 +76,13 @@ private UpdateStatementProvider toUpdateStatementProvider(FragmentCollector frag
7276 }
7377
7478 private FragmentAndParameters calculateUpdateStatementStart () {
79+ return updateRendererVisitor .visitStatementStart (FragmentAndParameters .fromFragment ("update" ), //$NON-NLS-1$
80+ renderingContext );
81+ }
82+
83+ private FragmentAndParameters calculateTableName () {
7584 String aliasedTableName = renderingContext .aliasedTableName (updateModel .table ());
76- return FragmentAndParameters .fromFragment ("update " + aliasedTableName ); //$NON-NLS-1$
85+ return updateRendererVisitor . visitTable ( FragmentAndParameters .fromFragment (aliasedTableName ), renderingContext );
7786 }
7887
7988 private FragmentAndParameters calculateSetPhrase () {
@@ -88,7 +97,7 @@ private FragmentAndParameters calculateSetPhrase() {
8897 .flatMap (Optional ::stream )
8998 .collect (FragmentCollector .collect ());
9099
91- return toSetPhrase (fragmentCollector );
100+ return updateRendererVisitor . visitSetClause ( toSetPhrase (fragmentCollector ), renderingContext );
92101 }
93102
94103 private FragmentAndParameters toSetPhrase (FragmentCollector fragmentCollector ) {
@@ -97,15 +106,17 @@ private FragmentAndParameters toSetPhrase(FragmentCollector fragmentCollector) {
97106 }
98107
99108 private Optional <FragmentAndParameters > calculateWhereClause () {
100- return updateModel .whereModel ().flatMap (this ::renderWhereClause );
109+ return updateModel .whereModel ().flatMap (this ::renderWhereClause )
110+ .map (fp -> updateRendererVisitor .visitWhereClause (fp , renderingContext ));
101111 }
102112
103113 private Optional <FragmentAndParameters > renderWhereClause (EmbeddedWhereModel whereModel ) {
104114 return whereModel .render (renderingContext );
105115 }
106116
107117 private Optional <FragmentAndParameters > calculateLimitClause () {
108- return updateModel .limit ().map (this ::renderLimitClause );
118+ return updateModel .limit ().map (this ::renderLimitClause )
119+ .map (fp -> updateRendererVisitor .visitLimitClause (fp , renderingContext ));
109120 }
110121
111122 private FragmentAndParameters renderLimitClause (Long limit ) {
@@ -117,7 +128,8 @@ private FragmentAndParameters renderLimitClause(Long limit) {
117128 }
118129
119130 private Optional <FragmentAndParameters > calculateOrderByClause () {
120- return updateModel .orderByModel ().map (this ::renderOrderByClause );
131+ return updateModel .orderByModel ().map (this ::renderOrderByClause )
132+ .map (fp -> updateRendererVisitor .visitOrderByClause (fp , renderingContext ));
121133 }
122134
123135 private FragmentAndParameters renderOrderByClause (OrderByModel orderByModel ) {
@@ -132,6 +144,7 @@ public static class Builder {
132144 private UpdateModel updateModel ;
133145 private RenderingStrategy renderingStrategy ;
134146 private StatementConfiguration statementConfiguration ;
147+ private UpdateRendererVisitor visitor ;
135148
136149 public Builder withUpdateModel (UpdateModel updateModel ) {
137150 this .updateModel = updateModel ;
@@ -148,6 +161,11 @@ public Builder withStatementConfiguration(StatementConfiguration statementConfig
148161 return this ;
149162 }
150163
164+ public Builder withVisitor (UpdateRendererVisitor visitor ) {
165+ this .visitor = visitor ;
166+ return this ;
167+ }
168+
151169 public UpdateRenderer build () {
152170 return new UpdateRenderer (this );
153171 }
0 commit comments