Skip to content

Commit 770e090

Browse files
committed
Polishing
Simplified the code structure. Ensured backward compatibility by recreating some methods often immediately deprecating them. See #777
1 parent 7551cbd commit 770e090

File tree

14 files changed

+89
-63
lines changed

14 files changed

+89
-63
lines changed

Diff for: spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,12 @@ class SqlGenerator {
9393
SqlGenerator(RelationalMappingContext mappingContext, JdbcConverter converter, RelationalPersistentEntity<?> entity,
9494
Dialect dialect) {
9595

96-
final RenderContextFactory renderContextFactory = new RenderContextFactory(dialect);
97-
9896
this.mappingContext = mappingContext;
9997
this.entity = entity;
10098
this.sqlContext = new SqlContext(entity);
101-
this.sqlRenderer = SqlRenderer.create(renderContextFactory.createRenderContext());
99+
this.renderContext = new RenderContextFactory(dialect).createRenderContext();
100+
this.sqlRenderer = SqlRenderer.create(renderContext);
102101
this.columns = new Columns(entity, mappingContext, converter);
103-
this.renderContext = renderContextFactory.createRenderContext();
104102
}
105103

106104
/**

Diff for: spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -888,9 +888,11 @@ public void saveAndLoadDateTimeWithMicrosecondPrecision() {
888888
assertThat(loaded.testTime).isEqualTo(entity.testTime);
889889
}
890890

891-
@Test // DATAJDBC-557
891+
@Test // GH-777
892892
public void insertWithIdOnly() {
893+
893894
WithIdOnly entity = new WithIdOnly();
895+
894896
assertThat(template.save(entity).id).isNotNull();
895897
}
896898

Diff for: spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public void insertWithUndefinedIdRetrievesGeneratedKeys() {
219219

220220
assertThat(generatedId).isEqualTo(GENERATED_ID);
221221

222-
verify(namedJdbcOperations).update(eq("INSERT INTO \"DUMMY_ENTITY\" VALUES ()"),
222+
verify(namedJdbcOperations).update(eq("INSERT INTO \"DUMMY_ENTITY\" VALUES (DEFAULT)"),
223223
paramSourceCaptor.capture(), any(KeyHolder.class));
224224
}
225225

Diff for: spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -398,18 +398,19 @@ void getInsertForEmptyColumnListPostgres() {
398398

399399
SqlGenerator sqlGenerator = createSqlGenerator(IdOnlyEntity.class, PostgresDialect.INSTANCE);
400400

401-
String insertSqlStatement = sqlGenerator.getInsert(emptySet());
401+
String insert = sqlGenerator.getInsert(emptySet());
402402

403-
assertThat(insertSqlStatement).endsWith(" VALUES (DEFAULT) ");
403+
assertThat(insert).endsWith(" VALUES (DEFAULT)");
404404
}
405405

406-
@Test //DATAJDBC-557
406+
@Test // GH-777
407407
void gerInsertForEmptyColumnListMsSqlServer() {
408+
408409
SqlGenerator sqlGenerator = createSqlGenerator(IdOnlyEntity.class, SqlServerDialect.INSTANCE);
409410

410-
String insertSqlStatement = sqlGenerator.getInsert(emptySet());
411+
String insert = sqlGenerator.getInsert(emptySet());
411412

412-
assertThat(insertSqlStatement).endsWith(" DEFAULT VALUES ");
413+
assertThat(insert).endsWith(" DEFAULT VALUES");
413414
}
414415

415416
@Test // DATAJDBC-334

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/dialect/Dialect.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Collections;
2020
import java.util.Set;
2121

22+
import org.springframework.data.relational.core.mapping.InsertDefaultValues;
2223
import org.springframework.data.relational.core.sql.IdentifierProcessing;
2324
import org.springframework.data.relational.core.sql.SqlIdentifier;
2425
import org.springframework.data.relational.core.sql.render.SelectRenderContext;
@@ -114,9 +115,10 @@ default Set<Class<?>> simpleTypes() {
114115
/**
115116
* @return an appropriate {@link InsertWithDefaultValues } for that specific dialect.
116117
* for most of the Dialects the default implementation will be valid, but, for
117-
* example, in case of {@link SqlServerDialect} it is not
118+
* example, in case of {@link SqlServerDialect} it is not.
119+
* @since 2.4
118120
*/
119121
default InsertWithDefaultValues getSqlInsertWithDefaultValues() {
120-
return new InsertWithDefaultValues() {};
122+
return InsertDefaultValues.DEFAULT;
121123
}
122124
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/dialect/InsertWithDefaultValues.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
/**
66
* This interface aggregates information about an Insert with default values statement.
7+
*
78
* @author Mikhail Polivakha
9+
* @since 2.4
810
*/
911
public interface InsertWithDefaultValues {
1012

11-
/**
12-
* @return the part of the sql statement, that follows after <b>INSERT INTO table</b>
13-
*/
14-
default String getDefaultInsertPart() {
15-
return InsertDefaultValues.DEFAULT.getDefaultInsertPart();
16-
}
17-
}
13+
/**
14+
* @return the part of the sql statement, that follows after <b>INSERT INTO table</b>
15+
*/
16+
String getDefaultInsertPart();
17+
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/dialect/RenderContextFactory.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ public RenderContext createRenderContext() {
7878
static class DialectRenderContext implements RenderContext {
7979

8080
private final RenderNamingStrategy renderNamingStrategy;
81-
private final SelectRenderContext selectRenderContext;
8281
private final Dialect renderingDialect;
82+
private final SelectRenderContext selectRenderContext;
83+
private final InsertRenderContext insertRenderContext;
8384

8485
DialectRenderContext(RenderNamingStrategy renderNamingStrategy, Dialect renderingDialect, SelectRenderContext selectRenderContext) {
8586

@@ -91,6 +92,7 @@ static class DialectRenderContext implements RenderContext {
9192
this.renderNamingStrategy = renderNamingStrategy;
9293
this.renderingDialect = renderingDialect;
9394
this.selectRenderContext = selectRenderContext;
95+
this.insertRenderContext = () -> renderingDialect.getSqlInsertWithDefaultValues().getDefaultInsertPart();
9496
}
9597

9698
/*
@@ -111,6 +113,11 @@ public IdentifierProcessing getIdentifierProcessing() {
111113
return renderingDialect.getIdentifierProcessing();
112114
}
113115

116+
@Override
117+
public SelectRenderContext getSelect() {
118+
return getSelectRenderContext();
119+
}
120+
114121
/*
115122
* (non-Javadoc)
116123
* @see org.springframework.data.relational.core.sql.render.RenderContext#getSelect()
@@ -122,12 +129,7 @@ public SelectRenderContext getSelectRenderContext() {
122129

123130
@Override
124131
public InsertRenderContext getInsertRenderContext() {
125-
return new InsertRenderContext() {
126-
@Override
127-
public String getInsertDefaultValuesPartSQL() {
128-
return renderingDialect.getSqlInsertWithDefaultValues().getDefaultInsertPart();
129-
}
130-
};
132+
return insertRenderContext;
131133
}
132134
}
133135
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/dialect/SqlServerDialect.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,6 @@ public IdentifierProcessing getIdentifierProcessing() {
155155

156156
@Override
157157
public InsertWithDefaultValues getSqlInsertWithDefaultValues() {
158-
return new InsertWithDefaultValues() {
159-
@Override
160-
public String getDefaultInsertPart() {
161-
return InsertDefaultValues.MS_SQL_SERVER.getDefaultInsertPart();
162-
}
163-
};
158+
return InsertDefaultValues.MS_SQL_SERVER;
164159
}
165160
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/InsertDefaultValues.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,25 @@
44
import org.springframework.data.relational.core.dialect.InsertWithDefaultValues;
55

66
/**
7-
* In the scope of Insert with default values SQL statement, for example
8-
* <b>INSERT INTO SCHEMA.TABLE VALUES (DEFAULT)</b>
9-
* this enum represents the default values part in different {@link Dialect}s
7+
* In the scope of Insert with default values SQL statement, for example {@literal INSERT INTO SCHEMA.TABLE VALUES
8+
* (DEFAULT)} this enum represents the default values part in different {@link Dialect}s
109
*
1110
* @author Mikhail Polivakha
1211
* @see InsertWithDefaultValues
12+
* @since 2.4
1313
*/
14-
public enum InsertDefaultValues {
14+
public enum InsertDefaultValues implements InsertWithDefaultValues{
1515

16-
DEFAULT(" VALUES (DEFAULT) "),
17-
MS_SQL_SERVER(" DEFAULT VALUES ");
16+
DEFAULT(" VALUES (DEFAULT)"),
17+
MS_SQL_SERVER(" DEFAULT VALUES");
1818

19-
private final String defaultInsertPart;
19+
private final String defaultInsertPart;
2020

21-
InsertDefaultValues(String defaultInsertPart) {
22-
this.defaultInsertPart = defaultInsertPart;
23-
}
21+
InsertDefaultValues(String defaultInsertPart) {
22+
this.defaultInsertPart = defaultInsertPart;
23+
}
2424

25-
public String getDefaultInsertPart() {
26-
return defaultInsertPart;
27-
}
28-
}
25+
public String getDefaultInsertPart() {
26+
return defaultInsertPart;
27+
}
28+
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/InsertRenderContext.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
*
1010
* @see RenderContext
1111
* @author Mikhail Polivakha
12+
* @since 2.4
1213
*/
1314
public interface InsertRenderContext {
1415

15-
default String getInsertDefaultValuesPartSQL() {
16-
return InsertDefaultValues.DEFAULT.getDefaultInsertPart();
17-
}
16+
String getInsertDefaultValuesPartSQL();
1817
}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/InsertStatementVisitor.java

+13-11
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,17 @@ public Delegation doLeave(Visitable segment) {
9898
return Delegation.retain();
9999
}
100100

101+
/*
102+
* (non-Javadoc)
103+
* @see org.springframework.data.relational.core.sql.render.PartRenderer#getRenderedPart()
104+
*/
105+
@Override
106+
public CharSequence getRenderedPart() {
107+
return builder;
108+
}
109+
101110
private void addInsertValuesIfPresentElseDefault() {
111+
102112
if (values.length() != 0) {
103113
builder.append(" VALUES (").append(values).append(")");
104114
} else {
@@ -107,6 +117,7 @@ private void addInsertValuesIfPresentElseDefault() {
107117
}
108118

109119
private void addInsertColumnsIfPresent() {
120+
110121
if (columns.length() != 0) {
111122
builder.append(" (").append(columns).append(")");
112123
}
@@ -116,17 +127,8 @@ private void addInsertWithDefaultValuesToBuilder() {
116127
builder.append(renderContext.getInsertRenderContext().getInsertDefaultValuesPartSQL());
117128
}
118129

119-
/*
120-
* (non-Javadoc)
121-
* @see org.springframework.data.relational.core.sql.render.PartRenderer#getRenderedPart()
122-
*/
123-
@Override
124-
public CharSequence getRenderedPart() {
125-
return builder;
126-
}
127-
128-
@NotNull
129130
private ColumnVisitor createColumnVisitor(RenderContext context) {
131+
130132
return new ColumnVisitor(context, false, it -> {
131133

132134
if (columns.length() != 0) {
@@ -137,8 +139,8 @@ private ColumnVisitor createColumnVisitor(RenderContext context) {
137139
});
138140
}
139141

140-
@NotNull
141142
private IntoClauseVisitor createIntoClauseVisitor(RenderContext context) {
143+
142144
return new IntoClauseVisitor(context, it -> {
143145

144146
if (into.length() != 0) {

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/RenderContext.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,17 @@ public interface RenderContext {
4343

4444
/**
4545
* @return the {@link SelectRenderContext}.
46+
* @deprecated Use {@link #getInsertRenderContext()} instead.
4647
*/
47-
SelectRenderContext getSelectRenderContext();
48+
@Deprecated
49+
SelectRenderContext getSelect();
50+
51+
/**
52+
* @return the {@link SelectRenderContext}.
53+
*/
54+
default SelectRenderContext getSelectRenderContext() {
55+
return getSelect();
56+
}
4857

4958
/**
5059
* @return the {@link InsertRenderContext}

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/SimpleRenderContext.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.data.relational.core.sql.render;
1717

18+
import org.springframework.data.relational.core.mapping.InsertDefaultValues;
1819
import org.springframework.data.relational.core.sql.IdentifierProcessing;
1920

2021
/**
@@ -36,14 +37,19 @@ public IdentifierProcessing getIdentifierProcessing() {
3637
return IdentifierProcessing.NONE;
3738
}
3839

40+
@Override
41+
public SelectRenderContext getSelect() {
42+
return getSelectRenderContext();
43+
}
44+
3945
@Override
4046
public SelectRenderContext getSelectRenderContext() {
4147
return DefaultSelectRenderContext.INSTANCE;
4248
}
4349

4450
@Override
4551
public InsertRenderContext getInsertRenderContext() {
46-
return new InsertRenderContext() {};
52+
return InsertDefaultValues.DEFAULT::getDefaultInsertPart;
4753
}
4854

4955
public RenderNamingStrategy getNamingStrategy() {

Diff for: spring-data-relational/src/main/java/org/springframework/data/relational/core/sql/render/SqlRenderer.java

+10
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ public static String toString(Select select) {
6969
return create().render(select);
7070
}
7171

72+
/**
73+
* Renders a {@link Insert} statement into its SQL representation.
74+
*
75+
* @param insert must not be {@literal null}.
76+
* @return the rendered statement.
77+
*/
78+
public static String toString(Insert insert) {
79+
return create().render(insert);
80+
}
81+
7282
/**
7383
* Renders a {@link Update} statement into its SQL representation.
7484
*

0 commit comments

Comments
 (0)