Commit Graph

228 Commits

Author SHA1 Message Date
Mark Paluch
da5eb2abfe Polishing.
Reduce method visibility.

See #519
2021-01-08 11:04:25 +01:00
Mark Paluch
d79a401425 Read domain type when returning an implemented interface from repository query methods.
We now read the domain type instead of trying to materialize an interface if the type returned from the query method is implemented by the domain object handled by the repository.

Closes #519
2021-01-08 11:03:55 +01:00
Mark Paluch
4ee15834dc Polishing.
Reduce test method/class visibility.

See #518
2021-01-07 15:36:08 +01:00
Mark Paluch
6e7e03963d Apply UPPER function to all columns when enabling ignoreCase.
We now apply the UPPER function regardless of whether we could resolve the criteria property to a column. Previously, we required a resolved property of a String type which prevented non-mapped properties from case-insensitive queries.

Closes #518
2021-01-07 15:35:00 +01:00
Mark Paluch
2b4bc0d140 Update copyright year to 2021.
Closes #523
2021-01-07 11:38:39 +01:00
Mark Paluch
cf75e26d45 #498 - Polishing.
Reorder methods. Replace Guava imports with proper ones. Consistent override comments.

Original pull request: #501.
2020-11-25 14:46:38 +01:00
Jens Schauder
843c402e00 #498 - Implements ReactiveCrudRepository.deleteAllById.
See also: DATACMNS-800.
Original pull request: #501.
2020-11-25 14:46:24 +01:00
Mark Paluch
43068e0e13 #492 - Polishing.
Use Java 8 syntax for Map creation. Add author tags. Use simpler table names.

Original pull request: #493.
2020-11-10 12:12:17 +01:00
JoseLion
63fcd73204 #493 - Add HStore support on Postgres dialect.
Original pull request: #493.
2020-11-10 12:05:17 +01:00
Mark Paluch
b8f4e8b765 #475 - Refine projection result mapping.
We now differentiate the result mapping based on projection type and query type. Previously, all projections used the domain type to map results first and then serve as backend for the projection proxy/DTO creation.
We now use direct result to DTO mapping for String-based queries to allow for a greater flexibility when declaring DTO result types. Interface-based projections and derived queries remain using the two-step process of result to domain type mapping and then mapping the domain type into the projection.
2020-10-08 15:04:14 +02:00
Mark Paluch
03a667ca6d #465 - Convert bind values for String-based queries to their native type.
We now invoke the converter for query arguments of String-based queries (using the Query annotation or named queries) to convert the value into a type that can be used by the driver.

Previously all values were passed-thru which caused for e.g. enums to pass-thru these to the driver and the driver encode failed.
2020-10-07 14:50:54 +02:00
Mark Paluch
c3cb70f5ec #469 - Suppress emission of null values when using simple and primitive result types.
Results projected onto simple and primitive types that are null are no longer emitted.

A SQL query SELECT MAX(age) FROM my_table that returns a SQL NULL and that would be consumed as Long.class (Publisher<Long>) is an example for a primitive type that can be null. Since Reactive Streams prohibits the propagation of null values by a Publisher to a Subscriber the only viable option is to suppress null results by wrapping the mapping function into Optional result values and filter these values later to avoid null being emitted.
2020-10-02 10:47:32 +02:00
Mark Paluch
7a094b6765 #395 - Add support for suspend repository query methods returning List<T>. 2020-09-22 14:53:58 +02:00
Mark Paluch
d3823947aa #468 - Correctly map result of exists queries.
We now map results of exists queries to a boolean flag to ensure proper decoding. Previously, results were attempted to be mapped onto a primitive type which failed as there's no converter registered for Row to Boolean.
2020-09-21 15:17:45 +02:00
Mark Paluch
f0b30f0ca0 #467 - Migrate tests to JUnit 5.
Migrate also ExternalDatabase from JUnit rule to BeforeAllCallback and RegisterExtension.
2020-09-21 14:42:05 +02:00
Mark Paluch
68c2304b73 #413 - Disable test used as documentation include. 2020-09-18 09:20:42 +02:00
Mark Paluch
c23485d90e #413 - Introduce constructor to R2dbcEntityTemplate accepting ConnectionFactory.
This is a short-cut constructor that allows for simpler creation of the Template API.
2020-09-17 17:52:18 +02:00
Mark Paluch
ce57b25cd0 #413 - Refine reference documentation after Spring R2DBC migration. 2020-09-17 11:14:01 +02:00
Mark Paluch
4506fb67ca #453 - Introduce converters to consume Postgres Json and convert these to String/byte[].
We now ship converters for Postgres' Json data type to map JSON to String and to byte[] for easier and safe consumption.
2020-09-10 09:21:15 +02:00
Mark Paluch
b720249dac #454 - Adapt to changed array assertions in AssertJ. 2020-09-09 15:51:54 +02:00
Mark Paluch
0868f2aaef #423 - Add r2dbc-postgresql Geotypes to simple types.
R2DBC Postgres Geo-types are now considered simple types that are passed-thru to the driver without further mapping. Types such as io.r2dbc.postgresql.codec.Circle or io.r2dbc.postgresql.codec.Box can be used directly in domain models and as bind parameters.
2020-09-09 11:40:04 +02:00
Mark Paluch
7d3bd1f30a #444 - Initialize primitive Id properties upon INSERT.
We now propagate auto-generated Id values to primitive Id properties if the value in the domain model is zero. This happens in addition to non-primitive values being null to ensure that generated values end up in the domain model.
2020-09-09 11:22:48 +02:00
Mark Paluch
43d5d9d827 #451 - Initialize version for versioned entities after BeforeConvert callback.
We now initialize/increment the version of versioned entities (optimistic locking) after running the BeforeConvert callback. BeforeConvert callbacks may contain features such as auditing and if the auditing callback issues a isNew check, then the version would be already populated which leads to the auditing callback considering the entity not new anymore leaving the created date empty.
2020-09-09 09:25:21 +02:00
Mark Paluch
d7a76609b2 #450 - Add support for @Value when constructing entities using their persistence constructor.
We now support the use of @Value in persistence constructors to compute values for constructor creation.

