Move JdbcRepositoryQuery into repository.query package. Split JdbcRepositoryQuery into AbstractJdbcQuery and StringBasedJdbcQuery.
Add QueryMapper for mapping of Criteria.
Initial support for query derivation.
Emit events and issue entity callbacks only for default RowMapper.
Custom RowMapper/ResultSetExtractor are in full control of the mapping and can issue events/callbacks themselves.
Update reference documentation.
Original pull request: #209.
Without this change we see cyclic dependencies between modules (i.e. subpackages).
The following subpackages had a cycle:
repository.query and repository.query.parser
PartTreeJdbcQuery and JdbcQueryCreator(repository.query from jdbc) depend on PartTree (repository.query.parser)
AbstractQueryCreator (repository.query.parser) depends on ParameterAccessor (repository.query from commons)
This change changes the definition of a module, bundling all the modules above into one module (repository).
Alternative changes that should fix the problem:
1. Move ParameterAccessor to a different (probably new package)
2. Move AbstractQueryCreator to a different (probably new package)
3. org.springframework.data.jdbc.repository.query to e.g. org.springframework.data.jdbc.repository.query.jdbc
Original pull request: #209.
Tweak Javadoc to reflect the used type. Create Criteria objects via Criteria.from(…) to expose the Criteria API without the need of casting.
Original pull request: #205.
Remove SpecialColumnValue in favor of JdbcPropertyValueProvider.hasProperty(…). Rename ResultSetWrapper to ResultSetAccessor. Replace ResultSetAccessor usage in JdbcConverter with ResultSet to avoid visibility issues.
Original pull request: #201.
Turns out this was a little more involved than expected.
This modifies the implementation to not use exceptions for flow control.
Properties that get set via setter, wither or field access get not invoked for missing columns.
When properties get referenced in constructors a missing column results in an exception.
As a side effect we now access the `ResultSet` by index.
Depending on how the driver is implemented this might improve the performance a little.
Original pull request: #201.
Remove unused AggregateChangeExecutionContext. Extract MutableAggregateChange interface and use it to encapsulate the implementation class. Expose MutableAggregateChange in entity callbacks where mutation of the MutableAggregateChange is intended.
Fix generics and license headers, tweak Javadoc.
Original pull request: #197.
Removed the Interpreter and replaced it with AggregateChangeExecutor and AggregateChangeExecutionContext.
The latter handles the mutable data like ids and versions.
Original pull request: #197.
We now support Conditions.between, notBetween, and notLike as additional criteria conditions and support case-insensitive comparisons.
For LIKE escaping we pick up the Escaper configured at Dialect level. The newly introduced ValueFunction allows string transformation before computing a value by applying the Escaper to the raw value. Escaping is required for StartingWith, Contains and EndsWith PartTree operations.
Original pull request: spring-projects/spring-data-r2dbc#295.
Rename Dialect bean to jdbcDialect to avoid generic bean names. Require JdbcOperations in DialectResolver. Rename JdbcDialectResolver to DialectResolver for consistent naming with R2DBC the underlying type is a Dialect.
Tweak Javadoc and extend documentation with custom conversions include from Spring Data Commons. Extract MySQL identifier processing defaults into constant.
Original pull request: #202.
So far the user had to specify an `Dialect` themselves if they wanted to use anything but HSQLDB.
We now identify the supported databases and pick the appropriate `Dialect`.
Vendors who want to offer support for their database may provide an implementation of `JdbcDialectProvider` and register it using a file under the key `org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider`.
Original pull request: #202.
Events now have a type parameter for the type of aggregate root they relate to.
In order to utilize this an react to only events relating to a specific type of entity `AbstractRelationalEventListener` was added.
Original pull request: #199.
Ids are only contained if it can not be guaranteed that an entity is contained which applies to the delete events.
As a side effect Identifier got simplified into a single simple class.
Original pull request: #199.
Rename ConditionGroup to GroupedCondition. Introduce Conditions.group(…) factory method instead of applying grouping via `condition.group()`. Introduce getter to introspect conditions.
Original pull request: #193.