Skip to content

Commit 4f9385f

Browse files
committed
Merge branch 'release/1.1.4'
2 parents ce68aed + 75ecaa2 commit 4f9385f

File tree

61 files changed

+734
-231
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+734
-231
lines changed

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ jobs:
3636
fast_finish: true
3737
allow_failures:
3838
- env: srv=build
39+
- env: srv=xpand
3940
include:
4041
- stage: Minimal
4142
env: srv=mariadb v=10.6 local=1
@@ -55,6 +56,8 @@ jobs:
5556
name: "SkySQL"
5657
- env: srv=skysql-ha
5758
name: "SkySQL with replication"
59+
- env: srv=xpand
60+
name: "Xpand"
5861

5962
- stage: Community
6063
env: srv=mariadb v=10.6

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Change Log
22

3+
## [1.1.4](https://github.com/mariadb-corporation/mariadb-connector-r2dbc/tree/1.1.4) (16 Mar 2023)
4+
[Full Changelog](https://github.com/mariadb-corporation/mariadb-connector-r2dbc/compare/1.1.3...1.1.4)
5+
6+
Bugs Fixed:
7+
8+
* [R2DBC-76] Wrong MEDIUM field binary decoding
9+
* [R2DBC-77] Metadata is null when using returnGeneratedValues on server before 10.5
10+
* [R2DBC-79] Wrong client side parsing for named parameter when using user variable
11+
* [R2DBC-80] add option to disable hostname verification for SslMode.TUNNEL. thanks to @shubha-rajan
12+
* [R2DBC-81] missing parsing/builder variables for option restrictedAuth,rsaPublicKey,cachingRsaPublicKey and allowPublicKeyRetrievalString
13+
* [R2DBC-82] wrong transactionIsolation level set/get with server without session tracking
14+
* [R2DBC-85] adding hint in order to execute text command when useServerPrepStmts option is set
15+
* [R2DBC-83] support xpand 0000-00-00 timestamp/date encoding
16+
17+
18+
319
## [1.1.3](https://github.com/mariadb-corporation/mariadb-connector-r2dbc/tree/1.1.3) (22 Dec 2022)
420
[Full Changelog](https://github.com/mariadb-corporation/mariadb-connector-r2dbc/compare/1.1.2...1.1.3)
521

README.md

Lines changed: 35 additions & 34 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<modelVersion>4.0.0</modelVersion>
1212
<groupId>org.mariadb</groupId>
1313
<artifactId>r2dbc-mariadb</artifactId>
14-
<version>1.1.3</version>
14+
<version>1.1.4</version>
1515
<packaging>jar</packaging>
1616
<url>https://github.com/mariadb-corporation/mariadb-connector-r2dbc</url>
1717

src/main/java/org/mariadb/r2dbc/MariadbConnection.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public MariadbStatement createStatement(String sql) {
9898
throw new IllegalArgumentException("Statement cannot be empty.");
9999
}
100100

101-
if (this.configuration.useServerPrepStmts() || sql.contains("call")) {
101+
if ((this.configuration.useServerPrepStmts() || sql.contains("call")) && !sql.startsWith("/*text*/")) {
102102
return new MariadbServerParameterizedQueryStatement(this.client, sql, this.configuration);
103103
}
104104
return new MariadbClientParameterizedQueryStatement(this.client, sql, this.configuration);
@@ -112,7 +112,7 @@ public MariadbConnectionMetadata getMetadata() {
112112
@Override
113113
public IsolationLevel getTransactionIsolationLevel() {
114114
if (isolationLevel != null) return isolationLevel;
115-
if ((client.getContext().getClientCapabilities() | Capabilities.CLIENT_SESSION_TRACK) > 0
115+
if ((client.getContext().getClientCapabilities() & Capabilities.CLIENT_SESSION_TRACK) > 0
116116
&& client.getContext().getIsolationLevel() != null)
117117
return client.getContext().getIsolationLevel();
118118
return this.sessionIsolationLevel;
@@ -221,7 +221,7 @@ public Mono<Void> setStatementTimeout(Duration timeout) {
221221
public Mono<Void> setTransactionIsolationLevel(IsolationLevel isolationLevel) {
222222
Assert.requireNonNull(isolationLevel, "isolationLevel must not be null");
223223

224-
if ((client.getContext().getClientCapabilities() | Capabilities.CLIENT_SESSION_TRACK) > 0
224+
if ((client.getContext().getClientCapabilities() & Capabilities.CLIENT_SESSION_TRACK) > 0
225225
&& client.getContext().getIsolationLevel() != null
226226
&& client.getContext().getIsolationLevel().equals(isolationLevel)) return Mono.empty();
227227

src/main/java/org/mariadb/r2dbc/MariadbConnectionConfiguration.java

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ private MariadbConnectionConfiguration(
9595
boolean tinyInt1isBit,
9696
String restrictedAuth,
9797
@Nullable LoopResources loopResources,
98-
@Nullable UnaryOperator<SslContextBuilder> sslContextBuilderCustomizer) {
98+
@Nullable UnaryOperator<SslContextBuilder> sslContextBuilderCustomizer,
99+
boolean sslTunnelDisableHostVerification) {
99100
this.haMode = haMode == null ? HaMode.NONE : HaMode.from(haMode);
100101
this.connectTimeout = connectTimeout == null ? Duration.ofSeconds(10) : connectTimeout;
101102
this.tcpKeepAlive = tcpKeepAlive == null ? Boolean.FALSE : tcpKeepAlive;
@@ -128,6 +129,7 @@ private MariadbConnectionConfiguration(
128129
clientSslKey,
129130
clientSslPassword,
130131
tlsProtocol,
132+
sslTunnelDisableHostVerification,
131133
sslContextBuilderCustomizer);
132134
}
133135
this.rsaPublicKey = rsaPublicKey;
@@ -195,6 +197,28 @@ public static Builder fromOptions(ConnectionFactoryOptions connectionFactoryOpti
195197
connectionFactoryOptions.getValue(MariadbConnectionFactoryProvider.TCP_KEEP_ALIVE)));
196198
}
197199

200+
if (connectionFactoryOptions.hasOption(
201+
MariadbConnectionFactoryProvider.ALLOW_PUBLIC_KEY_RETRIEVAL)) {
202+
builder.allowPublicKeyRetrieval(
203+
boolValue(
204+
connectionFactoryOptions.getValue(
205+
MariadbConnectionFactoryProvider.ALLOW_PUBLIC_KEY_RETRIEVAL)));
206+
}
207+
208+
if (connectionFactoryOptions.hasOption(
209+
MariadbConnectionFactoryProvider.CACHING_RSA_PUBLIC_KEY)) {
210+
builder.cachingRsaPublicKey(
211+
(String)
212+
connectionFactoryOptions.getValue(
213+
MariadbConnectionFactoryProvider.CACHING_RSA_PUBLIC_KEY));
214+
}
215+
216+
if (connectionFactoryOptions.hasOption(MariadbConnectionFactoryProvider.RSA_PUBLIC_KEY)) {
217+
builder.rsaPublicKey(
218+
(String)
219+
connectionFactoryOptions.getValue(MariadbConnectionFactoryProvider.RSA_PUBLIC_KEY));
220+
}
221+
198222
if (connectionFactoryOptions.hasOption(MariadbConnectionFactoryProvider.TCP_ABORTIVE_CLOSE)) {
199223
builder.tcpAbortiveClose(
200224
boolValue(
@@ -316,13 +340,28 @@ public static Builder fromOptions(ConnectionFactoryOptions connectionFactoryOpti
316340
}
317341
builder.pamOtherPwd(pairs);
318342
}
343+
344+
if (connectionFactoryOptions.hasOption(MariadbConnectionFactoryProvider.RESTRICTED_AUTH)) {
345+
builder.restrictedAuth(
346+
(String)
347+
connectionFactoryOptions.getValue(MariadbConnectionFactoryProvider.RESTRICTED_AUTH));
348+
}
349+
319350
if (connectionFactoryOptions.hasOption(MariadbConnectionFactoryProvider.LOOP_RESOURCES)) {
320351
LoopResources loopResources =
321352
(LoopResources)
322353
connectionFactoryOptions.getValue(MariadbConnectionFactoryProvider.LOOP_RESOURCES);
323354
builder.loopResources(loopResources);
324355
}
325356

357+
if (connectionFactoryOptions.hasOption(
358+
MariadbConnectionFactoryProvider.SSL_TUNNEL_DISABLE_HOST_VERIFICATION)) {
359+
builder.sslTunnelDisableHostVerification(
360+
boolValue(
361+
connectionFactoryOptions.getValue(
362+
MariadbConnectionFactoryProvider.SSL_TUNNEL_DISABLE_HOST_VERIFICATION)));
363+
}
364+
326365
if (connectionFactoryOptions.hasOption(
327366
MariadbConnectionFactoryProvider.SSL_CONTEXT_BUILDER_CUSTOMIZER)) {
328367
builder.sslContextBuilderCustomizer(
@@ -539,7 +578,7 @@ public String toString() {
539578
+ ", pamOtherPwd="
540579
+ hiddenPamPwd
541580
+ ", restrictedAuth="
542-
+ restrictedAuth
581+
+ (restrictedAuth == null ? "" : Arrays.toString(restrictedAuth))
543582
+ '}';
544583
}
545584

@@ -587,6 +626,8 @@ public static final class Builder implements Cloneable {
587626

588627
private Builder() {}
589628

629+
private boolean sslTunnelDisableHostVerification;
630+
590631
/**
591632
* Returns a configured {@link MariadbConnectionConfiguration}.
592633
*
@@ -641,7 +682,8 @@ public MariadbConnectionConfiguration build() {
641682
this.tinyInt1isBit,
642683
this.restrictedAuth,
643684
this.loopResources,
644-
this.sslContextBuilderCustomizer);
685+
this.sslContextBuilderCustomizer,
686+
this.sslTunnelDisableHostVerification);
645687
}
646688

647689
/**
@@ -976,6 +1018,11 @@ public Builder sslContextBuilderCustomizer(
9761018
return this;
9771019
}
9781020

1021+
public Builder sslTunnelDisableHostVerification(boolean sslTunnelDisableHostVerification) {
1022+
this.sslTunnelDisableHostVerification = sslTunnelDisableHostVerification;
1023+
return this;
1024+
}
1025+
9791026
@Override
9801027
public Builder clone() throws CloneNotSupportedException {
9811028
return (Builder) super.clone();
@@ -1054,6 +1101,8 @@ public String toString() {
10541101
+ clientSslPassword
10551102
+ ", sslMode="
10561103
+ sslMode
1104+
+ ", sslTunnelDisableHostVerification="
1105+
+ sslTunnelDisableHostVerification
10571106
+ ", pamOtherPwd="
10581107
+ hiddenPamPwd
10591108
+ ", tinyInt1isBit="

src/main/java/org/mariadb/r2dbc/MariadbConnectionFactoryProvider.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public final class MariadbConnectionFactoryProvider implements ConnectionFactory
2525
public static final Option<Boolean> ALLOW_PIPELINING = Option.valueOf("allowPipelining");
2626
public static final Option<Boolean> USE_SERVER_PREPARE = Option.valueOf("useServerPrepStmts");
2727
public static final Option<String> ISOLATION_LEVEL = Option.valueOf("isolationLevel");
28-
public static final Option<Boolean> AUTO_COMMIT = Option.valueOf("autoCommit");
28+
public static final Option<Boolean> AUTO_COMMIT = Option.valueOf("autocommit");
2929
public static final Option<Boolean> TINY_IS_BIT = Option.valueOf("tinyInt1isBit");
3030
public static final Option<Integer> PREPARE_CACHE_SIZE = Option.valueOf("prepareCacheSize");
3131
public static final Option<String> SSL_MODE = Option.valueOf("sslMode");
@@ -38,8 +38,18 @@ public final class MariadbConnectionFactoryProvider implements ConnectionFactory
3838
public static final Option<Boolean> TCP_ABORTIVE_CLOSE = Option.valueOf("tcpAbortiveClose");
3939
public static final Option<String> SESSION_VARIABLES = Option.valueOf("sessionVariables");
4040
public static final Option<LoopResources> LOOP_RESOURCES = Option.valueOf("loopResources");
41+
public static final Option<Boolean> ALLOW_PUBLIC_KEY_RETRIEVAL =
42+
Option.valueOf("allowPublicKeyRetrieval");
43+
44+
public static final Option<String> CACHING_RSA_PUBLIC_KEY = Option.valueOf("cachingRsaPublicKey");
45+
public static final Option<String> RSA_PUBLIC_KEY = Option.valueOf("rsaPublicKey");
46+
47+
public static final Option<String> RESTRICTED_AUTH = Option.valueOf("restrictedAuth");
48+
4149
public static final Option<UnaryOperator<SslContextBuilder>> SSL_CONTEXT_BUILDER_CUSTOMIZER =
4250
Option.valueOf("sslContextBuilderCustomizer");
51+
public static final Option<Boolean> SSL_TUNNEL_DISABLE_HOST_VERIFICATION =
52+
Option.valueOf("sslTunnelDisableHostVerification");
4353

4454
static MariadbConnectionConfiguration createConfiguration(
4555
ConnectionFactoryOptions connectionFactoryOptions) {

src/main/java/org/mariadb/r2dbc/authentication/standard/Sha256PasswordPluginFlow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public ClientMessage next(
113113
} else {
114114
if (!configuration.allowPublicKeyRetrieval()) {
115115
throw new R2dbcNonTransientResourceException(
116-
"RSA public key is not available client side (option " + "serverRsaPublicKeyFile)",
116+
"RSA public key is not available client side (option serverRsaPublicKeyFile)",
117117
"S1009");
118118
}
119119
state = State.REQUEST_SERVER_KEY;

src/main/java/org/mariadb/r2dbc/client/SimpleClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ protected SimpleClient(
106106
sslContext.newEngine(
107107
connection.channel().alloc(), hostAddress.getHost(), hostAddress.getPort());
108108
SSLParameters sslParameters = engine.getSSLParameters();
109-
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
109+
if (!configuration.getSslConfig().tunnelHostVerificationDisabled()) {
110+
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
111+
}
110112
engine.setSSLParameters(sslParameters);
111113
} else {
112114
engine = sslContext.newEngine(connection.channel().alloc());

src/main/java/org/mariadb/r2dbc/codec/list/BigDecimalCodec.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ public BigDecimal decodeBinary(
109109
return BigDecimal.valueOf((int) buf.readShortLE());
110110

111111
case MEDIUMINT:
112-
if (!column.isSigned()) {
113-
return BigDecimal.valueOf((buf.readUnsignedMediumLE()));
114-
}
115-
return BigDecimal.valueOf(buf.readMediumLE());
112+
BigDecimal v =
113+
BigDecimal.valueOf(column.isSigned() ? buf.readMediumLE() : buf.readUnsignedMediumLE());
114+
buf.readByte(); // needed since binary protocol exchange for medium are on 4 bytes
115+
return v;
116116

117117
case INTEGER:
118118
if (!column.isSigned()) {

0 commit comments

Comments
 (0)