Skip to content

Commit 7adfcd0

Browse files
committed
Add StatementConfiguration to RenderingContext
1 parent 35183af commit 7adfcd0

File tree

15 files changed

+97
-14
lines changed

15 files changed

+97
-14
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,10 @@ private DeleteRenderer(Builder builder) {
4141
TableAliasCalculator tableAliasCalculator = builder.deleteModel.tableAlias()
4242
.map(a -> ExplicitTableAliasCalculator.of(deleteModel.table(), a))
4343
.orElseGet(TableAliasCalculator::empty);
44-
// TODO - Add configuration to RenderingContext
45-
Objects.requireNonNull(builder.statementConfiguration);
4644
renderingContext = RenderingContext
4745
.withRenderingStrategy(Objects.requireNonNull(builder.renderingStrategy))
4846
.withTableAliasCalculator(tableAliasCalculator)
47+
.withStatementConfiguration(builder.statementConfiguration)
4948
.build();
5049
}
5150

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,27 @@
1919
import java.util.Collection;
2020
import java.util.List;
2121
import java.util.Objects;
22+
import java.util.function.Consumer;
2223
import java.util.function.Supplier;
2324

2425
import org.jetbrains.annotations.NotNull;
2526
import org.mybatis.dynamic.sql.SqlColumn;
2627
import org.mybatis.dynamic.sql.SqlTable;
28+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2729
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
2830
import org.mybatis.dynamic.sql.util.Buildable;
31+
import org.mybatis.dynamic.sql.util.ConfigurableStatement;
2932
import org.mybatis.dynamic.sql.util.ConstantMapping;
3033
import org.mybatis.dynamic.sql.util.NullMapping;
3134
import org.mybatis.dynamic.sql.util.StringConstantMapping;
3235
import org.mybatis.dynamic.sql.util.ValueMapping;
3336
import org.mybatis.dynamic.sql.util.ValueOrNullMapping;
3437
import org.mybatis.dynamic.sql.util.ValueWhenPresentMapping;
3538

