Skip to content

General Optimizations #885

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Dec 28, 2024
Merged
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
matrix:
cache: [maven]
distribution: [temurin]
java: [17, 21, 22, 23-ea]
java: [17, 21, 23, 24-ea]
os: [ubuntu-latest]
fail-fast: false
max-parallel: 4
Expand Down
12 changes: 9 additions & 3 deletions src/main/java/org/mybatis/dynamic/sql/delete/DeleteModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import org.mybatis.dynamic.sql.common.CommonBuilder;
import org.mybatis.dynamic.sql.common.OrderByModel;
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.delete.render.DeleteRenderer;
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.where.EmbeddedWhereModel;

Expand Down Expand Up @@ -65,10 +65,16 @@ public Optional<OrderByModel> orderByModel() {
return Optional.ofNullable(orderByModel);
}

public StatementConfiguration statementConfiguration() {
return statementConfiguration;
}

@NotNull
public DeleteStatementProvider render(RenderingStrategy renderingStrategy) {
return RendererFactory.createDeleteRenderer(this, statementConfiguration)
.render(renderingStrategy);
return DeleteRenderer.withDeleteModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static Builder withTable(SqlTable table) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class DefaultDeleteStatementProvider implements DeleteStatementProvider {

private DefaultDeleteStatementProvider(Builder builder) {
deleteStatement = Objects.requireNonNull(builder.deleteStatement);
parameters = Objects.requireNonNull(builder.parameters);
parameters = builder.parameters;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

import org.mybatis.dynamic.sql.common.OrderByModel;
import org.mybatis.dynamic.sql.common.OrderByRenderer;
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.delete.DeleteModel;
import org.mybatis.dynamic.sql.render.ExplicitTableAliasCalculator;
import org.mybatis.dynamic.sql.render.RenderedParameterInfo;
Expand All @@ -44,7 +43,7 @@ private DeleteRenderer(Builder builder) {
renderingContext = RenderingContext
.withRenderingStrategy(Objects.requireNonNull(builder.renderingStrategy))
.withTableAliasCalculator(tableAliasCalculator)
.withStatementConfiguration(builder.statementConfiguration)
.withStatementConfiguration(deleteModel.statementConfiguration())
.build();
}

Expand Down Expand Up @@ -106,7 +105,6 @@ public static Builder withDeleteModel(DeleteModel deleteModel) {
public static class Builder {
private DeleteModel deleteModel;
private RenderingStrategy renderingStrategy;
private StatementConfiguration statementConfiguration;

public Builder withDeleteModel(DeleteModel deleteModel) {
this.deleteModel = deleteModel;
Expand All @@ -118,11 +116,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
return this;
}

public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
this.statementConfiguration = statementConfiguration;
return this;
}

public DeleteRenderer build() {
return new DeleteRenderer(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import org.jetbrains.annotations.NotNull;
import org.mybatis.dynamic.sql.insert.render.BatchInsert;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.insert.render.BatchInsertRenderer;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.util.Validator;

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

@NotNull
public BatchInsert<T> render(RenderingStrategy renderingStrategy) {
return RendererFactory.createBatchInsertRenderer(this)
.render(renderingStrategy);
return BatchInsertRenderer.withBatchInsertModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static <T> Builder<T> withRecords(Collection<T> records) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import org.jetbrains.annotations.NotNull;
import org.mybatis.dynamic.sql.SqlTable;
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.insert.render.GeneralInsertRenderer;
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
import org.mybatis.dynamic.sql.util.Validator;
Expand All @@ -50,10 +50,16 @@ public SqlTable table() {
return table;
}

public StatementConfiguration statementConfiguration() {
return statementConfiguration;
}

@NotNull
public GeneralInsertStatementProvider render(RenderingStrategy renderingStrategy) {
return RendererFactory.createGeneralInsertRenderer(this, statementConfiguration)
.render(renderingStrategy);
return GeneralInsertRenderer.withInsertModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static class Builder {
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/org/mybatis/dynamic/sql/insert/InsertModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@

import org.jetbrains.annotations.NotNull;
import org.mybatis.dynamic.sql.SqlTable;
import org.mybatis.dynamic.sql.insert.render.InsertRenderer;
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
import org.mybatis.dynamic.sql.util.Validator;
Expand Down Expand Up @@ -54,8 +54,10 @@ public SqlTable table() {

@NotNull
public InsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
return RendererFactory.createInsertRenderer(this)
.render(renderingStrategy);
return InsertRenderer.withInsertModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static <T> Builder<T> withRow(T row) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import org.jetbrains.annotations.NotNull;
import org.mybatis.dynamic.sql.SqlTable;
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.select.SelectModel;

Expand Down Expand Up @@ -51,10 +51,16 @@ public Optional<InsertColumnListModel> columnList() {
return Optional.ofNullable(columnList);
}

public StatementConfiguration statementConfiguration() {
return statementConfiguration;
}

@NotNull
public InsertSelectStatementProvider render(RenderingStrategy renderingStrategy) {
return RendererFactory.createInsertSelectRenderer(this, statementConfiguration)
.render(renderingStrategy);
return InsertSelectRenderer.withInsertSelectModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static Builder withTable(SqlTable table) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import java.util.Collection;

import org.jetbrains.annotations.NotNull;
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertRenderer;
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
import org.mybatis.dynamic.sql.render.RendererFactory;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.util.Validator;

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

@NotNull
public MultiRowInsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
return RendererFactory.createMultiRowInsertRenderer(this)
.render(renderingStrategy);
return MultiRowInsertRenderer.withMultiRowInsertModel(this)
.withRenderingStrategy(renderingStrategy)
.build()
.render();
}

public static <T> Builder<T> withRecords(Collection<T> records) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
public class DefaultGeneralInsertStatementProvider
implements GeneralInsertStatementProvider, InsertSelectStatementProvider {
private final String insertStatement;
private final Map<String, Object> parameters = new HashMap<>();
private final Map<String, Object> parameters;

private DefaultGeneralInsertStatementProvider(Builder builder) {
insertStatement = Objects.requireNonNull(builder.insertStatement);
parameters.putAll(builder.parameters);
parameters = builder.parameters;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import java.util.Objects;
import java.util.Optional;

import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.insert.GeneralInsertModel;
import org.mybatis.dynamic.sql.render.RenderingContext;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
Expand All @@ -32,7 +31,7 @@ public class GeneralInsertRenderer {
private GeneralInsertRenderer(Builder builder) {
model = Objects.requireNonNull(builder.model);
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
.withStatementConfiguration(builder.statementConfiguration)
.withStatementConfiguration(model.statementConfiguration())
.build();
visitor = new GeneralInsertValuePhraseVisitor(renderingContext);
}
Expand All @@ -59,7 +58,6 @@ public static Builder withInsertModel(GeneralInsertModel model) {
public static class Builder {
private GeneralInsertModel model;
private RenderingStrategy renderingStrategy;
private StatementConfiguration statementConfiguration;

public Builder withInsertModel(GeneralInsertModel model) {
this.model = model;
Expand All @@ -71,11 +69,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
return this;
}

public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
this.statementConfiguration = statementConfiguration;
return this;
}

public GeneralInsertRenderer build() {
return new GeneralInsertRenderer(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,18 @@
*/
package org.mybatis.dynamic.sql.insert.render;

import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceAfter;

import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

import org.mybatis.dynamic.sql.SqlColumn;
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
import org.mybatis.dynamic.sql.insert.InsertColumnListModel;
import org.mybatis.dynamic.sql.insert.InsertSelectModel;
import org.mybatis.dynamic.sql.render.RenderingContext;
import org.mybatis.dynamic.sql.render.RenderingStrategy;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.util.StringUtilities;
import org.mybatis.dynamic.sql.select.render.SubQueryRenderer;
import org.mybatis.dynamic.sql.util.FragmentAndParameters;

public class InsertSelectRenderer {

Expand All @@ -38,34 +36,34 @@ public class InsertSelectRenderer {
private InsertSelectRenderer(Builder builder) {
model = Objects.requireNonNull(builder.model);
renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
.withStatementConfiguration(builder.statementConfiguration)
.withStatementConfiguration(model.statementConfiguration())
.build();
}

public InsertSelectStatementProvider render() {
SelectStatementProvider selectStatement = model.selectModel().render(renderingContext);

String statementStart = InsertRenderingUtilities.calculateInsertStatementStart(model.table());
Optional<String> columnsPhrase = calculateColumnsPhrase();
String renderedSelectStatement = selectStatement.getSelectStatement();
String columnsPhrase = calculateColumnsPhrase();
String prefix = statementStart + spaceAfter(columnsPhrase);

String insertStatement = statementStart
+ columnsPhrase.map(StringUtilities::spaceBefore).orElse("") //$NON-NLS-1$
+ spaceBefore(renderedSelectStatement);
FragmentAndParameters fragmentAndParameters = SubQueryRenderer.withSelectModel(model.selectModel())
.withRenderingContext(renderingContext)
.withPrefix(prefix)
.build()
.render();

return DefaultGeneralInsertStatementProvider.withInsertStatement(insertStatement)
.withParameters(selectStatement.getParameters())
return DefaultGeneralInsertStatementProvider.withInsertStatement(fragmentAndParameters.fragment())
.withParameters(fragmentAndParameters.parameters())
.build();
}

private Optional<String> calculateColumnsPhrase() {
return model.columnList().map(this::calculateColumnsPhrase);
private String calculateColumnsPhrase() {
return model.columnList().map(this::calculateColumnsPhrase).orElse(""); //$NON-NLS-1$
}

private String calculateColumnsPhrase(InsertColumnListModel columnList) {
return columnList.columns()
.map(SqlColumn::name)
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
.collect(Collectors.joining(", ", " (", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}

public static Builder withInsertSelectModel(InsertSelectModel model) {
Expand All @@ -75,7 +73,6 @@ public static Builder withInsertSelectModel(InsertSelectModel model) {
public static class Builder {
private InsertSelectModel model;
private RenderingStrategy renderingStrategy;
private StatementConfiguration statementConfiguration;

public Builder withInsertSelectModel(InsertSelectModel model) {
this.model = model;
Expand All @@ -87,11 +84,6 @@ public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
return this;
}

public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
this.statementConfiguration = statementConfiguration;
return this;
}

public InsertSelectRenderer build() {
return new InsertSelectRenderer(this);
}
Expand Down
21 changes: 0 additions & 21 deletions src/main/java/org/mybatis/dynamic/sql/render/Renderer.java

This file was deleted.

Loading
Loading