Skip to content

Commit c56cb01

Browse files
committed
Handling for MariaDB versions
1 parent c671fe2 commit c56cb01

File tree

7 files changed

+35
-13
lines changed

7 files changed

+35
-13
lines changed

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLDatabaseMetaData.java renamed to vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLDatabaseMetadata.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
package io.vertx.mysqlclient.impl;
22

3+
import java.util.Objects;
4+
35
import io.vertx.sqlclient.spi.DatabaseMetadata;
46

57
public class MySQLDatabaseMetadata implements DatabaseMetadata {
68

9+
private final String fullVersion;
10+
private final boolean isMariaDB;
711
private final int majorVersion;
812
private final int minorVersion;
913
private final int microVersion;
1014

1115
public MySQLDatabaseMetadata(String serverVersion) {
12-
// we assume the server version follows ${major}.${minor}.${micro} in https://dev.mysql.com/doc/refman/8.0/en/which-version.html
13-
String[] versionNumbers = serverVersion.split("\\.");
16+
fullVersion = serverVersion;
17+
isMariaDB = serverVersion.toUpperCase().contains("MARIADB");
18+
String[] versionNumbers;
19+
if (!isMariaDB) {
20+
// we assume the server version follows ${major}.${minor}.${micro} in https://dev.mysql.com/doc/refman/8.0/en/which-version.html
21+
versionNumbers = serverVersion.split("\\.");
22+
} else {
23+
// server version follows ${junk}-${major}.${minor}.${micro}-MariaDB-${junk}
24+
String[] parts = serverVersion.split("-");
25+
versionNumbers = parts[1].split("\\.");
26+
}
1427
majorVersion = Integer.parseInt(versionNumbers[0]);
1528
minorVersion = Integer.parseInt(versionNumbers[1]);
1629
// we should truncate the possible suffixes here
@@ -24,19 +37,28 @@ public MySQLDatabaseMetadata(String serverVersion) {
2437
microVersion = Integer.parseInt(versionNumbers[2]);
2538
}
2639
}
40+
41+
public boolean isMariaDB() {
42+
return isMariaDB;
43+
}
2744

2845
@Override
29-
public String getProductName() {
30-
return "MySQL"; // TODO: Should this return MariaDB sometimes?
46+
public String productName() {
47+
return isMariaDB ? "MariaDB" : "MySQL";
48+
}
49+
50+
@Override
51+
public String fullVersion() {
52+
return fullVersion;
3153
}
3254

3355
@Override
34-
public int getMajorVersion() {
56+
public int majorVersion() {
3557
return majorVersion;
3658
}
3759

3860
@Override
39-
public int getMinorVersion() {
61+
public int minorVersion() {
4062
return minorVersion;
4163
}
4264

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/codec/InitialHandshakeCommandCodec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ private void handleInitialHandshake(ByteBuf payload) {
6969
String serverVersion = BufferUtils.readNullTerminatedString(payload, StandardCharsets.US_ASCII);
7070
MySQLDatabaseMetadata md = new MySQLDatabaseMetadata(serverVersion);
7171
((MySQLSocketConnection)cmd.connection()).metaData = md;
72-
if (md.getMajorVersion() == 5 &&
73-
(md.getMinorVersion() < 7 || (md.getMinorVersion() == 7 && md.getDatabasMicroVersion() < 5))) {
72+
if (md.majorVersion() == 5 &&
73+
(md.minorVersion() < 7 || (md.minorVersion() == 7 && md.getDatabasMicroVersion() < 5))) {
7474
// EOF_HEADER is enabled
7575
} else {
7676
encoder.clientCapabilitiesFlag |= CLIENT_DEPRECATE_EOF;

vertx-mysql-client/src/test/java/io/vertx/mysqlclient/tck/MySQLConnectionTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ public void tearDown(TestContext ctx) {
4040
@Override
4141
protected void validateDatabaseMetaData(TestContext ctx, DatabaseMetadata md) {
4242
if (rule.isUsingMariaDB()) {
43-
ctx.assertTrue(md.getMajorVersion() >= 10);
43+
ctx.assertTrue(md.majorVersion() >= 10, "Expected DB major version >= 10 but was " + md.majorVersion());
4444
}
4545
else if (rule.isUsingMySQL5_6()) {
46-
ctx.assertEquals(5, md.getMajorVersion());
47-
ctx.assertEquals(6, md.getMinorVersion());
46+
ctx.assertEquals(5, md.majorVersion());
47+
ctx.assertEquals(6, md.minorVersion());
4848
}
4949
else if (rule.isUsingMySQL8()) {
50-
ctx.assertEquals(8, md.getMajorVersion());
50+
ctx.assertEquals(8, md.majorVersion());
5151
}
5252
else {
53-
ctx.assertTrue(md.getMajorVersion() >= 5);
53+
ctx.assertTrue(md.majorVersion() >= 5, "Expected DB major version >= 5 but was " + md.majorVersion());
5454
}
5555
}
5656
}

0 commit comments

Comments
 (0)