Commit Graph

321 Commits

Author SHA1 Message Date
Christoph Strobl
3a89ec0444 DATAJDBC-370 - Fix read/write of nulled embedded objects.
We now allow read and write of Objects annotated with Embedded that are actually null.
When writing all contained fields will be nulled.
Reading back the entity considers an embedded object to be null itself if all contained properties are null within the backing result.

Relates to DATAJDBC-364

Original Pull Request: #151
2019-05-13 09:24:13 +02:00
Christoph Strobl
7f50c92477 DATAJDBC-370 - Polishing.
Re add wither method and add explicit test for immutable value.

Original Pull Request: #151
2019-05-13 09:23:57 +02:00
Jens Schauder
5854922ae8 DATAJDBC-370 - Fixed handling of entities with no withers.
We tried to set all the properties, even when they were already set via constructor.
Fixed it by unifying the three instances where we created and populated instances.

Original Pull Request: #151
2019-05-13 09:21:53 +02:00
Jens Schauder
060e404991 DATAJDBC-370 - Polishing.
Adding a missing issue reference to a test.

Original Pull Request: #151
2019-05-13 09:21:28 +02:00
Oliver Drotbohm
d0c432d029 DATAJDBC-351 - Updated changelog. 2019-05-10 12:57:19 +02:00
Mark Paluch
f43f054eff DATAJDBC-359 - Polishing.
Deprecate remaining DataAccessStrategy types in jdbc.core and create replacements in jdbc.core.convert. Migrate using code to replacement types.

Simplify warnings and if flows. Add since version to deprecations.

Move MyBatisDataAccessStrategyUnitTests from core to mybatis package.

Original pull request: #150.
2019-05-07 15:48:25 +02:00
Jens Schauder
b1c68d901e DATAJDBC-359 - Support for arbitrary chains of entities with or without Id.
Introduced a `ReadingContext` in the `EntityRowMapper` to avoid passing the `ResultSet` and the `path` all over the place.

Added a dependency test to Spring Data Relational and fixed the test failure by moving the PersistentPropertyPathExtension to core.mapping.

Original pull request: #150.
2019-05-07 15:48:10 +02:00
Michael Simons
aea39d99c5 DATAJDBC-365 - Fix typos in readme.
Original pull request: #149.
2019-04-23 09:16:32 +02:00
Michael Simons
eb90efc24a DATAJDBC-361 - Fix minor typos in SqlGenerator.
Original pull request: #148.
2019-04-12 12:29:35 +02:00
Christoph Strobl
c80a334d56 DATAJDBC-337 - After release cleanups. 2019-04-11 12:00:20 +02:00
Christoph Strobl
727af3658f DATAJDBC-337 - Prepare next development iteration. 2019-04-11 12:00:19 +02:00
Christoph Strobl
7d48a3f98a DATAJDBC-337 - Release version 1.1 M3 (Moore). 2019-04-11 11:24:31 +02:00
Christoph Strobl
98fb114750 DATAJDBC-337 - Prepare 1.1 M3 (Moore). 2019-04-11 11:23:56 +02:00
Christoph Strobl
e5d04bf6d8 DATAJDBC-337 - Updated changelog. 2019-04-11 11:23:49 +02:00
Jens Schauder
f499017269 DATAJDBC-357 - Polishing.
Implemented workaround for MySql not supporting offset without Limit.
Using `SELECT 1` as dummy order by since it is documented to be optimized away.
Renamed tests to match the project standard.

See also:

- https://stackoverflow.com/a/44106422
- https://stackoverflow.com/a/271650

Original pull request: #125.
2019-04-09 15:31:02 +02:00
Mark Paluch
488ef53157 DATAJDBC-357 - Dialect support pagination and array support.
We now support Dialect abstractions to consider vendor-specific deviations in SQL query rendering. Dialects support right now:

Feature flags for array support
Limit and Offset handling
The rendering is extended by considering rendering callback hook functions.

Current dialects:

Postgres SQL
SQL Server (2012)
MySQL

