Skip to content

Commit bda0d23

Browse files
committed
Upgrade to R2DBC SPI 0.9 M2
[closes #212] Signed-off-by: Mark Paluch <mpaluch@vmware.com>
1 parent 823d7b6 commit bda0d23

File tree

4 files changed

+42
-12
lines changed

4 files changed

+42
-12
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
<mssql-jdbc.version>9.2.0.jre8</mssql-jdbc.version>
4646
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4747
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
48-
<r2dbc-spi.version>0.9.0.BUILD-SNAPSHOT</r2dbc-spi.version>
49-
<r2dbc-pool.version>0.9.0.M1</r2dbc-pool.version>
48+
<r2dbc-spi.version>0.9.0.M2</r2dbc-spi.version>
49+
<r2dbc-pool.version>0.9.0.BUILD-SNAPSHOT</r2dbc-pool.version>
5050
<reactor.version>2020.0.4</reactor.version>
5151
<spring-framework.version>5.2.9.RELEASE</spring-framework.version>
5252
<testcontainers.version>1.15.3</testcontainers.version>

src/main/java/io/r2dbc/mssql/MssqlConnection.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,16 @@ public Mono<Void> setAutoCommit(boolean autoCommit) {
313313
});
314314
}
315315

316+
@Override
317+
public Publisher<Void> setLockWaitTimeout(Duration timeout) {
318+
throw new UnsupportedOperationException("https://github.com/r2dbc/r2dbc-mssql/issues/214");
319+
}
320+
321+
@Override
322+
public Publisher<Void> setStatementTimeout(Duration timeout) {
323+
throw new UnsupportedOperationException("https://github.com/r2dbc/r2dbc-mssql/issues/213");
324+
}
325+
316326
@Override
317327
public MssqlConnectionMetadata getMetadata() {
318328
return this.metadata;

src/main/java/io/r2dbc/mssql/MssqlConnectionFactoryProvider.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,16 @@ public MssqlConnectionFactory create(ConnectionFactoryOptions connectionFactoryO
153153

154154
OptionMapper mapper = OptionMapper.create(connectionFactoryOptions);
155155

156-
mapper.from(APPLICATION_NAME).to(builder::applicationName);
156+
mapper.fromTyped(APPLICATION_NAME).to(builder::applicationName);
157157
mapper.from(CONNECTION_ID).map(OptionMapper::toUuid).to(builder::connectionId);
158158
mapper.from(CONNECT_TIMEOUT).map(OptionMapper::toDuration).to(builder::connectTimeout);
159-
mapper.from(DATABASE).to(builder::database);
160-
mapper.from(HOSTNAME_IN_CERTIFICATE).to(builder::hostNameInCertificate);
159+
mapper.fromTyped(DATABASE).to(builder::database);
160+
mapper.fromTyped(HOSTNAME_IN_CERTIFICATE).to(builder::hostNameInCertificate);
161161
mapper.from(PORT).map(OptionMapper::toInteger).to(builder::port);
162162
mapper.from(PREFER_CURSORED_EXECUTION).map(OptionMapper::toStringPredicate).to(builder::preferCursoredExecution);
163163
mapper.from(SEND_STRING_PARAMETERS_AS_UNICODE).map(OptionMapper::toBoolean).to(builder::sendStringParametersAsUnicode);
164164
mapper.from(SSL).to(builder::enableSsl);
165-
mapper.from(SSL_CONTEXT_BUILDER_CUSTOMIZER).to(builder::sslContextBuilderCustomizer);
165+
mapper.fromTyped(SSL_CONTEXT_BUILDER_CUSTOMIZER).to(builder::sslContextBuilderCustomizer);
166166
mapper.from(SSL_TUNNEL).map(it -> {
167167

168168
if (it instanceof Boolean) {
@@ -185,12 +185,12 @@ public MssqlConnectionFactory create(ConnectionFactoryOptions connectionFactoryO
185185
mapper.from(TCP_NODELAY).map(OptionMapper::toBoolean).to(builder::tcpNoDelay);
186186
mapper.from(TRUST_SERVER_CERTIFICATE).map(OptionMapper::toBoolean).to((Consumer<Boolean>) builder::trustServerCertificate);
187187
mapper.from(TRUST_STORE).map(OptionMapper::toFile).to(builder::trustStore);
188-
mapper.from(TRUST_STORE_TYPE).to(builder::trustStoreType);
188+
mapper.fromTyped(TRUST_STORE_TYPE).to(builder::trustStoreType);
189189
mapper.from(TRUST_STORE_PASSWORD).map(it -> it instanceof String ? ((String) it).toCharArray() : (char[]) it).to(builder::trustStorePassword);
190190

191-
builder.host(connectionFactoryOptions.getRequiredValue(HOST));
192-
builder.password(connectionFactoryOptions.getRequiredValue(PASSWORD));
193-
builder.username(connectionFactoryOptions.getRequiredValue(USER));
191+
builder.host(connectionFactoryOptions.getRequiredValue(HOST).toString());
192+
builder.password((CharSequence) connectionFactoryOptions.getRequiredValue(PASSWORD));
193+
builder.username(connectionFactoryOptions.getRequiredValue(USER).toString());
194194

195195
MssqlConnectionConfiguration configuration = builder.build();
196196
if (this.logger.isDebugEnabled()) {
@@ -204,7 +204,7 @@ public boolean supports(ConnectionFactoryOptions connectionFactoryOptions) {
204204

205205
Assert.requireNonNull(connectionFactoryOptions, "connectionFactoryOptions must not be null");
206206

207-
String driver = connectionFactoryOptions.getValue(DRIVER);
207+
Object driver = connectionFactoryOptions.getValue(DRIVER);
208208
if (driver == null || !(driver.equals(MSSQL_DRIVER) || driver.equals(ALTERNATE_MSSQL_DRIVER))) {
209209
return false;
210210
}

src/main/java/io/r2dbc/mssql/OptionMapper.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public static OptionMapper create(ConnectionFactoryOptions options) {
5959
* @param <T> inferred option type.
6060
* @return the source object.
6161
*/
62-
public <T> Source<T> from(Option<T> option) {
62+
public Source<Object> from(Option<?> option) {
6363

6464
if (this.options.hasOption(option)) {
6565

@@ -71,6 +71,26 @@ public <T> Source<T> from(Option<T> option) {
7171
return NullSource.instance();
7272
}
7373

74+
/**
75+
* Construct a new {@link Source} for a {@link Option} using type inference. Options without a value are not bound or mapped in the later stages of {@link Source}.
76+
*
77+
* @param option the option to apply.
78+
* @param <T> inferred option type.
79+
* @return the source object.
80+
*/
81+
@SuppressWarnings("unchecked")
82+
public <T> Source<T> fromTyped(Option<T> option) {
83+
84+
if (this.options.hasOption(option)) {
85+
86+
return new AvailableSource<>(() -> {
87+
return (T) this.options.getRequiredValue(option);
88+
}, option.name());
89+
}
90+
91+
return NullSource.instance();
92+
}
93+
7494
/**
7595
* Parse an {@link Option} to boolean.
7696
*/

0 commit comments

Comments
 (0)