Commit Graph

191 Commits

Author SHA1 Message Date
Mark Paluch
9cd8fc16b3 DATAJDBC-508 - Add support for @Value in persistence constructors.
We now evaluate @Value annotations in persistence constructors to compute values when creating object instances. AtValue can be used to materialize values for e.g. transient properties. Root properties map to the ResultSet from which an object gets materialized.

class WithAtValue {

	private final @Id Long id;
	private final @Transient String computed;

	public WithAtValue(Long id,
			@Value("#root.first_name") String computed) { // obtain value from first_name column
		this.id = id;
			this.computed = computed;
		}
	}
2020-09-22 11:48:56 +02:00
Mark Paluch
842a309f27 DATAJDBC-604 - Support empty IN lists.
We now support empty IN lists by rendering a condition that evaluates to FALSE using 1 = 0. For NOT IN, we render a condition that evaluates to TRUE using 1 = 1.
2020-09-22 09:58:10 +02:00
Mark Paluch
fc8d51cd3b DATAJDBC-586 - Guard JdbcRepositoryFactoryBean against setting null values for properties. 2020-07-30 16:43:12 +02:00
Mark Paluch
3ecfa669b7 DATAJDBC-576 - Polishing.
Consistent spelling of license. Tweak exception propagation. Consistently use asciidoc syntax for code blocks.

Original pull request: #239.
2020-07-17 10:02:22 +02:00
Jens Schauder
a0b5ddad8d DATAJDBC-576 - Control test execution with missing licence via profile.
Running all tests with

```
./mvnw clean install -Pall-dbs
```

or similar now requires an appropriate `container-license-acceptance.txt` to be on the classpath.

In order to ignore the tests that require an explicit license acceptance one may add the maven profile `ignore-missing-license` like so

```
./mvnw clean install -Pall-dbs,ignore-missing-license
```

Original pull request: #239.
2020-07-17 09:19:50 +02:00
Jens Schauder
2cf6efbe5c DATAJDBC-574 - Enables and fixes SqlServer tests.
Utilizes Testcontainers reuse feature.

Original pull request: #238.
2020-07-17 09:16:57 +02:00
Mark Paluch
d24ca640f7 DATAJDBC-573 - Polishing.
Remove unused imports, reformat code. Tweak logging.

Original pull request: #237.
2020-07-14 16:49:23 +02:00
Jens Schauder
1bfa629aa3 DATAJDBC-573 - Fixes the wait strategy for Oracle data sources.
Oracle integration tests where failing when the docker container was freshly started,
as it happens every time on CI.

The reason was mainly a misuse of Awaitility.ignoreException(Class) which only ignores exception of exactly the class provided, not of subtypes.

Apart from fixing this for Oracle the complete logic for verifying the connection was moved to DataSourceConfiguration so other database use it as well in a consistent manner.

Original pull request: #237.
2020-07-14 16:49:11 +02:00
Jens Schauder
c6c31dea48 DATAJDBC-569 - Removes unused TestDatabaseFeatures.
Original pull request: #236.
2020-07-14 16:41:26 +02:00
Jens Schauder
0fe4f4f2f9 DATAJDBC-569 - Use JdbcUtils to obtain values from a ResultSet.
Original pull request: #236.
2020-07-14 16:41:17 +02:00
Mark Paluch
08d71817a9 DATAJDBC-572 - Polishing.
Reorder methods in EnableJdbcRepositories to match other stores. Reformat code.

Original pull request: #235.
2020-07-13 16:27:25 +02:00
Jens Schauder
d3f4bce539 DATAJDBC-572 - Enable specification of a repository base class.
Added the field to `EnableJdbcRepository` and respect it's value by instantiating the repository base class reflectively.

Original pull request: #235.
2020-07-13 16:27:16 +02:00
Mark Paluch
b28e4e07c6 DATAJDBC-256 - Polishing.
Rename RequiredFeature to EnabledOnFeature to align with JUnit terminology. Use RunWith instead of Spring rules. Reformat code. Update documentation.

Original pull request: #232.
2020-07-13 14:14:42 +02:00
Jens Schauder
4eb92abd8f DATAJDBC-256 - Run integration tests with Oracle.
An Oracle database is started in Docker using Testcontainers.
Tests that don't work yet are skipped using the TestDatabaseFeatures which allows central control, which database supports which feature.

A suitable oracle image is deployed on DockerHub as  "springci/spring-data-oracle-xe-prebuild:18.4.0".
 The official Oracle docker images as described here https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md are not suitable since it needs about 15min to start and also TestContainers seems to break it by trying to us it to early.
 The referenced image was created based on these instructions: https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/prebuiltdb