Original pull request: #125.
2019-04-09 15:31:02 +02:00
Mark Paluch
141f2d77ac DATAJDBC-340 - Polishing.
Encapsulate column caches in Columns type.

Relax RelationalMappingContext to MappingContext with appropriate generics. Remove unused SQL generator source. Cache table and Id column objects. Simplify assertions. Consistently use naming pattern for named parameters.

Migrate http URLs to https.

Original pull request: #147.
2019-04-09 09:48:38 +02:00
Jens Schauder
810c62b603 DATAJDBC-340 - Using new SQL generation DSL.
SqlGenerator basically got rewritten using the new SQL rendering API.

The SQL rendering API got some minor improvements in the process.

The whole generation process is now based on paths instead of properties which makes the actual logic of the construction much more obvious.

Original pull request: #147.
2019-04-09 09:38:41 +02:00
Mark Paluch
22dd3640da DATAJDBC-347 - Add missing override to SelectBuilder.
SelectAndFrom now overrides all from(…) methods to return the appropriate builder continuation type.

Original pull request: #145.
2019-04-08 13:37:05 +02:00
Jens Schauder
ea089becee DATAJDBC-346 - Polishing.
Original pull request: #144.
2019-04-08 11:03:53 +02:00
Salim Achouche
1481803ab9 DATAJDBC-346 - Fixed test failures when using MSSQL database.
Original pull request: #144.
2019-04-08 11:03:38 +02:00
Sanghyuk Jung
082eafb62d DATAJDBC-355 - Remove unnecessary null check.
The source parameter must not be null according to Javadoc of Converter.

See also: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/convert/converter/Converter.html

Original pull request: #146.
2019-04-08 10:18:05 +02:00
Mark Paluch
6f18648412 DATAJDBC-354 - Fix test fixture after Mockito upgrade. 2019-04-08 08:48:14 +02:00
Oliver Drotbohm
4923ba7076 DATAJDBC-333 - Updated changelog. 2019-04-01 20:56:25 +02:00
Spring Operator
913238a822 DATAJDBC-336 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 282 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).

