Commit Graph

31 Commits

Author SHA1 Message Date
Mark Paluch
68f1e0b0b3 #20 - Add Dialect initial support for H2, PostgreSQL, and Microsoft SQL Server.
We now provide dialect support for H2, PostgreSQL, and Microsoft SQL Server databases, configurable through AbstractR2dbcConfiguration. By default, we obtain the Dialect by inspecting ConnectionFactoryMetadata to identify the database and the most likely dialect to use.

BindableOperation encapsulates statements/queries that can accept parameters. Use BindableOperation for statements through DatabaseClient.
Extract SQL creation.

Split integration test into abstract base class that can be implemented with a database-specific test class.

Original pull request: #24.
2018-12-03 16:01:35 +01:00
Christoph Strobl
9f7d3863e5 #13 - Polishing.
Add missing header & package-info. Update nullability and add tests.

Original pull request: #17.
2018-11-21 10:21:17 +01:00
Mark Paluch
6267047f17 #16 - Add abstract configuration class for R2DBC.
We now provide an abstract R2DBC configuration that registers beans required for R2DBC's DatabaseClient.

Original pull request: #17.
2018-11-21 10:21:14 +01:00
Mark Paluch
881c97784b #13 - Add @EnableR2dbcRepositories.
We now provide an annotation-based activation model for R2DBC repositories. Configuration classes can be annotated with @EnableR2dbcRepositories and configuration infrastructure will scan for bean definitions to implement declared R2DBC repositories.

Original pull request: #17.
2018-11-21 10:21:07 +01:00
Mark Paluch
5df9b355eb #15 - Incorporate review feedback.
Improve Javadoc. Rename parameters for more expressiveness. Replace ASCII filtering with filter Function to move actual filtering into dialects.

Original pull request: #19.
2018-11-21 10:16:14 +01:00
Mark Paluch
9700c3c087 #15 - Add BindMarkers abstraction.
We now expose a bind marker API that allows to model a vendor-specific bind marker strategy. The currently supported database systems (Postgres, MsSql) implement indexed respective named strategies that differ in how placeholders and identifiers are generated.

Original pull request: #19.
2018-11-21 10:16:05 +01:00
Mark Paluch
226c80fb02 #12 - Retain input item order in save(…) methods.
We now use concatMap(…) instead of flatMap(…) when saving items to retain output item order.
2018-11-12 15:13:19 +01:00
Mark Paluch
93ddaff3c2 #11 - Adapt Statement.bind(…) calls to newly introduced positional (integer-arg) binding.
We now use bind(int, …) methods to bind parameters by index.
2018-11-12 15:04:29 +01:00
Mark Paluch
c2ebfb8cd3 #10 - Adapt to removed Statement.executeReturningGeneratedKeys(). 2018-11-12 15:00:27 +01:00
Mark Paluch
12dc98bcbd #2 - Polishing. 2018-10-17 11:11:16 +02:00
Mark Paluch
a5e2a8e61f #2 - Polishing.
Introduce customization hook methods. Rename DefaultTypedGenericExecuteSpec to DefaultTypedExecuteSpec and GenericExecuteSpecSupport to ExecuteSpecSupport as types are not tied to generic execution. Encapsulate fields in DatabaseClient builders.
2018-10-17 11:11:10 +02:00
Mark Paluch
20eb2c1a6d #2 - Resolve package cycle between r2dbc.function and r2dbc.function.convert. 2018-10-17 11:11:09 +02:00
Mark Paluch
f223475112 #2 - Adapt to R2DBC API changes. 2018-10-17 11:11:07 +02:00
Mark Paluch
1464df99d4 #2 - Add transactional support.
We now support transaction hosting and transaction management via TransactionalDatabaseClient.

TransactionalDatabaseClient databaseClient = TransactionalDatabaseClient.create(connectionFactory);

Flux<Integer> integerFlux = databaseClient.inTransaction(db -> {

	return db.execute().sql("INSERT INTO legoset (id, name, manual) VALUES($1, $2, $3)") //
			.bind(0, 42055) //
			.bind(1, "SCHAUFELRADBAGGER") //
			.bindNull("$3") //
			.fetch().rowsUpdated();
});
2018-10-17 11:11:06 +02:00
Oliver Gierke
853b3fb449 #2 - Adapt code to API changes. 2018-10-17 11:11:05 +02:00
Mark Paluch
900918fa54 #2 - Use java.lang.Long as fallback Id type.
We now use java.lang.Long as fallback Id type for entities that do not declare an explicit Id property. Previously we used ObjectId which was a left-over from the initial draft of MappingRelationalEntityInformation.
2018-10-17 11:11:02 +02:00
Mark Paluch
cccc3808aa #2 - Polishing. 2018-10-17 11:11:00 +02:00
Mark Paluch
831e753658 #2 - Introduce R2DBC exception translation.
We now provide exception translation for R2DBC exceptions based on Spring JDBC's SQLErrorCodes.
2018-10-17 11:10:58 +02:00
Oliver Gierke
c59ba067cc #2 - EntityRowMapper now prevents constructor argument properties from being read twice. 2018-10-17 11:10:55 +02:00
Mark Paluch
8b006abbe5 #2 - Create relational and r2dbc packages.
Move types into relational and r2dbc packages in preparation for a later module separation.
2018-10-17 11:10:54 +02:00
Mark Paluch
cee7479cd0 #2 - Exclude reactive repositories from JdbcRepositoryConfigExtension. 2018-10-17 11:10:51 +02:00
Mark Paluch
9d9c665f76 #2 - Polishing. 2018-10-17 11:10:50 +02:00
Mark Paluch
f794bfc3ab #2 - Add R2dbcRepositoryFactory and simple query subsystem. 2018-10-17 11:10:48 +02:00
Mark Paluch
28dee1274f #2 - Add updates to SimpleR2dbcRepository. 2018-10-17 11:10:45 +02:00
Mark Paluch
893149df8c #2 - Fix DefaultTypedInsertSpec.then(). 2018-10-17 11:10:40 +02:00
Mark Paluch
e8d3e055c6 #2 - Initial SimpleR2dbcRepository support. 2018-10-17 11:10:37 +02:00
Mark Paluch
4d5d310741 #2 - Add DatabaseClient.select().
We now allow typesafe and generic selection of rows.
2018-10-17 11:10:35 +02:00
Mark Paluch
1d5bb962fd #2 - Polishing. 2018-10-17 11:10:33 +02:00
Mark Paluch
ddc587e898 #2 - Introduce ConnectionAccessor.
Declare interface exposing inConnection(…) methods to encapsulate types implementing functionality that is applies within a connection scope. Move FetchSpec and SqlResult implementations to top-level types.
2018-10-17 11:10:31 +02:00
Mark Paluch
b8375f5a96 #2 - Refactor to functional usage of resources.
DatabaseClient now creates functions. The actual invocation/execution takes place from DefaultFetchFunctions (FetchSpec) to keep stateful resources in the scope of the execution. execute()/executeMany() use Flux.usingWhen/Mono.usingWhen to release connections after their usage.
2018-10-17 11:10:30 +02:00
Mark Paluch
c59e9a58eb #2 - Add DatabaseClient.
Provide DatabaseClient and add ExternalDatabase class to provide database connection details/encapsulate a dockerized testcontainer.
2018-10-17 11:10:20 +02:00