Skip to content

Commit 99ade4b

Browse files
authored
Merge pull request #885 from jeffgbutler/optimizations
General Optimizations
2 parents 0e6342a + 17ac0c0 commit 99ade4b

35 files changed

+353
-436
lines changed

.github/workflows/ci.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
matrix:
1010
cache: [maven]
1111
distribution: [temurin]
12-
java: [17, 21, 22, 23-ea]
12+
java: [17, 21, 23, 24-ea]
1313
os: [ubuntu-latest]
1414
fail-fast: false
1515
max-parallel: 4

src/main/java/org/mybatis/dynamic/sql/delete/DeleteModel.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.mybatis.dynamic.sql.common.CommonBuilder;
2424
import org.mybatis.dynamic.sql.common.OrderByModel;
2525
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
26+
import org.mybatis.dynamic.sql.delete.render.DeleteRenderer;
2627
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
27-
import org.mybatis.dynamic.sql.render.RendererFactory;
2828
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2929
import org.mybatis.dynamic.sql.where.EmbeddedWhereModel;
3030

@@ -65,10 +65,16 @@ public Optional<OrderByModel> orderByModel() {
6565
return Optional.ofNullable(orderByModel);
6666
}
6767

68+
public StatementConfiguration statementConfiguration() {
69+
return statementConfiguration;
70+
}
71+
6872
@NotNull
6973
public DeleteStatementProvider render(RenderingStrategy renderingStrategy) {
70-
return RendererFactory.createDeleteRenderer(this, statementConfiguration)
71-
.render(renderingStrategy);
74+
return DeleteRenderer.withDeleteModel(this)
75+
.withRenderingStrategy(renderingStrategy)
76+
.build()
77+
.render();
7278
}
7379