class MyDomainObject {

	public MyDomainObject(long id, @Value("#root.my_column") String my_column, @Value("5+2") int computed) {
		// …
	}
}
2020-09-08 10:43:30 +02:00
Mark Paluch
a1081bbbb2 #447 - Deprecate ReactiveDataAccessStrategy.
ReactiveDataAccessStrategy is now deprecated in favor of using StatementMapper, UpdateMapper, and R2dbcConverter directly. The access strategy interface was introduced to allow pluggable access strategies in DatabaseClient. With moving DatabaseClient into Spring Framework, this approach is no longer required.
2020-09-08 09:58:07 +02:00
Mark Paluch
b4002e5c3f #440 - Create R2dbcEntityTemplate in R2dbcRepositoryFactoryBean.
We now create R2dbcEntityTemplate as part of R2dbcRepositoryFactoryBean initialization if the factory bean was configured with DatabaseClient and DataAccessStrategy only. Creating the template in the factory bean allows collecting entity callbacks for repository usage.
2020-09-03 11:07:34 +02:00
Mark Paluch
7bf9ea7156 #411 - Introduce EnumWriteSupport for simpler pass-thru of enum values.
We now provide EnumWriteSupport as base class for enum write converters that should be written as-is to the driver.

R2dbcCustomConversions can now also be created from a dialect for easier R2dbcCustomConversions creation.
2020-08-06 10:59:42 +02:00
Mark Paluch
67c3d492a2 #402 - Exclude id property using initial value when inserting objects.
We now exclude Id properties from being used in the INSERT field list if the Id value is zero and of a primitive type or if the value is null using a numeric wrapper type.
2020-08-05 14:19:50 +02:00
Mark Paluch
ecbb8d8e78 #414 - Adopt SpEL support to use ReactiveEvaluationContextProvider.
We now defer query creation to obtain and resolve SpEL expression dependencies using reactive SpEL context extensions.
2020-08-05 12:17:35 +02:00
Mark Paluch
3d59c63bc0 #368 - Polishing.
Original pull request: #412.
2020-08-04 14:53:19 +02:00
Mark Paluch
086c5a1d2d #368 - Use Spring R2DBC.
We now use Spring R2DBC DatabaseClient and utilities to implement Spring Data R2DBC functionality.

Original pull request: #412.
2020-08-04 14:53:16 +02:00
Mark Paluch
f331572167 #368 - Deprecate API provided by Spring R2DBC.
This commit deprecates API that has been moved to Spring R2DBC.

Original pull request: #412.
2020-08-04 14:53:09 +02:00
Mark Paluch
2f9ca57ed5 #421 - Polishing.
Simplify tests. Use ReflectionUtils.isVoid(…) where possible and simplify isVoid(…) flows.