The following features don't yet work for Oracle:

* Loading of date like properties.
* Ids with custom names.
* Array support.
* Boolean properties.
* BigDecimals and BigInteger is limited to what fits into Oracles NUMBER data type.
* Entities that use a join during load time, i.e. with a one to one relationship.

Original pull request: #232.
2020-07-13 14:11:48 +02:00
tlang
4238f44219 DATAJDBC-256 - First step toward running integration tests with Oracle.
Original pull request: #223, #232.
2020-07-13 14:11:43 +02:00
Jens Schauder
0c5a8c2b61 DATAJDBC-570 - Removes the AS for join table aliases.
The AS is not supported by Oracle and all other databases are fine without it.

Original pull request: #234.
2020-07-07 14:43:41 +02:00
Patrick Lucas
a5abd814b4 DATAJDBC-559 - Support MariaDB in DialectResolver.
Original pull request: #231.
2020-06-25 13:59:27 +02:00
Jens Schauder
6a4c4a1f15 DATAJDBC-559 - Upgrading the MariaDB JDBC driver.
This changes the behavior of the JDBC driver from always returning `MySQL` for product name to a more involved logic which might result in it returning  `MariaDB`.

Original pull request: #231.
2020-06-25 13:59:27 +02:00
Mark Paluch
eeeb188117 DATAJDBC-560 - 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:31:14 +02:00
Mark Paluch
81aba29fda DATAJDBC-546 - Skip property population if entity can be constructed entirely using a full constructor. 2020-05-28 13:54:30 +02:00
Mark Paluch
24ce2a9ba4 DATAJDBC-547 - Polishing.
Add scripts for DB2 after rebase.

Original pull request: #221.
2020-05-27 13:11:55 +02:00
Jens Schauder
d3e6db2cce DATAJDBC-547 - Fixes lock statement for fully qualified table names in PostgreSQL.
Original pull request: #221.
2020-05-27 10:01:39 +02:00
Jens Schauder
4ee9eb8df5 DATAJDBC-544 - Removes all Lombok from production code. 2020-05-20 15:44:03 +02:00
Jens Schauder
dedaf34614 DATAJDBC-545 - Fix support of setting properties via constructor. 2020-05-19 14:46:39 +02:00
Jens Schauder
8e63084162 DATAJDBC-412 - Polishing.
Added an integration test because you never can tell with databases.
2020-05-15 17:04:33 +02:00
Christoph Strobl
6f2bb59ceb DATAJDBC-412 - Support custom single value types in id.
Custom value types like outlined below can now server as id property

public class IdValue {
	String id;
}

public class DomainType {

	@Id
	IdValue id;
	String value;

	// ...
}
2020-05-15 15:30:41 +02:00
Mark Paluch
fc74fa9975 DATAJDBC-542 - Polishing.
Initialize map with capacity. Fix generics.

Original pull request: #218.
2020-05-14 10:42:12 +02:00
Jens Schauder
30a6fb5654 DATAJDBC-542 - Fixes access to Identifier parts by String.
Enabled access to identifier parts by String arguments in order to make usage with MyBatis feasable.
Properly pass identifier information to MyBatis for insert statements.

Original pull request: #218.
2020-05-14 10:42:01 +02:00
Jens Schauder
3c9290483a DATAJDBC-538 - Fixes lock acquisition for DB2.
The DB2 driver requires one to access the `ResultSet` resulting from a SELECT FOR UPDATE.

See also:
* https://github.com/schauder/db2-locks
* https://stackoverflow.com/questions/61681095/how-to-obtain-a-lock-in-db2-with-select-for-update-without-transferring-data

Original pull request: #216.
2020-05-11 14:32:11 +02:00
Jens Schauder
c3fb6d0d51 DATAJDBC-534 - Adds integration test for count projection.
Original pull request: #215.
2020-05-07 08:42:04 +02:00
mhyeon-lee
bc6c88f055 DATAJDBC-534 - Derived Query support for count projection.
Original pull request: #215.
2020-05-07 08:39:22 +02:00
Jens Schauder
aa05b792c3 DATAJDBC-493 - Polishing.
Using `execute` instead of `query` since we are not interested in the results.
Refactoring of the concurrency tests.
Make the concurrency tests run with all databases.
Added support for DB2.
Moved AnsiDialect to the main sources so it can be referenced in other Dialects.

