Skip to content

Commit

Permalink
Merge pull request #885 from jeffgbutler/optimizations
Browse files Browse the repository at this point in the history
General Optimizations
  • Loading branch information
jeffgbutler authored Dec 28, 2024
2 parents 0e6342a + 17ac0c0 commit 99ade4b
Show file tree
Hide file tree
Showing 35 changed files with 353 additions and 436 deletions.
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

0 comments on commit 99ade4b

Please sign in to comment.