Original Pull Request: #140
2019-03-22 11:22:54 +01:00
Spring Operator
17128311f4 DATAJDBC-336 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://www.mybatis.org/mybatis-3/logging.html (200) with 1 occurrences could not be migrated:
   ([https](https://www.mybatis.org/mybatis-3/logging.html) result SSLHandshakeException).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://en.wikipedia.org/wiki/Dependency_Injection with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Dependency_Injection ([https](https://en.wikipedia.org/wiki/Dependency_Injection) result 200).
* [ ] http://github.com/spring-projects/spring-data-jdbc with 1 occurrences migrated to:
  https://github.com/spring-projects/spring-data-jdbc ([https](https://github.com/spring-projects/spring-data-jdbc) result 200).
* [ ] http://spring.io/blog with 2 occurrences migrated to:
  https://spring.io/blog ([https](https://spring.io/blog) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-data-jdbc with 2 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-data-jdbc ([https](https://stackoverflow.com/questions/tagged/spring-data-jdbc) result 200).
* [ ] http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* [ ] http://docs.spring.io/spring-data/data-commons/docs/current/api/index.html?org/springframework/data/domain/Persistable.html with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/data-commons/docs/current/api/index.html?org/springframework/data/domain/Persistable.html ([https](https://docs.spring.io/spring-data/data-commons/docs/current/api/index.html?org/springframework/data/domain/Persistable.html) result 301).
* [ ] http://docs.spring.io/spring-framework/docs/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/ ([https](https://docs.spring.io/spring-framework/docs/) result 301).
* [ ] http://help.github.com/forking/ with 2 occurrences migrated to:
  https://help.github.com/forking/ ([https](https://help.github.com/forking/) result 301).
* [ ] http://projects.spring.io/spring-data with 2 occurrences migrated to:
  https://projects.spring.io/spring-data ([https](https://projects.spring.io/spring-data) result 301).
* [ ] http://projects.spring.io/spring-framework with 2 occurrences migrated to:
  https://projects.spring.io/spring-framework ([https](https://projects.spring.io/spring-framework) result 301).
* [ ] http://www.springsource.org/download with 1 occurrences migrated to:
  https://www.springsource.org/download ([https](https://www.springsource.org/download) result 302).

Original Pull Request: #133
2019-03-21 10:07:21 +01:00
Spring Operator
323a13e118 DATAJDBC-336 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* http://mybatis.org/dtd/mybatis-3-mapper.dtd (301) with 2 occurrences could not be migrated:
   ([https](https://mybatis.org/dtd/mybatis-3-mapper.dtd) result SSLHandshakeException).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* http://maven.apache.org/xsd/maven-4.0.0.xsd with 4 occurrences migrated to:
  https://maven.apache.org/xsd/maven-4.0.0.xsd ([https](https://maven.apache.org/xsd/maven-4.0.0.xsd) result 200).
* http://projects.spring.io/spring-data-jdbc with 2 occurrences migrated to:
  https://projects.spring.io/spring-data-jdbc ([https](https://projects.spring.io/spring-data-jdbc) result 301).

# Ignored
These URLs were intentionally ignored.

* http://maven.apache.org/POM/4.0.0 with 8 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 4 occurrences

Original Pull Request: #132
2019-03-21 10:06:15 +01:00
Mark Paluch
7a738eed97 DATAJDBC-343 - Omit table prefixes for assignment columns.
INSERT and UPDATE assignments/column lists no longer include the table prefix for a column as columns as the support is Dialect-specific and we should generally assume columns in these clauses to belong to the table used in the statement.
2019-03-18 14:44:15 +01:00
Mark Paluch
78f26aa0a7 DATAJDBC-327 - Polishing.
Extend Javadoc. Reorder constructors in the order of their parameter number. Add missing assertions. Introduce utility to create predicates. Remove unused fields. Add since tags. Reformat.

Original pull request: #123.
2019-03-12 12:32:24 +01:00
Jens Schauder
35d9bb6e57 DATAJDBC-327 - Polishing.
Removed author tag for package-info.java

Original pull request: #123.
2019-03-12 12:32:24 +01:00
Jens Schauder
ceb15fe826 DATAJDBC-327 - Add support for conversion to JdbcValue and store byte[] as binary.
Some JDBC drivers depend on correct explicit type information in order to pass on parameters to the database.
So far CustomConversion had no way to provide that information.
With this change one can use @WritingConverter that converts to JdbcTypeAware in order to provide that information.

byte[] now also get stored as BINARY.

Original pull request: #123.
2019-03-12 12:32:24 +01:00
Christoph Strobl
a08584433a DATAJDBC-308 - Add missing dist.id property required for multi module build. 2019-03-07 14:34:29 +01:00
Christoph Strobl
d3859f1eb7 DATAJDBC-308 - After release cleanups. 2019-03-07 10:07:29 +01:00
Christoph Strobl
4fb0cf0487 DATAJDBC-308 - Prepare next development iteration. 2019-03-07 10:07:28 +01:00
Christoph Strobl
4242a65270 DATAJDBC-308 - Release version 1.1 M2 (Moore). 2019-03-07 09:42:21 +01:00
Christoph Strobl
c958a2c0d0 DATAJDBC-308 - Prepare 1.1 M2 (Moore). 2019-03-07 09:41:17 +01:00
Christoph Strobl
722d5af548 DATAJDBC-308 - Updated changelog. 2019-03-07 09:41:09 +01:00
Mark Paluch
1764457835 DATAJDBC-326 - Polishing.
Add Javadoc. Tweak naming and factory methods. Add equals/hashcode to Identifier. Extend tests.

Original pull request: #118.
2019-03-05 15:19:32 +01:00
Jens Schauder
ade3324e2c DATAJDBC-326 - Support conversion of backreferences.
Ids used as backreferences now get properly converted.

Introduced Identifier to hold information about data that needs to be considered for inserts or updates but is not part of the entity.
Apart from column names and values they also hold information about the desired JdbcType in order to facilitate conversions.
This replaces the Map handed around in the past.

Original pull request: #118.
2019-03-05 15:18:37 +01:00
Jens Schauder
8eb80ba5cc DATAJDBC-335 - Address review comments.
Original pull request: #121.
2019-03-05 10:24:29 +01:00
Jens Schauder
94a8932b9e DATAJDBC-335 - Polishing.
Formatting and one additional test.

Original pull request: #121.
2019-03-05 10:24:22 +01:00
Mark Paluch
a11c121407 DATAJDBC-335 - Add DSL and renderer for Insert, Update, and Delete.
We now provide Statement builders for Insert, Update, and Delete statements.

Table myTable = SQL.table("mytable");

Insert insert = StatementBuilder.insert().into(myTable).values(SQL.bindMarker()).build();

Update update = StatementBuilder.update(table).set(myTable.column("foo").set(SQL.bindMarker())).build();

Delete delete = StatementBuilder.delete().from(table).where(myTable.column("foo").isEqualTo(SQL.literal("bar"))).build();

Original pull request: #121.
2019-03-05 10:23:45 +01:00
Greg Turnquist
2aa44a38fd DATAJDBC-316 - Polishing. 2019-02-28 11:47:30 -06:00
Greg Turnquist
2835e78ec2 DATAJDBC-316 - Introduce Concourse. 2019-02-28 11:26:59 -06:00
Mark Paluch
307fe5198e DATAJDBC-309 - Polishing.
Javadoc, static factory methods, typos. Refactor SQL rendering from a shared stack-based implementation to independent delegating visitors. Introduce DelegatingVisitor and TypedSubtreeVisitor base classes. Introduce SelectList container. Extract nested renderes to top-level types.

Move SQL renderer to renderer package.

Extend In to multi-expression argument. Introduce helper methods in Table to create multiple columns. Introduce factory method on StatementBuilder to create a new builder given a collection of expressions.

Add support for comparison conditions and LIKE and equal/not equal/less with equals to/greater with equals to conditions.

 Add condition creation methods to Column so Column objects can now create conditions for a fluent DSL as in (.where(left.isGreater(right)).

StatementBuilder.select(left).from(table).where(left.isGreater(right)).build().

Introduce RenderContext and RenderNamingStrategy.

Add since tags. Improve Javadoc.

Original pull request: #119.
2019-02-26 13:35:28 +01:00
Jens Schauder
1c9fad853f DATAJDBC-309 - Reworked visitor structure towards a more modular design.
Also added support for conditions.

Original pull request: #119.
2019-02-26 13:35:24 +01:00
Mark Paluch
10b38c5043 DATAJDBC-309 - Add Statement Builder API for SELECT.
We now provide a Statement Builder API along with a renderer to build statement object graphs and to render these to SQL.

SelectBuilder builder = StatementBuilder.select();

Table employee = SQL.table("employee");
Table department = SQL.table("department");

Column name = employee.column("name").as("emp_name");
Column department_name = employee.column("name").as("department_name");

Select select = builder.select(name, department_name).from(employee).join(department)
		.on(SQL.column("department_id", employee)).equals(SQL.column("id", department))
		.and(SQL.column("tenant", employee)).equals(SQL.column("tenant", department))
		.orderBy(OrderByField.from(name).asc()).build();

String sql = SqlRenderer.render(select);

Original pull request: #119.
2019-02-26 13:32:45 +01:00
Jens Schauder
2b9ae3ef73 DATAJDBC-334 - Polishing.
Original pull request: #120.
2019-02-19 09:29:07 +01:00
Bastian Wilhelm
0f7ca81017 DATAJDBC-334 - Fixes broken parameter names for quoted column names.
When a column has a quoted name it contains characters illegal for parameter names.
Therefore the parameter names now get sanitised.

Original pull request: #120.
2019-02-19 09:29:08 +01:00
Mark Paluch
61a54cac84 DATAJDBC-331 - Polishing.
Simplify column name discovery using Optionals utility methods. Add test to verify Column annotation precedence.

Javadoc, formatting.

Original pull request: #117.
2019-02-13 17:19:25 +01:00