Skip to content

Commit 18cdceb

Browse files
committed
InsertSelect is configurable
1 parent 129fbc4 commit 18cdceb

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@
1818
import java.util.Arrays;
1919
import java.util.List;
2020
import java.util.Objects;
21+
import java.util.function.Consumer;
2122

2223
import org.jetbrains.annotations.NotNull;
2324
import org.mybatis.dynamic.sql.SqlColumn;
2425
import org.mybatis.dynamic.sql.SqlTable;
26+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2527
import org.mybatis.dynamic.sql.select.SelectModel;
2628
import org.mybatis.dynamic.sql.util.Buildable;
29+
import org.mybatis.dynamic.sql.util.ConfigurableStatement;
2730

28-
public class InsertSelectDSL implements Buildable<InsertSelectModel> {
31+
public class InsertSelectDSL implements Buildable<InsertSelectModel>, ConfigurableStatement<InsertSelectDSL> {
2932

3033
private final SqlTable table;
3134
private final InsertColumnListModel columnList;
3235
private final SelectModel selectModel;
36+
private final StatementConfiguration statementConfiguration = new StatementConfiguration();
3337

3438
private InsertSelectDSL(SqlTable table, InsertColumnListModel columnList, SelectModel selectModel) {
3539
this.table = Objects.requireNonNull(table);
@@ -49,13 +53,20 @@ public InsertSelectModel build() {
4953
return InsertSelectModel.withTable(table)
5054
.withColumnList(columnList)
5155
.withSelectModel(selectModel)
56+
.withStatementConfiguration(statementConfiguration)
5257
.build();
5358
}
5459

5560
public static InsertColumnGatherer insertInto(SqlTable table) {
5661
return new InsertColumnGatherer(table);
5762
}
5863

64+
@Override
65+
public InsertSelectDSL configureStatement(Consumer<StatementConfiguration> consumer) {
66+
consumer.accept(statementConfiguration);
67+
return this;
68+
}
69+
5970
public static class InsertColumnGatherer {
6071
private final SqlTable table;
6172

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

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

2121
import org.jetbrains.annotations.NotNull;
2222
import org.mybatis.dynamic.sql.SqlTable;
23+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2324
import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
2425
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
2526
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -29,11 +30,13 @@ public class InsertSelectModel {
2930
private final SqlTable table;
3031
private final InsertColumnListModel columnList;
3132
private final SelectModel selectModel;
33+
private final StatementConfiguration statementConfiguration;
3234

3335
private InsertSelectModel(Builder builder) {
3436
table = Objects.requireNonNull(builder.table);
3537
columnList = builder.columnList;
3638
selectModel = Objects.requireNonNull(builder.selectModel);
39+
statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
3740
}
3841

3942
public SqlTable table() {
@@ -52,6 +55,7 @@ public Optional<InsertColumnListModel> columnList() {
5255
public InsertSelectStatementProvider render(RenderingStrategy renderingStrategy) {
5356
return InsertSelectRenderer.withInsertSelectModel(this)
5457
.withRenderingStrategy(renderingStrategy)
58+
.withStatementConfiguration(statementConfiguration)
5559
.build()
5660
.render();
5761
}
@@ -64,6 +68,7 @@ public static class Builder {
6468
private SqlTable table;
6569
private InsertColumnListModel columnList;
6670
private SelectModel selectModel;
71+
private StatementConfiguration statementConfiguration;
6772

6873
public Builder withTable(SqlTable table) {
6974
this.table = table;
@@ -80,6 +85,11 @@ public Builder withSelectModel(SelectModel selectModel) {
8085
return this;
8186
}
8287

88+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
89+
this.statementConfiguration = statementConfiguration;
90+
return this;
91+
}
92+
8393
public InsertSelectModel build() {
8494
return new InsertSelectModel(this);
8595
}

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,28 @@
2222
import java.util.stream.Collectors;
2323

2424
import org.mybatis.dynamic.sql.SqlColumn;
25+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
2526
import org.mybatis.dynamic.sql.insert.InsertColumnListModel;
2627
import org.mybatis.dynamic.sql.insert.InsertSelectModel;
28+
import org.mybatis.dynamic.sql.render.RenderingContext;
2729
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2830
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
2931
import org.mybatis.dynamic.sql.util.StringUtilities;
3032

3133
public class InsertSelectRenderer {
3234

3335
private final InsertSelectModel model;
34-
private final RenderingStrategy renderingStrategy;
36+
private final RenderingContext renderingContext;
3537

3638
private InsertSelectRenderer(Builder builder) {
3739
model = Objects.requireNonNull(builder.model);
38-
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
40+
renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
41+
.withStatementConfiguration(builder.statementConfiguration)
42+
.build();
3943
}
4044

4145
public InsertSelectStatementProvider render() {
42-
SelectStatementProvider selectStatement = model.selectModel().render(renderingStrategy);
46+
SelectStatementProvider selectStatement = model.selectModel().render(renderingContext);
4347

4448
String statementStart = InsertRenderingUtilities.calculateInsertStatementStart(model.table());
4549
Optional<String> columnsPhrase = calculateColumnsPhrase();
@@ -70,6 +74,7 @@ public static Builder withInsertSelectModel(InsertSelectModel model) {
7074
public static class Builder {
7175
private InsertSelectModel model;
7276
private RenderingStrategy renderingStrategy;
77+
private StatementConfiguration statementConfiguration;
7378

7479
public Builder withInsertSelectModel(InsertSelectModel model) {
7580
this.model = model;
@@ -81,6 +86,11 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
8186
return this;
8287
}
8388

89+
public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
90+
this.statementConfiguration = statementConfiguration;
91+
return this;
92+
}
93+
8494
public InsertSelectRenderer build() {
8595
return new InsertSelectRenderer(this);
8696
}

0 commit comments

Comments
 (0)