Skip to content

Commit 29c9ecd

Browse files
committed
Remove another useless custom collector
1 parent 79d66e5 commit 29c9ecd

File tree

5 files changed

+44
-152
lines changed

5 files changed

+44
-152
lines changed

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
1919

20+
import java.util.List;
2021
import java.util.Objects;
22+
import java.util.stream.Collectors;
2123

2224
import org.mybatis.dynamic.sql.insert.BatchInsertModel;
2325
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -34,21 +36,27 @@ private BatchInsertRenderer(Builder<T> builder) {
3436

3537
public BatchInsert<T> render() {
3638
MultiRowValuePhraseVisitor visitor = new MultiRowValuePhraseVisitor(renderingStrategy, "record"); //$NON-NLS-1$)
37-
FieldAndValueCollector collector = model.mapColumnMappings(MultiRowRenderingUtilities.toFieldAndValue(visitor))
38-
.collect(FieldAndValueCollector.collect());
39+
List<FieldAndValue> fieldsAndValues = model.mapColumnMappings(MultiRowRenderingUtilities.toFieldAndValue(visitor))
40+
.collect(Collectors.toList());
3941

4042
return BatchInsert.withRecords(model.records())
41-
.withInsertStatement(calculateInsertStatement(collector))
43+
.withInsertStatement(calculateInsertStatement(fieldsAndValues))
4244
.build();
4345
}
4446

45-
private String calculateInsertStatement(FieldAndValueCollector collector) {
47+
private String calculateInsertStatement(List<FieldAndValue> fieldsAndValues) {
4648
return "insert into" //$NON-NLS-1$
4749
+ spaceBefore(model.table().tableNameAtRuntime())
48-
+ spaceBefore(collector.columnsPhrase())
49-
+ spaceBefore(collector.valuesPhrase());
50+
+ spaceBefore(MultiRowRenderingUtilities.calculateColumnsPhrase(fieldsAndValues))
51+
+ spaceBefore(calculateVluesPhrase(fieldsAndValues));
5052
}
5153

54+
private String calculateVluesPhrase(List<FieldAndValue> fieldsAndValues) {
55+
return fieldsAndValues.stream()
56+
.map(FieldAndValue::valuePhrase)
57+
.collect(Collectors.joining(", ", "values (", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
58+
}
59+
5260
public static <T> Builder<T> withBatchInsertModel(BatchInsertModel<T> model) {
5361
return new Builder<T>().withBatchInsertModel(model);
5462
}

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

Lines changed: 0 additions & 70 deletions
This file was deleted.

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717

1818
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
1919

20+
import java.util.List;
2021
import java.util.Objects;
22+
import java.util.stream.Collectors;
23+
import java.util.stream.IntStream;
2124

2225
import org.mybatis.dynamic.sql.insert.MultiRowInsertModel;
2326
import org.mybatis.dynamic.sql.render.RenderingStrategy;
@@ -34,21 +37,33 @@ private MultiRowInsertRenderer(Builder<T> builder) {
3437

3538
public MultiRowInsertStatementProvider<T> render() {
3639
MultiRowValuePhraseVisitor visitor = new MultiRowValuePhraseVisitor(renderingStrategy, "records[%s]"); //$NON-NLS-1$
37-
FieldAndValueCollector collector = model.mapColumnMappings(MultiRowRenderingUtilities.toFieldAndValue(visitor))
38-
.collect(FieldAndValueCollector.collect());
40+
List<FieldAndValue> fieldsAndValues = model.mapColumnMappings(MultiRowRenderingUtilities.toFieldAndValue(visitor))
41+
.collect(Collectors.toList());
3942

4043
return new DefaultMultiRowInsertStatementProvider.Builder<T>().withRecords(model.records())
41-
.withInsertStatement(calculateInsertStatement(collector))
44+
.withInsertStatement(calculateInsertStatement(fieldsAndValues))
4245
.build();
4346
}
4447

45-
private String calculateInsertStatement(FieldAndValueCollector collector) {
48+
private String calculateInsertStatement(List<FieldAndValue> fieldsAndValues) {
4649
return "insert into" //$NON-NLS-1$
4750
+ spaceBefore(model.table().tableNameAtRuntime())
48-
+ spaceBefore(collector.columnsPhrase())
49-
+ spaceBefore(collector.multiRowInsertValuesPhrase(model.recordCount()));
51+
+ spaceBefore(MultiRowRenderingUtilities.calculateColumnsPhrase(fieldsAndValues))
52+
+ spaceBefore(calculateMultiRowInsertValuesPhrase(fieldsAndValues, model.recordCount()));
5053
}
5154

55+
private String calculateMultiRowInsertValuesPhrase(List<FieldAndValue> fieldsAndValues, int rowCount) {
56+
return IntStream.range(0, rowCount)
57+
.mapToObj(i -> toSingleRowOfValues(fieldsAndValues, i))
58+
.collect(Collectors.joining(", ", "values ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
59+
}
60+
61+
private String toSingleRowOfValues(List<FieldAndValue> fieldsAndValues, int row) {
62+
return fieldsAndValues.stream()
63+
.map(fmv -> fmv.valuePhrase(row))
64+
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
65+
}
66+
5267
public static <T> Builder<T> withMultiRowInsertModel(MultiRowInsertModel<T> model) {
5368
return new Builder<T>().withMultiRowInsertModel(model);
5469
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616
package org.mybatis.dynamic.sql.insert.render;
1717

18+
import java.util.List;
1819
import java.util.function.Function;
20+
import java.util.stream.Collectors;
1921

2022
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
2123

@@ -30,4 +32,11 @@ public static Function<AbstractColumnMapping, FieldAndValue> toFieldAndValue(Mul
3032
public static FieldAndValue toFieldAndValue(MultiRowValuePhraseVisitor visitor, AbstractColumnMapping insertMapping) {
3133
return insertMapping.accept(visitor);
3234
}
35+
36+
public static String calculateColumnsPhrase(List<FieldAndValue> fieldsAndValues) {
37+
return fieldsAndValues.stream()
38+
.map(FieldAndValue::fieldName)
39+
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
40+
}
41+
3342
}

src/test/java/org/mybatis/dynamic/sql/insert/InsertStatementTest.java

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,13 @@
1616
package org.mybatis.dynamic.sql.insert;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19-
import static org.junit.jupiter.api.Assertions.assertAll;
2019
import static org.mybatis.dynamic.sql.SqlBuilder.insert;
2120

2221
import java.sql.JDBCType;
23-
import java.util.ArrayList;
24-
import java.util.List;
25-
import java.util.stream.Collector;
2622

2723
import org.junit.jupiter.api.Test;
2824
import org.mybatis.dynamic.sql.SqlColumn;
2925
import org.mybatis.dynamic.sql.SqlTable;
30-
import org.mybatis.dynamic.sql.insert.render.FieldAndValue;
31-
import org.mybatis.dynamic.sql.insert.render.FieldAndValueCollector;
3226
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
3327
import org.mybatis.dynamic.sql.render.RenderingStrategies;
3428

@@ -121,70 +115,6 @@ void testSelectiveInsertStatementBuilder() {
121115
assertThat(insertStatement.getInsertStatement()).isEqualTo(expected);
122116
}
123117

124-
@Test
125-
void testParallelStream() {
126-
127-
List<FieldAndValue> mappings = new ArrayList<>();
128-
129-
mappings.add(newFieldAndValue(id.name(), "{record.id}"));
130-
mappings.add(newFieldAndValue(firstName.name(), "{record.firstName}"));
131-
mappings.add(newFieldAndValue(lastName.name(), "{record.lastName}"));
132-
mappings.add(newFieldAndValue(occupation.name(), "{record.occupation}"));
133-
134-
FieldAndValueCollector collector =
135-
mappings.parallelStream().collect(Collector.of(
136-
FieldAndValueCollector::new,
137-
FieldAndValueCollector::add,
138-
FieldAndValueCollector::merge));
139-
140-
String expectedColumnsPhrase = "(id, first_name, last_name, occupation)";
141-
String expectedValuesPhrase = "values ({record.id}, {record.firstName}, {record.lastName}, {record.occupation})";
142-
143-
assertAll(
144-
() -> assertThat(collector.columnsPhrase()).isEqualTo(expectedColumnsPhrase),
145-
() -> assertThat(collector.valuesPhrase()).isEqualTo(expectedValuesPhrase)
146-
);
147-
}
148-
149-
private FieldAndValue newFieldAndValue(String fieldName, String valuePhrase) {
150-
return FieldAndValue.withFieldName(fieldName)
151-
.withValuePhrase(valuePhrase)
152-
.build();
153-
}
154-
155-
@Test
156-
void testParallelStreamForMultiRecord() {
157-
158-
List<FieldAndValue> mappings = new ArrayList<>();
159-
160-
mappings.add(newFieldAndValues(id.name(), "#{records[%s].id}"));
161-
mappings.add(newFieldAndValues(firstName.name(), "#{records[%s].firstName}"));
162-
mappings.add(newFieldAndValues(lastName.name(), "#{records[%s].lastName}"));
163-
mappings.add(newFieldAndValues(occupation.name(), "#{records[%s].occupation}"));
164-
165-
FieldAndValueCollector collector =
166-
mappings.parallelStream().collect(Collector.of(
167-
FieldAndValueCollector::new,
168-
FieldAndValueCollector::add,
169-
FieldAndValueCollector::merge));
170-
171-
String expectedColumnsPhrase = "(id, first_name, last_name, occupation)";
172-
String expectedValuesPhrase = "values"
173-
+ " (#{records[0].id}, #{records[0].firstName}, #{records[0].lastName}, #{records[0].occupation}),"
174-
+ " (#{records[1].id}, #{records[1].firstName}, #{records[1].lastName}, #{records[1].occupation})";
175-
176-
assertAll(
177-
() -> assertThat(collector.columnsPhrase()).isEqualTo(expectedColumnsPhrase),
178-
() -> assertThat(collector.multiRowInsertValuesPhrase(2)).isEqualTo(expectedValuesPhrase)
179-
);
180-
}
181-
182-
private FieldAndValue newFieldAndValues(String fieldName, String valuePhrase) {
183-
return FieldAndValue.withFieldName(fieldName)
184-
.withValuePhrase(valuePhrase)
185-
.build();
186-
}
187-
188118
static class TestRecord {
189119
private Integer id;
190120
private String firstName;

0 commit comments

Comments
 (0)