diff --git a/pom.xml b/pom.xml
index 4a5a0c9822..c493bf805d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index d834798834..ac977be1c0 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index ede9f0390f..8e077142c6 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-jdbc
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java
index e21f031e5b..c6706c9f7d 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java
@@ -93,6 +93,8 @@ public List getMappedSort(Table table, Sort sort, @Nullable Relati
for (Sort.Order order : sort) {
+ SqlSort.validate(order);
+
OrderByField simpleOrderByField = createSimpleOrderByField(table, entity, order);
OrderByField orderBy = simpleOrderByField
.withNullHandling(order.getNullHandling());
@@ -105,7 +107,9 @@ public List getMappedSort(Table table, Sort sort, @Nullable Relati
private OrderByField createSimpleOrderByField(Table table, RelationalPersistentEntity> entity, Sort.Order order) {
- SqlSort.validate(order);
+ if (order instanceof SqlSort.SqlOrder sqlOrder && sqlOrder.isUnsafe()) {
+ return OrderByField.from(Expressions.just(sqlOrder.getProperty()));
+ }
Field field = createPropertyField(entity, SqlIdentifier.unquoted(order.getProperty()), this.mappingContext);
return OrderByField.from(table.column(field.getMappedColumnName()));
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/QueryMapperUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/QueryMapperUnitTests.java
index a09fcade80..185c6d24c5 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/QueryMapperUnitTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/QueryMapperUnitTests.java
@@ -430,7 +430,7 @@ public void shouldMapSortWithUnsafeExpression() {
assertThat(fields) //
.extracting(Objects::toString) //
- .containsExactly("tbl." + unsafeExpression + " ASC");
+ .containsExactly( unsafeExpression + " ASC");
}
private Condition map(Criteria criteria) {
diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml
index 98019e0295..62ae71dc3d 100644
--- a/spring-data-r2dbc/pom.xml
+++ b/spring-data-r2dbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-r2dbc
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
Spring Data R2DBC
Spring Data module for R2DBC
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
index 91d0a1b61f..080e367453 100644
--- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
+++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
@@ -22,6 +22,7 @@
import java.util.Map;
import java.util.regex.Pattern;
+import org.jetbrains.annotations.NotNull;
import org.springframework.data.domain.Sort;
import org.springframework.data.mapping.MappingException;
import org.springframework.data.mapping.PersistentPropertyPath;
@@ -50,6 +51,8 @@
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
+import static org.springframework.data.relational.core.sql.Expressions.*;
+
/**
* Maps {@link CriteriaDefinition} and {@link Sort} objects considering mapping metadata and dialect-specific
* conversion.
@@ -102,7 +105,9 @@ public String toSql(SqlIdentifier identifier) {
* @param sort must not be {@literal null}.
* @param entity related {@link RelationalPersistentEntity}, can be {@literal null}.
* @return
+ * @deprecated without replacement.
*/
+ @Deprecated(since = "3.2", forRemoval = true)
public Sort getMappedObject(Sort sort, @Nullable RelationalPersistentEntity> entity) {
if (entity == null) {
@@ -137,6 +142,8 @@ public List getMappedSort(Table table, Sort sort, @Nullable Relati
for (Sort.Order order : sort) {
+ SqlSort.validate(order);
+
OrderByField simpleOrderByField = createSimpleOrderByField(table, entity, order);
OrderByField orderBy = simpleOrderByField
.withNullHandling(order.getNullHandling());
@@ -147,9 +154,12 @@ public List getMappedSort(Table table, Sort sort, @Nullable Relati
}
+
private OrderByField createSimpleOrderByField(Table table, RelationalPersistentEntity> entity, Sort.Order order) {
- SqlSort.validate(order);
+ if (order instanceof SqlSort.SqlOrder sqlOrder && sqlOrder.isUnsafe()) {
+ return OrderByField.from(Expressions.just(sqlOrder.getProperty()));
+ }
Field field = createPropertyField(entity, SqlIdentifier.unquoted(order.getProperty()), this.mappingContext);
return OrderByField.from(table.column(field.getMappedColumnName()));
diff --git a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java
index 144f941ba9..0c20797a60 100644
--- a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java
+++ b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java
@@ -39,6 +39,7 @@
import org.springframework.data.relational.core.sql.Functions;
import org.springframework.data.relational.core.sql.OrderByField;
import org.springframework.data.relational.core.sql.Table;
+import org.springframework.data.relational.domain.SqlSort;
import org.springframework.r2dbc.core.Parameter;
import org.springframework.r2dbc.core.binding.BindMarkersFactory;
import org.springframework.r2dbc.core.binding.BindTarget;
@@ -440,6 +441,19 @@ public void shouldMapSortWithUnknownField() {
.containsExactly("tbl.unknownField DESC");
}
+ @Test // GH-1512
+ public void shouldTablePrefixUnsafeOrderExpression() {
+
+ Sort sort = Sort.by(SqlSort.SqlOrder.desc("unknownField").withUnsafe());
+
+ List fields = mapper.getMappedSort(Table.create("tbl"), sort,
+ mapper.getMappingContext().getRequiredPersistentEntity(Person.class));
+
+ assertThat(fields) //
+ .extracting(Objects::toString) //
+ .containsExactly("unknownField DESC");
+ }
+
@Test // GH-1507
public void shouldMapSortWithAllowedSpecialCharacters() {
diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml
index 8002bdcf9b..66e3ed8df2 100644
--- a/spring-data-relational/pom.xml
+++ b/spring-data-relational/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-relational
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT
Spring Data Relational
Spring Data Relational support
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.2.0-SNAPSHOT
+ 3.2.0-1512-drop-table-prefix-for-unsafe-SNAPSHOT