Original pull request: #422.
2020-07-31 11:40:01 +02:00
Stephen Cohen
748d6c3340 #421 - Handle modifying query methods returning kotlin.Unit.
Added check for kotlin.Unit to AbstractR2dbcQuery#getExecutionToWrap. This case is essentially equivalent to a return type of Void, but the singleton Unit instance needs to be returned instead of discarding the result entirely.

It was also necessary to add a check to R2dbcQueryMethod#getEntityInformation, as otherwise a PersistentEntity is created for Unit, which leads to a new instance being created via reflection down the pipeline (which is probably not a thing that should happen).

Original pull request: #422.
2020-07-31 11:39:50 +02:00
Mark Paluch
4f04c87837 #421 - Suppress results for suspended query methods returning kotlin.Unit.
We now discard results for suspended query methods if the return type is kotlin.Unit.

Related ticket: DATACMNS-1779

Original pull request: #422.
2020-07-31 11:39:45 +02:00
Mark Paluch
07be001e54 #410 - Make it possible to write delete/update operations without using matching.
Fluent operations now allow statement execution without the need to specify a Query object allowing for shorter statements.
2020-07-23 15:32:55 +02:00
Mark Paluch
f6105beab1 #281 - Add support for auditing.
We now provide auditing support that can be enabled through EnableR2dbcAuditing.

@Configuration
@EnableR2dbcAuditing
class Config {

  @Bean
  public ReactiveAuditorAware<String> myAuditorProvider() {
      return new AuditorAwareImpl();
  }
}
2020-07-23 11:11:49 +02:00
Stephen Cohen
4da92bdc7c #407 - Add ReactiveSortingRepository support.
Implements ReactiveSortingRepository on SimpleR2dbcRepository. Also changed R2dbcRepository to extend ReactiveSortingRepository and updated comments where it felt reasonable.

Added a single unit test for the new method, and changed the base interface of LegoSetRepository in AbstractR2dbcRepositoryIntegrationTests for integration testing purposes.

Clarify documentation on reactive repository base interfaces

Adds some language calling out ReactiveSortingRepository and fixes consistency between related examples.

Original pull request: #408.
2020-07-23 10:42:03 +02:00
Mark Paluch
0bd6f8a431 #406 - Allow configuring R2dbcEntityOperations bean reference in EnableR2dbcRepositories.
We now accept a bean reference to R2dbcEntityOperations so that a single application can scan for repositories that use different dialects/database systems.
2020-07-23 10:33:01 +02:00
Mark Paluch
bc698c3885 #215 - Add support for EntityCallbacks.
We now support entity callbacks for:

* AfterConvertCallback
* BeforeConvertCallback
* BeforeSaveCallback
* AfterSaveCallback

through R2dbcEntityTemplate.

Original pull request: #397.
2020-07-22 14:32:34 +02:00
Jens Schauder
06cc4e2701 #373 - Polishing.
Using soft assertions for more expressive test failures.

Original pull request: #376.
2020-07-22 14:14:31 +02:00
Mark Paluch
9e116269fe #373 - Extract test into ExpressionQueryUnitTests.
Original pull request: #376.
2020-07-22 14:14:24 +02:00
Mark Paluch
687142e134 #373 - Use SpelQueryContext for expression query parsing.
We now use SpelQueryContext and SpelExtractor for analysis and rewrite of queries using SpEL.

Original pull request: #376.
2020-07-22 14:13:51 +02:00
Mark Paluch
729222c763 #390 - Polishing.
Add author tags and ticket references to tests.
2020-07-14 15:21:21 +02:00
Zsombor Gegesy
748c5ba993 #390 - Insert should work without giving any explicit assignment/variables.
DatabaseClient.insert() can now persist objects that consist only of an id.
2020-07-14 15:21:20 +02:00
Mark Paluch
7b676a93ce #398 - Upgrade to MySQL JDBC connector 8.0.21. 2020-07-14 15:15:02 +02:00
Mark Paluch
682b6ffa75 #349 - Polishing.
Remove manual query for query derivation with SQL Server.
2020-07-07 14:36:45 +02:00
Mark Paluch
9485c52247 #383 - Polishing.
Use more concise assertions.
2020-06-09 15:26:44 +02:00
Mark Paluch
58708779da #383 - Fix Criteria mapping when composing a group from top-level criteria.
Using Criteria.from(…) with multiple Criteria objects now uses properly AND combination along with group nesting to render a correct criteria. Previously, the INITIAL combinator in groups caused a mapping exception.
2020-06-09 15:26:44 +02:00
Mark Paluch
594df7ac17 #384 - Fix return type detection for suspended Kotlin methods.
See DATACMNS-1738 for further reference.
2020-06-09 11:27:52 +02:00