diff --git a/pom.xml b/pom.xml
index cc97c338..f5bf0489 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-r2dbc
- 1.4.0-SNAPSHOT
+ 1.4.0-483-read-camel-case-SNAPSHOT
Spring Data R2DBC
Spring Data module for R2DBC
diff --git a/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java b/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java
index 3401640e..506ef9b8 100644
--- a/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java
+++ b/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java
@@ -55,6 +55,7 @@
*
* @author Mark Paluch
* @author Louis Morgan
+ * @author Jens Schauder
*/
public class DefaultReactiveDataAccessStrategy implements ReactiveDataAccessStrategy {
@@ -360,6 +361,11 @@ public R2dbcConverter getConverter() {
return this.mappingContext;
}
+ @Override
+ public String renderForGeneratedKeys(SqlIdentifier identifier) {
+ return dialect.renderForGeneratedKeys(identifier);
+ }
+
private RelationalPersistentEntity> getRequiredPersistentEntity(Class> typeToRead) {
return this.mappingContext.getRequiredPersistentEntity(typeToRead);
}
diff --git a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java
index 24c172cd..4cd9b4f0 100644
--- a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java
+++ b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java
@@ -88,6 +88,7 @@
*
* @author Mark Paluch
* @author Bogdan Ilchyshyn
+ * @author Jens Schauder
* @since 1.1
*/
public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAware, ApplicationContextAware {
@@ -633,7 +634,7 @@ private Mono doInsert(T entity, SqlIdentifier tableName, OutboundRow outb
return statement.returnGeneratedValues();
}
- return statement.returnGeneratedValues(dataAccessStrategy.toSql(identifierColumns.get(0)));
+ return statement.returnGeneratedValues(dataAccessStrategy.renderForGeneratedKeys(identifierColumns.get(0)));
})
.map(this.dataAccessStrategy.getConverter().populateIdIfNecessary(entity)) //
.all() //
diff --git a/src/main/java/org/springframework/data/r2dbc/core/ReactiveDataAccessStrategy.java b/src/main/java/org/springframework/data/r2dbc/core/ReactiveDataAccessStrategy.java
index 761e6448..8eda6ffc 100644
--- a/src/main/java/org/springframework/data/r2dbc/core/ReactiveDataAccessStrategy.java
+++ b/src/main/java/org/springframework/data/r2dbc/core/ReactiveDataAccessStrategy.java
@@ -29,6 +29,7 @@
import org.springframework.lang.Nullable;
import org.springframework.r2dbc.core.Parameter;
import org.springframework.r2dbc.core.PreparedOperation;
+import org.springframework.util.Assert;
/**
* Data access strategy that generalizes convenience operations using mapped entities. Typically used internally by
@@ -36,6 +37,7 @@
* primary keys.
*
* @author Mark Paluch
+ * @author Jens Schauder
* @see org.springframework.r2dbc.core.PreparedOperation
* @deprecated since 1.2 in favor of using direct usage of {@link StatementMapper},
* {@link org.springframework.data.r2dbc.query.UpdateMapper} and {@link R2dbcConverter}.
@@ -135,6 +137,19 @@ public interface ReactiveDataAccessStrategy {
*/
String toSql(SqlIdentifier identifier);
+ /**
+ * Render a {@link SqlIdentifier} in a way suitable for registering it as a generated key with a statement.
+ *
+ * @param identifier to render. Must not be {@literal null}.
+ * @return rendered identifier. Guaranteed to be not {@literal null}.
+ */
+ default String renderForGeneratedKeys(SqlIdentifier identifier) {
+
+ Assert.notNull(identifier, "Indentifier must not be null.");
+
+ return identifier.toSql(IdentifierProcessing.NONE);
+ }
+
/**
* Interface to retrieve parameters for named parameter processing.
*/
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java b/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
index 0ce3f083..fad08d8b 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/H2Dialect.java
@@ -1,9 +1,12 @@
package org.springframework.data.r2dbc.dialect;
+import org.springframework.data.relational.core.sql.SqlIdentifier;
+
/**
* An SQL dialect for H2 in Postgres Compatibility mode.
*
* @author Mark Paluch
+ * @author Jens Schauder
*/
public class H2Dialect extends PostgresDialect {
@@ -11,4 +14,9 @@ public class H2Dialect extends PostgresDialect {
* Singleton instance.
*/
public static final H2Dialect INSTANCE = new H2Dialect();
+
+ @Override
+ public String renderForGeneratedKeys(SqlIdentifier identifier) {
+ return identifier.getReference(getIdentifierProcessing());
+ }
}
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java b/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java
index fd6168e3..f71ffbce 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/MySqlDialect.java
@@ -28,12 +28,14 @@
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.WritingConverter;
+import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.r2dbc.core.binding.BindMarkersFactory;
/**
* An SQL dialect for MySQL.
*
* @author Mark Paluch
+ * @author Jens Schauder
*/
public class MySqlDialect extends org.springframework.data.relational.core.dialect.MySqlDialect
implements R2dbcDialect {
@@ -103,6 +105,11 @@ public Boolean convert(Byte s) {
}
}
+ @Override
+ public String renderForGeneratedKeys(SqlIdentifier identifier) {
+ return identifier.getReference(getIdentifierProcessing());
+ }
+
/**
* Simple singleton to convert {@link Boolean}s to their {@link Byte} representation. MySQL does not have a built-in
* boolean type by default, so relies on using a byte instead. {@literal true} maps to {@code 1}.
diff --git a/src/main/java/org/springframework/data/r2dbc/dialect/R2dbcDialect.java b/src/main/java/org/springframework/data/r2dbc/dialect/R2dbcDialect.java
index fe56872c..1eddac9d 100644
--- a/src/main/java/org/springframework/data/r2dbc/dialect/R2dbcDialect.java
+++ b/src/main/java/org/springframework/data/r2dbc/dialect/R2dbcDialect.java
@@ -8,6 +8,7 @@
import org.springframework.data.mapping.model.SimpleTypeHolder;
import org.springframework.data.r2dbc.mapping.R2dbcSimpleTypeHolder;
import org.springframework.data.relational.core.dialect.Dialect;
+import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.r2dbc.core.binding.BindMarkersFactory;
/**
@@ -59,4 +60,16 @@ default SimpleTypeHolder getSimpleTypeHolder() {
default Collection