36-
public class GeneralInsertDSL implements Buildable<GeneralInsertModel> {
39+
public class GeneralInsertDSL implements Buildable<GeneralInsertModel>, ConfigurableStatement<GeneralInsertDSL> {
3740
private final List<AbstractColumnMapping> columnMappings;
3841
private final SqlTable table;
42+
private final StatementConfiguration statementConfiguration = new StatementConfiguration();
3943

4044
private GeneralInsertDSL(Builder builder) {
4145
table = Objects.requireNonNull(builder.table);
@@ -52,13 +56,20 @@ public GeneralInsertModel build() {
5256
return new GeneralInsertModel.Builder()
5357
.withTable(table)
5458
.withInsertMappings(columnMappings)
59+
.withStatementConfiguration(statementConfiguration)
5560
.build();
5661
}
5762

5863
public static GeneralInsertDSL insertInto(SqlTable table) {
5964
return new GeneralInsertDSL.Builder().withTable(table).build();
6065
}
6166

67+
@Override
68+
public GeneralInsertDSL configureStatement(Consumer<StatementConfiguration> consumer) {
69+
consumer.accept(statementConfiguration);
70+
return this;
71+
}
72+
6273
public class SetClauseFinisher<T> {
6374

6475
private final SqlColumn<T> column;

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import org.jetbrains.annotations.NotNull;
2525
import org.mybatis.dynamic.sql.SqlTable;
26+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2627
import org.mybatis.dynamic.sql.insert.render.GeneralInsertRenderer;
2728
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
2829
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -33,11 +34,13 @@ public class GeneralInsertModel {
3334

3435
private final SqlTable table;
3536
private final List<AbstractColumnMapping> insertMappings;
37+
private final StatementConfiguration statementConfiguration;
3638

3739
private GeneralInsertModel(Builder builder) {
3840
table = Objects.requireNonNull(builder.table);
3941
Validator.assertNotEmpty(builder.insertMappings, "ERROR.6"); //$NON-NLS-1$
4042
insertMappings = builder.insertMappings;
43+
statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
4144
}
4245

4346
public <R> Stream<R> mapColumnMappings(Function<AbstractColumnMapping, R> mapper) {
@@ -52,13 +55,15 @@ public SqlTable table() {
5255
public GeneralInsertStatementProvider render(RenderingStrategy renderingStrategy) {
5356
return GeneralInsertRenderer.withInsertModel(this)
5457
.withRenderingStrategy(renderingStrategy)
58+
.withStatementConfiguration(statementConfiguration)
5559
.build()
5660
.render();
5761
}
5862

5963
public static class Builder {
6064
private SqlTable table;
6165
private final List<AbstractColumnMapping> insertMappings = new ArrayList<>();
66+
private StatementConfiguration statementConfiguration;
6267

6368
public Builder withTable(SqlTable table) {
6469
this.table = table;
@@ -70,6 +75,11 @@ public Builder withInsertMappings(List<? extends AbstractColumnMapping> insertMa
7075
return this;
7176
}
7277

78+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
79+
this.statementConfiguration = statementConfiguration;
80+
return this;
81+
}
82+
7383
public GeneralInsertModel build() {
7484
return new GeneralInsertModel(this);
7585
}

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Objects;
1919
import java.util.Optional;
2020

21+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2122
import org.mybatis.dynamic.sql.insert.GeneralInsertModel;
2223
import org.mybatis.dynamic.sql.render.RenderingContext;
2324
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -26,16 +27,16 @@
2627
public class GeneralInsertRenderer {
2728

2829
private final GeneralInsertModel model;
29-
private final RenderingStrategy renderingStrategy;
30+
private final RenderingContext renderingContext;
3031

3132
private GeneralInsertRenderer(Builder builder) {
3233
model = Objects.requireNonNull(builder.model);
33-
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
34+
renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
35+
.withStatementConfiguration(builder.statementConfiguration)
36+
.build();
3437
}
3538

3639
public GeneralInsertStatementProvider render() {
37-
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy).build();
38-
3940
GeneralInsertValuePhraseVisitor visitor = new GeneralInsertValuePhraseVisitor(renderingContext);
4041
FieldAndValueCollector collector = model.mapColumnMappings(m -> m.accept(visitor))
4142
.filter(Optional::isPresent)
@@ -58,6 +59,7 @@ public static Builder withInsertModel(GeneralInsertModel model) {
5859
public static class Builder {
5960
private GeneralInsertModel model;
6061
private RenderingStrategy renderingStrategy;
62+
private StatementConfiguration statementConfiguration;
6163

6264
public Builder withInsertModel(GeneralInsertModel model) {
6365
this.model = model;
@@ -69,6 +71,11 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
6971
return this;
7072
}
7173

74+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
75+
this.statementConfiguration = statementConfiguration;
76+
return this;
77+
}
78+
7279
public GeneralInsertRenderer build() {
7380
return new GeneralInsertRenderer(this);
7481
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.mybatis.dynamic.sql.BindableColumn;
2424
import org.mybatis.dynamic.sql.SqlColumn;
2525
import org.mybatis.dynamic.sql.SqlTable;
26+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2627

2728
/**
2829
* This class encapsulates all the supporting items related to rendering, and contains many utility methods
@@ -38,11 +39,13 @@ public class RenderingContext {
3839
private final TableAliasCalculator tableAliasCalculator;
3940
private final String configuredParameterName;
4041
private final String calculatedParameterName;
42+
private final StatementConfiguration statementConfiguration;
4143

4244
private RenderingContext(Builder builder) {
4345
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
4446
configuredParameterName = builder.parameterName;
4547
tableAliasCalculator = Objects.requireNonNull(builder.tableAliasCalculator);
48+
statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
4649

4750
// reasonable defaults
4851
sequence = builder.sequence == null ? new AtomicInteger(1) : builder.sequence;
@@ -114,6 +117,7 @@ public RenderingContext withChildTableAliasCalculator(TableAliasCalculator child
114117
.withSequence(this.sequence)
115118
.withParameterName(this.configuredParameterName)
116119
.withTableAliasCalculator(tac)
120+
.withStatementConfiguration(statementConfiguration)
117121
.build();
118122
}
119123

@@ -126,6 +130,7 @@ public static class Builder {
126130
private AtomicInteger sequence;
127131
private TableAliasCalculator tableAliasCalculator = TableAliasCalculator.empty();
128132
private String parameterName;
133+
private StatementConfiguration statementConfiguration;
129134

130135
public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
131136
this.renderingStrategy = renderingStrategy;
@@ -147,6 +152,11 @@ public Builder withParameterName(String parameterName) {
147152
return this;
148153
}
149154

155+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
156+
this.statementConfiguration = statementConfiguration;
157+
return this;
158+
}
159+
150160
public RenderingContext build() {
151161
return new RenderingContext(this);
152162
}

src/main/java/org/mybatis/dynamic/sql/select/MultiSelectDSL.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,23 @@
2020
import java.util.Collection;
2121
import java.util.List;
2222
import java.util.Optional;
23+
import java.util.function.Consumer;
2324

2425
import org.jetbrains.annotations.NotNull;
2526
import org.mybatis.dynamic.sql.SortSpecification;
2627
import org.mybatis.dynamic.sql.common.OrderByModel;
28+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2729
import org.mybatis.dynamic.sql.util.Buildable;
30+
import org.mybatis.dynamic.sql.util.ConfigurableStatement;
2831

29-
public class MultiSelectDSL implements Buildable<MultiSelectModel> {
32+
public class MultiSelectDSL implements Buildable<MultiSelectModel>, ConfigurableStatement<MultiSelectDSL> {
3033
private final List<UnionQuery> unionQueries = new ArrayList<>();
3134
private final SelectModel initialSelect;
3235
private OrderByModel orderByModel;
3336
private Long limit;
3437
private Long offset;
3538
private Long fetchFirstRows;
39+
private StatementConfiguration statementConfiguration = new StatementConfiguration();
3640

3741
public MultiSelectDSL(Buildable<SelectModel> builder) {
3842
initialSelect = builder.build();
@@ -80,6 +84,7 @@ public MultiSelectModel build() {
8084
.withUnionQueries(unionQueries)
8185
.withOrderByModel(orderByModel)
8286
.withPagingModel(buildPagingModel().orElse(null))
87+
.withStatementConfiguration(statementConfiguration)
8388
.build();
8489
}
8590

@@ -91,6 +96,12 @@ private Optional<PagingModel> buildPagingModel() {
9196
.build();
9297
}
9398

99+
@Override
100+
public MultiSelectDSL configureStatement(Consumer<StatementConfiguration> consumer) {
101+
consumer.accept(statementConfiguration);
102+
return this;
103+
}
104+
94105
public class LimitFinisher implements Buildable<MultiSelectModel> {
95106
public OffsetFinisher offset(long offset) {
96107
MultiSelectDSL.this.offset(offset);

src/main/java/org/mybatis/dynamic/sql/select/MultiSelectModel.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.jetbrains.annotations.NotNull;
2626
import org.mybatis.dynamic.sql.common.OrderByModel;
27+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2728
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2829
import org.mybatis.dynamic.sql.select.render.MultiSelectRenderer;
2930
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
@@ -34,12 +35,14 @@ public class MultiSelectModel {
3435
private final List<UnionQuery> unionQueries;
3536
private final OrderByModel orderByModel;
3637
private final PagingModel pagingModel;
38+
private final StatementConfiguration statementConfiguration;
3739

3840
private MultiSelectModel(Builder builder) {
3941
initialSelect = Objects.requireNonNull(builder.initialSelect);
4042
unionQueries = builder.unionQueries;
4143
orderByModel = builder.orderByModel;
4244
pagingModel = builder.pagingModel;
45+
statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
4346
Validator.assertNotEmpty(unionQueries, "ERROR.35"); //$NON-NLS-1$
4447
}
4548

@@ -64,6 +67,7 @@ public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
6467
return new MultiSelectRenderer.Builder()
6568
.withMultiSelectModel(this)
6669
.withRenderingStrategy(renderingStrategy)
70+
.withStatementConfiguration(statementConfiguration)
6771
.build()
6872
.render();
6973
}
@@ -73,6 +77,7 @@ public static class Builder {
7377
private final List<UnionQuery> unionQueries = new ArrayList<>();
7478
private OrderByModel orderByModel;
7579
private PagingModel pagingModel;
80+
private StatementConfiguration statementConfiguration;
7681

7782
public Builder withInitialSelect(SelectModel initialSelect) {
7883
this.initialSelect = initialSelect;
@@ -94,6 +99,11 @@ public Builder withPagingModel(PagingModel pagingModel) {
9499
return this;
95100
}
96101

102+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
103+
this.statementConfiguration = statementConfiguration;
104+
return this;
105+
}
106+
97107
public MultiSelectModel build() {
98108
return new MultiSelectModel(this);
99109
}

src/main/java/org/mybatis/dynamic/sql/select/SelectModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ public Optional<PagingModel> pagingModel() {
5959

6060
@NotNull
6161
public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
62-
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy).build();
62+
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy)
63+
.withStatementConfiguration(statementConfiguration)
64+
.build();
6365
return render(renderingContext);
6466
}
6567

src/main/java/org/mybatis/dynamic/sql/select/render/MultiSelectRenderer.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
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;
2425
import org.mybatis.dynamic.sql.render.RenderingContext;
2526
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2627
import org.mybatis.dynamic.sql.select.MultiSelectModel;
@@ -36,7 +37,8 @@ public class MultiSelectRenderer {
3637

3738
private MultiSelectRenderer(Builder builder) {
3839
renderingContext = RenderingContext
39-
.withRenderingStrategy(Objects.requireNonNull(builder.renderingStrategy))
40+
.withRenderingStrategy(builder.renderingStrategy)
41+
.withStatementConfiguration(builder.statementConfiguration)
4042
.build();
4143
multiSelectModel = Objects.requireNonNull(builder.multiSelectModel);
4244
}
@@ -102,6 +104,7 @@ private FragmentAndParameters renderPagingModel(PagingModel pagingModel) {
102104
public static class Builder {
103105
private RenderingStrategy renderingStrategy;
104106
private MultiSelectModel multiSelectModel;
107+
private StatementConfiguration statementConfiguration;
105108

106109
public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
107110
this.renderingStrategy = renderingStrategy;
@@ -113,6 +116,11 @@ public Builder withMultiSelectModel(MultiSelectModel multiSelectModel) {
113116
return this;
114117
}
115118

119+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
120+
this.statementConfiguration = statementConfiguration;
121+
return this;
122+
}
123+
116124
public MultiSelectRenderer build() {
117125
return new MultiSelectRenderer(this);
118126
}

src/main/java/org/mybatis/dynamic/sql/update/render/UpdateRenderer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,10 @@ private UpdateRenderer(Builder builder) {
4343
TableAliasCalculator tableAliasCalculator = builder.updateModel.tableAlias()
4444
.map(a -> ExplicitTableAliasCalculator.of(updateModel.table(), a))
4545
.orElseGet(TableAliasCalculator::empty);
46-
// TODO - Add configuration to RenderingContext
47-
Objects.requireNonNull(builder.statementConfiguration);
4846
renderingContext = RenderingContext
4947
.withRenderingStrategy(Objects.requireNonNull(builder.renderingStrategy))
5048
.withTableAliasCalculator(tableAliasCalculator)
49+
.withStatementConfiguration(builder.statementConfiguration)
5150
.build();
5251
}
5352

0 commit comments

Comments
 (0)