From 01eccbbbd7b5c478108226c0c11c27b40435f514 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 24 Jan 2020 14:35:58 +0100 Subject: [PATCH] #220 - Refactor StatementMapper. Use limit/offset instead of Page and accept Expression objects to declare a select list. Use SqlIdentifier in Update, Query, Criteria and fluent API. Original pull request: #287. --- .../r2dbc/core/DefaultDatabaseClient.java | 12 +- .../r2dbc/core/DefaultStatementMapper.java | 46 +++--- .../r2dbc/core/FluentR2dbcOperations.java | 2 +- .../data/r2dbc/core/R2dbcEntityTemplate.java | 55 +++--- .../r2dbc/core/ReactiveDeleteOperation.java | 19 ++- .../core/ReactiveDeleteOperationSupport.java | 24 +-- .../r2dbc/core/ReactiveInsertOperation.java | 19 ++- .../core/ReactiveInsertOperationSupport.java | 13 +- .../r2dbc/core/ReactiveSelectOperation.java | 19 ++- .../core/ReactiveSelectOperationSupport.java | 29 ++-- .../r2dbc/core/ReactiveUpdateOperation.java | 19 ++- .../core/ReactiveUpdateOperationSupport.java | 22 +-- .../data/r2dbc/core/StatementMapper.java | 156 ++++++++++++++---- .../data/r2dbc/query/Criteria.java | 25 +-- .../data/r2dbc/query/Query.java | 46 ++++-- .../data/r2dbc/query/QueryMapper.java | 72 ++++---- .../data/r2dbc/query/Update.java | 28 +++- .../data/r2dbc/query/UpdateMapper.java | 11 +- .../support/SimpleR2dbcRepository.java | 6 - .../core/R2dbcEntityTemplateUnitTests.java | 2 +- .../ReactiveSelectOperationUnitTests.java | 2 +- .../data/r2dbc/query/CriteriaUnitTests.java | 34 ++-- .../r2dbc/query/UpdateMapperUnitTests.java | 17 +- 23 files changed, 434 insertions(+), 244 deletions(-) diff --git a/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java b/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java index 912887b0..f02a8446 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java +++ b/src/main/java/org/springframework/data/r2dbc/core/DefaultDatabaseClient.java @@ -818,8 +818,8 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { StatementMapper mapper = dataAccessStrategy.getStatementMapper(); - StatementMapper.SelectSpec selectSpec = mapper.createSelect(this.table).withProjection(this.projectedFields) - .withSort(this.sort).withPage(this.page); + StatementMapper.SelectSpec selectSpec = mapper.createSelect(this.table) + .withProjection(this.projectedFields.toArray(new SqlIdentifier[0])).withSort(this.sort).withPage(this.page); if (this.criteria != null) { selectSpec = selectSpec.withCriteria(this.criteria); @@ -931,8 +931,8 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { columns = this.projectedFields; } - StatementMapper.SelectSpec selectSpec = mapper.createSelect(this.table).withProjection(columns) - .withPage(this.page).withSort(this.sort); + StatementMapper.SelectSpec selectSpec = mapper.createSelect(this.table) + .withProjection(columns.toArray(new SqlIdentifier[0])).withPage(this.page).withSort(this.sort); if (this.criteria != null) { selectSpec = selectSpec.withCriteria(this.criteria); @@ -1038,7 +1038,7 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { StatementMapper.InsertSpec insert = mapper.createInsert(this.table); for (SqlIdentifier column : this.byName.keySet()) { - insert = insert.withColumn(dataAccessStrategy.toSql(column), this.byName.get(column)); + insert = insert.withColumn(column, this.byName.get(column)); } PreparedOperation operation = mapper.getMappedObject(insert); @@ -1161,7 +1161,7 @@ class DefaultDatabaseClient implements DatabaseClient, ConnectionAccessor { for (SqlIdentifier column : outboundRow.keySet()) { SettableValue settableValue = outboundRow.get(column); if (settableValue.hasValue()) { - insert = insert.withColumn(dataAccessStrategy.toSql(column), settableValue); + insert = insert.withColumn(column, settableValue); } } diff --git a/src/main/java/org/springframework/data/r2dbc/core/DefaultStatementMapper.java b/src/main/java/org/springframework/data/r2dbc/core/DefaultStatementMapper.java index a6756ecb..441b5f2f 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/DefaultStatementMapper.java +++ b/src/main/java/org/springframework/data/r2dbc/core/DefaultStatementMapper.java @@ -16,11 +16,8 @@ package org.springframework.data.r2dbc.core; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.r2dbc.dialect.BindMarkers; import org.springframework.data.r2dbc.dialect.BindTarget; @@ -84,9 +81,9 @@ class DefaultStatementMapper implements StatementMapper { private PreparedOperation