Insert for entities of same type within an aggregate get inserted using JDBC batch operations when possible.
Inserts are supported when no id needs to be generated by the database or if the Dialect supports generation of ids in batch operations.
Closes#1159
Original pull request # 1191
Added the missing functionality that is found in the documentation of spring-data-jdbc, but was not present in the code as functionality. Users can not choose between various QueryLookupStrategies.
Closes#1043
Original pull request #1187
We now associate a boolean value with both operators as those operators are rendered using equals comparison in the actual SQL text.
Orginal pull request #1188
This allows both Spring Data R2DBC and Spring Data JDBC to use the same annotation.
See spring-projects/spring-data-jdbc/issues/1041, spring-projects/spring-data-r2dbc/pull/720, spring-projects/spring-data-jdbc/pull/1158
Refactored the unit tests to include a negative case and to separate the different scenarios tested.
Removed the default LockMode from the Lock annotation.
I have the feeling that most users will assume an exclusive Lock when none is specified, but also don't want to request stronger locks than required.
Original pull request #1158
See #1041
Methods which use the derive query functionality now can be annotated with `@Lock` to used a given `LockMode`. Right now there are two different modes `PESSIMISTIC_READ` and `PESSIMISTIC_WRITE`. Based on the dialect the right select is generated. For example for HSQLDB `Select ... FOR UPDATE`.
See #1041
Original pull request #1158
Rename "null handling" to "null precedence".
This is somewhat inconsistent with commons null handling, but more descriptive.
Minor formatting.
Original pull request #1156
See #821
java.sql.Types constants are int values and therefore make it tedious to read and debug the code.
SQLType values are mostly enum constants which are much nicer to use.
Original pull request #1142
This is achieved by passing the full availabe type information of the conversion target to the conversion service.
This broke a test which wasn't functional in the first place which becomes obvious when adding the proper assertion.
Closes#1046
Original pull request #1144
With older versions H2 returned a proprietary instance of `TimestampWithTimeZone` from `ResultSet.getObject()`.
We used to support the conversion of that to an `OffsetDateTime`.
With the most recent versions `TimestampWithTimeZone` is no longer part of the H2 driver, and we only register the converter when we encounter older versions of H2.
Closes#1114
See https://github.com/h2database/h2database/pull/1359
Simplified the code structure.
Ensured backward compatibility by recreating some methods often immediately deprecating them.
Moved new classes to the places where they belong, so that the package ...core.sql.render depends on ...core.dialect and not the other way round.
This causes dependency cycles because dependencies in the other direction already exists.
This will be properly fixed by #1105.
For now the offending classes are ignored by the DependencyTests.
See #777
See #1105
Polishing
The new Testcontainers version comes with a standard Oracle image configured and doesn't work with the one we used so far.
Making the standard image work required some tweaks to the setup so that the test user has the required privileges.
Closes#1081
This is to replace the AfterLoadCallback/Event in order to match the naming of other store modules.
AfterLoadCallback/Event is still in place for now, but deprecated.
Closes#1053
Original pull request: #1060.
Postgres requires the non standard type "FLOAT8" for "DOUBLE".
This is accomplished by making the conversion dependent on the dialect.
This required a new JdbcDialect interface in order to keep the JDBC annotation out of the relational module.
Closes#1033
Original pull request: #1037.
`InlineQuery` can be used wherever a `Table` was used up to now.
```
Table one = ...;
Select select = Select.builder()
.select(one.column("id"), employee.column("name"))
.from(one)
.build();
InlineQuery inline = InlineQuery.create(select, "inline");
Select select = Select.builder()
.select(inline.column("id"), inline.column("name"))
.from(inline)
.build();
```
Join and From renderer now use the same FromTableVisitor.
Also the SelectListVisitor reuses now the ExpressionVisitor.
Fixes#1003
Original pull request: #1018.