Original pull request: #196.
2020-05-06 16:18:04 +02:00
mhyeon-lee
04c29f4004 DATAJDBC-493 - Avoids deadlocks by acquiring lock on aggregate root table.
Introduces infrastructure to obtain locks and uses them to acquire locks on the table of the aggregate root before deleting references.
Without this lock deletes access non root entities before the aggregate root, which is the opposite order of updates and thus may cause deadlocks.

Original pull request: #196.
2020-05-06 16:18:04 +02:00
Mark Paluch
fa8b95c5f3 DATAJDBC-257 - Polishing.
Move container initialization from static initializer into createDataSource() to not trigger container start when loading the class.
Add TestExecutionListener to ignore tests if the license for a container was not accepted. Add Awaitility to delay test execution until the database is ready so we avoid strange failures due to a delayed container startup.

Fix generics, since tags, author tags. Reformat code.

Original pull request: #213.
2020-05-06 15:54:41 +02:00
Jens Schauder
4bf2b8d0a8 DATAJDBC-257 - Adds DB2 support.
Db2Dialect added in order to support DB2.
Added test configuration files.
Adapted some tests to make them properly work with DB2
QueryAnnotationIntegrationTests converted into an Hsqldb only test since it is next to impossible to make it work across databases since it heavily depends on database and driver specifics.

Removed license acceptance file from the repository in order to not accept a license in the name of someone forking the repository.
For the CI build an appropriate file gets created on the fly.

Original pull request: #213.
2020-05-06 15:49:07 +02:00
Mark Paluch
b0d37bda8a DATAJDBC-529 - Polishing.
Rearrange imports.

Original pull request: #212.
2020-05-05 13:48:53 +02:00
Jens Schauder
370ee4464e DATAJDBC-529 - Use specialized ResultSetExtractor for exists queries.
Exists queries do not look at the value returned in the ResultSet but just check if there is a row.

Original pull request: #212.
2020-05-05 13:45:19 +02:00
Jens Schauder
ac88f1d4f9 DATAJDBC-530 - Polishing.
Original pull request: #210.
2020-05-04 09:19:35 +02:00
mhyeon-lee
f9bc40cc46 DATAJDBC-530 - The sorting property set as the property name.
Original pull request: #210.
2020-05-04 09:17:18 +02:00
Jens Schauder
6420205eed DATAJDBC-524 - Fixed dependency cycles triggered by DATAJDBC-318.
Moved Identifier and IdentifierBuilder to ...jdbc.core.convert.
Moved RelationaAuditingCallback to ..mapping.event.

Improved DependencyTests to properly consider "relational" a main module.
2020-04-28 11:09:52 +02:00
Jens Schauder
d80614b4d8 DATAJDBC-318 - Fixed the generation of the select list.
The select list must include columns for 1:1 relationships.

The implementation is copied from SqlGenerator and will be unified in the near future.

Original pull request: #209.
2020-04-28 09:23:52 +02:00
Mark Paluch
aadbb667ed DATAJDBC-318 - Extend query method validation.
We now reject criteria predicates for collections, maps and references. The select list selects all columns until DATAJDBC-523 is solved.

Original pull request: #209.
2020-04-28 09:23:52 +02:00
Jens Schauder
fd98e16038 DATAJDBC-318 - Adding a failing test.
Added failing tests for entities with references.

Code deduplication.
Documentation wording.
Formatting.

Original pull request: #209.
2020-04-28 09:23:52 +02:00
Mark Paluch
999bf29321 DATAJDBC-318 - Initial support for query derivation.
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.
2020-04-28 09:23:52 +02:00
Jens Schauder
2f3f00bd71 DATAJDBC-318 - Adapting DependencyTests.
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.
2020-04-28 09:23:52 +02:00
Jens Schauder
c8cbdc5ea0 DATAJDBC-507 - Polishing.
Reduced code duplication.
Fixed Lombok related warnings.

Original pull request: #208.
2020-04-20 12:42:40 +02:00
tirbison
d7fe83c256 DATAJDBC-507 - Optimistic locking version for non primitives start with 0.
This makes the behaviour consistent with that of other Spring Data modules.

Original pull request: #208.
2020-04-20 12:42:40 +02:00
Jens Schauder
2b6f7b2b48 DATAJDBC-480 - Removed various deprecated symbols.
Removal of public API that was deprecated in version 1.1 or older.

Original pull request: #204.
2020-04-01 13:57:21 +02:00
Mark Paluch
c0803ddafe DATAJDBC-341 - Polishing.
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.
2020-03-31 11:46:58 +02:00
Jens Schauder
95ca73df2f DATAJDBC-341 - Reworked the changes.
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.
2020-03-31 11:46:43 +02:00