7480
public static Builder withTable(SqlTable table) {

src/main/java/org/mybatis/dynamic/sql/delete/render/DefaultDeleteStatementProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class DefaultDeleteStatementProvider implements DeleteStatementProvider {
2525

2626
private DefaultDeleteStatementProvider(Builder builder) {
2727
deleteStatement = Objects.requireNonNull(builder.deleteStatement);
28-
parameters = Objects.requireNonNull(builder.parameters);
28+
parameters = builder.parameters;
2929
}
3030

3131
@Override

src/main/java/org/mybatis/dynamic/sql/delete/render/DeleteRenderer.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.mybatis.dynamic.sql.common.OrderByModel;
2323
import org.mybatis.dynamic.sql.common.OrderByRenderer;
24-
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2524
import org.mybatis.dynamic.sql.delete.DeleteModel;
2625
import org.mybatis.dynamic.sql.render.ExplicitTableAliasCalculator;
2726
import org.mybatis.dynamic.sql.render.RenderedParameterInfo;
@@ -44,7 +43,7 @@ private DeleteRenderer(Builder builder) {
4443
renderingContext = RenderingContext
4544
.withRenderingStrategy(Objects.requireNonNull(builder.renderingStrategy))
4645
.withTableAliasCalculator(tableAliasCalculator)
47-
.withStatementConfiguration(builder.statementConfiguration)
46+
.withStatementConfiguration(deleteModel.statementConfiguration())
4847
.build();
4948
}
5049

@@ -106,7 +105,6 @@ public static Builder withDeleteModel(DeleteModel deleteModel) {
106105
public static class Builder {
107106
private DeleteModel deleteModel;
108107
private RenderingStrategy renderingStrategy;
109-
private StatementConfiguration statementConfiguration;
110108

111109
public Builder withDeleteModel(DeleteModel deleteModel) {
112110
this.deleteModel = deleteModel;
@@ -118,11 +116,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
118116
return this;
119117
}
120118

121-
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
122-
this.statementConfiguration = statementConfiguration;
123-
return this;
124-
}
125-
126119
public DeleteRenderer build() {
127120
return new DeleteRenderer(this);
128121
}

src/main/java/org/mybatis/dynamic/sql/insert/BatchInsertModel.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import org.jetbrains.annotations.NotNull;
2121
import org.mybatis.dynamic.sql.insert.render.BatchInsert;
22-
import org.mybatis.dynamic.sql.render.RendererFactory;
22+
import org.mybatis.dynamic.sql.insert.render.BatchInsertRenderer;
2323
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2424
import org.mybatis.dynamic.sql.util.Validator;
2525

@@ -33,8 +33,10 @@ private BatchInsertModel(Builder<T> builder) {
3333

3434
@NotNull
3535
public BatchInsert<T> render(RenderingStrategy renderingStrategy) {
36-
return RendererFactory.createBatchInsertRenderer(this)
37-
.render(renderingStrategy);
36+
return BatchInsertRenderer.withBatchInsertModel(this)
37+
.withRenderingStrategy(renderingStrategy)
38+
.build()
39+
.render();
3840
}
3941

4042
public static <T> Builder<T> withRecords(Collection<T> records) {

src/main/java/org/mybatis/dynamic/sql/insert/GeneralInsertModel.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.jetbrains.annotations.NotNull;
2424
import org.mybatis.dynamic.sql.SqlTable;
2525
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
26+
import org.mybatis.dynamic.sql.insert.render.GeneralInsertRenderer;
2627
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
27-
import org.mybatis.dynamic.sql.render.RendererFactory;
2828
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2929
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
3030
import org.mybatis.dynamic.sql.util.Validator;
@@ -50,10 +50,16 @@ public SqlTable table() {
5050
return table;
5151
}
5252

53+
public StatementConfiguration statementConfiguration() {
54+
return statementConfiguration;
55+
}
56+
5357
@NotNull
5458
public GeneralInsertStatementProvider render(RenderingStrategy renderingStrategy) {
55-
return RendererFactory.createGeneralInsertRenderer(this, statementConfiguration)
56-
.render(renderingStrategy);
59+
return GeneralInsertRenderer.withInsertModel(this)
60+
.withRenderingStrategy(renderingStrategy)
61+
.build()
62+
.render();
5763
}
5864

5965
public static class Builder {

src/main/java/org/mybatis/dynamic/sql/insert/InsertModel.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222

2323
import org.jetbrains.annotations.NotNull;
2424
import org.mybatis.dynamic.sql.SqlTable;
25+
import org.mybatis.dynamic.sql.insert.render.InsertRenderer;
2526
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
26-
import org.mybatis.dynamic.sql.render.RendererFactory;
2727
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2828
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
2929
import org.mybatis.dynamic.sql.util.Validator;
@@ -54,8 +54,10 @@ public SqlTable table() {
5454

5555
@NotNull
5656
public InsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
57-
return RendererFactory.createInsertRenderer(this)
58-
.render(renderingStrategy);
57+
return InsertRenderer.withInsertModel(this)
58+
.withRenderingStrategy(renderingStrategy)
59+
.build()
60+
.render();
5961
}
6062

6163
public static <T> Builder<T> withRow(T row) {

src/main/java/org/mybatis/dynamic/sql/insert/InsertSelectModel.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import org.jetbrains.annotations.NotNull;
2222
import org.mybatis.dynamic.sql.SqlTable;
2323
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
24+
import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
2425
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
25-
import org.mybatis.dynamic.sql.render.RendererFactory;
2626
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2727
import org.mybatis.dynamic.sql.select.SelectModel;
2828

@@ -51,10 +51,16 @@ public Optional<InsertColumnListModel> columnList() {
5151
return Optional.ofNullable(columnList);
5252
}
5353

54+
public StatementConfiguration statementConfiguration() {
55+
return statementConfiguration;
56+
}
57+
5458
@NotNull
5559
public InsertSelectStatementProvider render(RenderingStrategy renderingStrategy) {
56-
return RendererFactory.createInsertSelectRenderer(this, statementConfiguration)
57-
.render(renderingStrategy);
60+
return InsertSelectRenderer.withInsertSelectModel(this)
61+
.withRenderingStrategy(renderingStrategy)
62+
.build()
63+
.render();
5864
}
5965

6066
public static Builder withTable(SqlTable table) {

src/main/java/org/mybatis/dynamic/sql/insert/MultiRowInsertModel.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import java.util.Collection;
1919

2020
import org.jetbrains.annotations.NotNull;
21+
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertRenderer;
2122
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
22-
import org.mybatis.dynamic.sql.render.RendererFactory;
2323
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2424
import org.mybatis.dynamic.sql.util.Validator;
2525

@@ -33,8 +33,10 @@ private MultiRowInsertModel(Builder<T> builder) {
3333

3434
@NotNull
3535
public MultiRowInsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
36-
return RendererFactory.createMultiRowInsertRenderer(this)
37-
.render(renderingStrategy);
36+
return MultiRowInsertRenderer.withMultiRowInsertModel(this)
37+
.withRenderingStrategy(renderingStrategy)
38+
.build()
39+
.render();
3840
}
3941

4042
public static <T> Builder<T> withRecords(Collection<T> records) {

src/main/java/org/mybatis/dynamic/sql/insert/render/DefaultGeneralInsertStatementProvider.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
public class DefaultGeneralInsertStatementProvider
2323
implements GeneralInsertStatementProvider, InsertSelectStatementProvider {
2424
private final String insertStatement;
25-
private final Map<String, Object> parameters = new HashMap<>();
25+
private final Map<String, Object> parameters;
2626

2727
private DefaultGeneralInsertStatementProvider(Builder builder) {
2828
insertStatement = Objects.requireNonNull(builder.insertStatement);
29-
parameters.putAll(builder.parameters);
29+
parameters = builder.parameters;
3030
}
3131

3232
@Override

src/main/java/org/mybatis/dynamic/sql/insert/render/GeneralInsertRenderer.java

+1-8
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Objects;
1919
import java.util.Optional;
2020

21-
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2221
import org.mybatis.dynamic.sql.insert.GeneralInsertModel;
2322
import org.mybatis.dynamic.sql.render.RenderingContext;
2423
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -32,7 +31,7 @@ public class GeneralInsertRenderer {
3231
private GeneralInsertRenderer(Builder builder) {
3332
model = Objects.requireNonNull(builder.model);
3433
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
35-
.withStatementConfiguration(builder.statementConfiguration)
34+
.withStatementConfiguration(model.statementConfiguration())
3635
.build();
3736
visitor = new GeneralInsertValuePhraseVisitor(renderingContext);
3837
}
@@ -59,7 +58,6 @@ public static Builder withInsertModel(GeneralInsertModel model) {
5958
public static class Builder {
6059
private GeneralInsertModel model;
6160
private RenderingStrategy renderingStrategy;
62-
private StatementConfiguration statementConfiguration;
6361

6462
public Builder withInsertModel(GeneralInsertModel model) {
6563
this.model = model;
@@ -71,11 +69,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
7169
return this;
7270
}
7371

74-
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
75-
this.statementConfiguration = statementConfiguration;
76-
return this;
77-
}
78-
7972
public GeneralInsertRenderer build() {
8073
return new GeneralInsertRenderer(this);
8174
}

src/main/java/org/mybatis/dynamic/sql/insert/render/InsertSelectRenderer.java

+16-24
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,18 @@
1515
*/
1616
package org.mybatis.dynamic.sql.insert.render;
1717

18-
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
18+
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceAfter;
1919

2020
import java.util.Objects;
21-
import java.util.Optional;
2221
import java.util.stream.Collectors;
2322

2423
import org.mybatis.dynamic.sql.SqlColumn;
25-
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2624
import org.mybatis.dynamic.sql.insert.InsertColumnListModel;
2725
import org.mybatis.dynamic.sql.insert.InsertSelectModel;
2826
import org.mybatis.dynamic.sql.render.RenderingContext;
2927
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;
3230

3331
public class InsertSelectRenderer {
3432

@@ -38,34 +36,34 @@ public class InsertSelectRenderer {
3836
private InsertSelectRenderer(Builder builder) {
3937
model = Objects.requireNonNull(builder.model);
4038
renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
41-
.withStatementConfiguration(builder.statementConfiguration)
39+
.withStatementConfiguration(model.statementConfiguration())
4240
.build();
4341
}
4442

4543
public InsertSelectStatementProvider render() {
46-
SelectStatementProvider selectStatement = model.selectModel().render(renderingContext);
47-
4844
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);
5147

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();
5553

56-
return DefaultGeneralInsertStatementProvider.withInsertStatement(insertStatement)
57-
.withParameters(selectStatement.getParameters())
54+
return DefaultGeneralInsertStatementProvider.withInsertStatement(fragmentAndParameters.fragment())
55+
.withParameters(fragmentAndParameters.parameters())
5856
.build();
5957
}
6058

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$
6361
}
6462

6563
private String calculateColumnsPhrase(InsertColumnListModel columnList) {
6664
return columnList.columns()
6765
.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$
6967
}
7068

7169
public static Builder withInsertSelectModel(InsertSelectModel model) {
@@ -75,7 +73,6 @@ public static Builder withInsertSelectModel(InsertSelectModel model) {
7573
public static class Builder {
7674
private InsertSelectModel model;
7775
private RenderingStrategy renderingStrategy;
78-
private StatementConfiguration statementConfiguration;
7976

8077
public Builder withInsertSelectModel(InsertSelectModel model) {
8178
this.model = model;
@@ -87,11 +84,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
8784
return this;
8885
}
8986

90-
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
91-
this.statementConfiguration = statementConfiguration;
92-
return this;
93-
}
94-
9587
public InsertSelectRenderer build() {
9688
return new InsertSelectRenderer(this);
9789
}

src/main/java/org/mybatis/dynamic/sql/render/Renderer.java

-21
This file was deleted.

0 commit comments

Comments
 (0)