Skip to content

Commit 0f2fda0

Browse files
committed
Add database kind property to SqlConnectOptions
1 parent 0a1a058 commit 0f2fda0

File tree

19 files changed

+222
-5
lines changed

19 files changed

+222
-5
lines changed

vertx-db2-client/src/main/asciidoc/dataobjects.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
|[[hostnameVerificationAlgorithm]]`@hostnameVerificationAlgorithm`|`String`|-
2424
|[[idleTimeout]]`@idleTimeout`|`Number (int)`|-
2525
|[[idleTimeoutUnit]]`@idleTimeoutUnit`|`link:enums.html#TimeUnit[TimeUnit]`|-
26+
|[[kind]]`@kind`|`String`|-
2627
|[[localAddress]]`@localAddress`|`String`|-
2728
|[[logActivity]]`@logActivity`|`Boolean`|-
2829
|[[metricsName]]`@metricsName`|`String`|-

vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.vertx.db2client.impl.DB2ConnectionUriParser;
2727
import io.vertx.db2client.impl.drda.SQLState;
2828
import io.vertx.db2client.impl.drda.SqlCode;
29+
import io.vertx.db2client.spi.DB2Driver;
2930
import io.vertx.sqlclient.SqlConnectOptions;
3031

3132
/**
@@ -88,6 +89,22 @@ public DB2ConnectOptions(DB2ConnectOptions other) {
8889
super(other);
8990
this.pipeliningLimit = other.pipeliningLimit;
9091
}
92+
93+
@Override
94+
public String getKind() {
95+
return DB2Driver.KIND;
96+
}
97+
98+
@Override
99+
public DB2ConnectOptions setKind(String kind) {
100+
Objects.requireNonNull(kind, "Database kind must be non-null");
101+
// Tolerate setting the kind to DB2, but raise an error otherwise
102+
if (!DB2Driver.KIND.equalsIgnoreCase(kind)) {
103+
throw new IllegalArgumentException("Database kind for " + getClass() +
104+
" must be of type " + DB2Driver.KIND + " but " + kind + " was specified");
105+
}
106+
return this;
107+
}
91108

92109
@Override
93110
public DB2ConnectOptions setHost(String host) {
@@ -182,6 +199,7 @@ public DB2ConnectOptions addProperty(String key, String value) {
182199
protected void init() {
183200
this.setHost(DEFAULT_HOST);
184201
this.setPort(DEFAULT_PORT);
202+
this.setKind(DB2Driver.KIND);
185203
this.setProperties(new HashMap<>(DEFAULT_CONNECTION_ATTRIBUTES));
186204
}
187205

vertx-db2-client/src/main/java/io/vertx/db2client/DB2Exception.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ public String getSqlState() {
5555
*/
5656
@Override
5757
public String getMessage() {
58-
return super.getMessage();
58+
return super.getMessage() + "; errorCode=" + errorCode + "; sqlState=" + sqlState;
5959
}
6060
}

vertx-db2-client/src/main/java/io/vertx/db2client/spi/DB2Driver.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@
1818
import io.vertx.core.Vertx;
1919
import io.vertx.db2client.DB2ConnectOptions;
2020
import io.vertx.db2client.DB2Pool;
21+
import io.vertx.sqlclient.DatabaseKind;
2122
import io.vertx.sqlclient.Pool;
2223
import io.vertx.sqlclient.PoolOptions;
2324
import io.vertx.sqlclient.SqlConnectOptions;
2425
import io.vertx.sqlclient.spi.Driver;
2526

2627
public class DB2Driver implements Driver {
28+
29+
public static final String KIND = DatabaseKind.DB2;
2730

2831
@Override
2932
public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) {
@@ -37,7 +40,14 @@ public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolO
3740

3841
@Override
3942
public boolean acceptsOptions(SqlConnectOptions options) {
40-
return options instanceof DB2ConnectOptions || SqlConnectOptions.class.equals(options.getClass());
43+
if (options instanceof DB2ConnectOptions) {
44+
return true;
45+
}
46+
if (SqlConnectOptions.class.equals(options.getClass())) {
47+
return KIND.equalsIgnoreCase(options.getKind()) ||
48+
SqlConnectOptions.DEFAULT_KIND.equalsIgnoreCase(options.getKind());
49+
}
50+
return false;
4151
}
4252

4353
private static DB2ConnectOptions wrap(SqlConnectOptions options) {

vertx-db2-client/src/test/java/io/vertx/db2client/tck/DB2DriverTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,10 @@ public void printTestName(TestContext ctx) throws Exception {
4545
protected SqlConnectOptions defaultOptions() {
4646
return rule.options();
4747
}
48+
49+
@Override
50+
protected String getKind() {
51+
return "db2";
52+
}
4853

4954
}

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/MSSQLConnectOptions.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@
2424
import io.vertx.core.net.ProxyOptions;
2525
import io.vertx.core.net.SSLEngineOptions;
2626
import io.vertx.core.net.TrustOptions;
27+
import io.vertx.db2client.DB2ConnectOptions;
28+
import io.vertx.db2client.spi.DB2Driver;
29+
import io.vertx.mssqlclient.spi.MSSQLDriver;
2730
import io.vertx.sqlclient.SqlConnectOptions;
2831

2932
import java.util.HashMap;
3033
import java.util.Map;
34+
import java.util.Objects;
3135
import java.util.Set;
3236
import java.util.concurrent.TimeUnit;
3337

@@ -68,6 +72,22 @@ public MSSQLConnectOptions(SqlConnectOptions other) {
6872
public MSSQLConnectOptions(MSSQLConnectOptions other) {
6973
super(other);
7074
}
75+
76+
@Override
77+
public String getKind() {
78+
return MSSQLDriver.KIND;
79+
}
80+
81+
@Override
82+
public MSSQLConnectOptions setKind(String kind) {
83+
Objects.requireNonNull(kind, "Database kind must be non-null");
84+
// Tolerate setting the kind to the same thing, but raise an error otherwise
85+
if (!MSSQLDriver.KIND.equalsIgnoreCase(kind)) {
86+
throw new IllegalArgumentException("Database kind for " + getClass() +
87+
" must be of type " + MSSQLDriver.KIND + " but " + kind + " was specified");
88+
}
89+
return this;
90+
}
7191

7292
@Override
7393
public MSSQLConnectOptions setHost(String host) {
@@ -323,6 +343,7 @@ protected void init() {
323343
this.setUser(DEFAULT_USER);
324344
this.setPassword(DEFAULT_PASSWORD);
325345
this.setDatabase(DEFAULT_SCHEMA);
346+
this.setKind(MSSQLDriver.KIND);
326347
this.setProperties(new HashMap<>(DEFAULT_PROPERTIES));
327348
}
328349

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/spi/MSSQLDriver.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@
1818
import io.vertx.core.Vertx;
1919
import io.vertx.mssqlclient.MSSQLConnectOptions;
2020
import io.vertx.mssqlclient.MSSQLPool;
21+
import io.vertx.sqlclient.DatabaseKind;
2122
import io.vertx.sqlclient.Pool;
2223
import io.vertx.sqlclient.PoolOptions;
2324
import io.vertx.sqlclient.SqlConnectOptions;
2425
import io.vertx.sqlclient.spi.Driver;
2526

2627
public class MSSQLDriver implements Driver {
28+
29+
public static final String KIND = DatabaseKind.MICROSOFT_SQL_SERVER;
2730

2831
@Override
2932
public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) {
@@ -37,7 +40,14 @@ public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolO
3740

3841
@Override
3942
public boolean acceptsOptions(SqlConnectOptions options) {
40-
return options instanceof MSSQLConnectOptions || SqlConnectOptions.class.equals(options.getClass());
43+
if (options instanceof MSSQLConnectOptions) {
44+
return true;
45+
}
46+
if (SqlConnectOptions.class.equals(options.getClass())) {
47+
return KIND.equalsIgnoreCase(options.getKind()) ||
48+
SqlConnectOptions.DEFAULT_KIND.equalsIgnoreCase(options.getKind());
49+
}
50+
return false;
4151
}
4252

4353
private static MSSQLConnectOptions wrap(SqlConnectOptions options) {

vertx-mssql-client/src/test/java/io/vertx/mssqlclient/tck/MSSQLDriverTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,10 @@ public class MSSQLDriverTest extends DriverTestBase {
3333
protected SqlConnectOptions defaultOptions() {
3434
return rule.options();
3535
}
36+
37+
@Override
38+
protected String getKind() {
39+
return "sqlserver";
40+
}
3641

3742
}

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/MySQLConnectOptions.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import io.vertx.core.net.*;
1919
import io.vertx.mysqlclient.impl.MySQLCollation;
2020
import io.vertx.mysqlclient.impl.MySQLConnectionUriParser;
21+
import io.vertx.mysqlclient.spi.MySQLDriver;
22+
import io.vertx.sqlclient.DatabaseKind;
2123
import io.vertx.sqlclient.SqlConnectOptions;
2224

2325
import java.nio.charset.Charset;
@@ -92,6 +94,22 @@ public MySQLConnectOptions(MySQLConnectOptions other) {
9294
this.serverRsaPublicKeyPath = other.serverRsaPublicKeyPath;
9395
this.serverRsaPublicKeyValue = other.serverRsaPublicKeyValue != null ? other.serverRsaPublicKeyValue.copy() : null;
9496
}
97+
98+
@Override
99+
public String getKind() {
100+
return MySQLDriver.KIND;
101+
}
102+
103+
@Override
104+
public MySQLConnectOptions setKind(String kind) {
105+
Objects.requireNonNull(kind, "Database kind must be non-null");
106+
// Tolerate setting the kind to the same thing, but raise an error otherwise
107+
if (!MySQLDriver.KIND.equalsIgnoreCase(kind) && !DatabaseKind.MARIADB.equalsIgnoreCase(kind)) {
108+
throw new IllegalArgumentException("Database kind for " + getClass() +
109+
" must be of type " + MySQLDriver.KIND + " or " + DatabaseKind.MARIADB + " but " + kind + " was specified");
110+
}
111+
return this;
112+
}
95113

96114
/**
97115
* Get the collation for the connection.
@@ -528,6 +546,7 @@ protected void init() {
528546
this.setUser(DEFAULT_USER);
529547
this.setPassword(DEFAULT_PASSWORD);
530548
this.setDatabase(DEFAULT_SCHEMA);
549+
this.setKind(MySQLDriver.KIND);
531550
this.setProperties(new HashMap<>(DEFAULT_CONNECTION_ATTRIBUTES));
532551
}
533552

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/spi/MySQLDriver.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@
1818
import io.vertx.core.Vertx;
1919
import io.vertx.mysqlclient.MySQLConnectOptions;
2020
import io.vertx.mysqlclient.MySQLPool;
21+
import io.vertx.sqlclient.DatabaseKind;
2122
import io.vertx.sqlclient.Pool;
2223
import io.vertx.sqlclient.PoolOptions;
2324
import io.vertx.sqlclient.SqlConnectOptions;
2425
import io.vertx.sqlclient.spi.Driver;
2526

2627
public class MySQLDriver implements Driver {
28+
29+
public static final String KIND = DatabaseKind.MYSQL;
2730

2831
@Override
2932
public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) {
@@ -37,7 +40,15 @@ public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolO
3740

3841
@Override
3942
public boolean acceptsOptions(SqlConnectOptions options) {
40-
return options instanceof MySQLConnectOptions || SqlConnectOptions.class.equals(options.getClass());
43+
if (options instanceof MySQLConnectOptions) {
44+
return true;
45+
}
46+
if (SqlConnectOptions.class.equals(options.getClass())) {
47+
return KIND.equalsIgnoreCase(options.getKind()) ||
48+
DatabaseKind.MARIADB.equalsIgnoreCase(options.getKind()) ||
49+
SqlConnectOptions.DEFAULT_KIND.equalsIgnoreCase(options.getKind());
50+
}
51+
return false;
4152
}
4253

4354
private static MySQLConnectOptions wrap(SqlConnectOptions options) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,10 @@ public class MySQLDriverTest extends DriverTestBase {
3434
protected SqlConnectOptions defaultOptions() {
3535
return rule.options();
3636
}
37+
38+
@Override
39+
protected String getKind() {
40+
return "mysql";
41+
}
3742

3843
}

vertx-pg-client/src/main/java/io/vertx/pgclient/PgConnectOptions.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,19 @@
1919

2020
import io.vertx.codegen.annotations.GenIgnore;
2121
import io.vertx.pgclient.impl.PgConnectionUriParser;
22+
import io.vertx.pgclient.spi.PgDriver;
2223
import io.vertx.codegen.annotations.DataObject;
2324
import io.vertx.core.buffer.Buffer;
2425
import io.vertx.core.json.JsonObject;
2526
import io.vertx.core.net.*;
27+
import io.vertx.db2client.DB2ConnectOptions;
28+
import io.vertx.db2client.spi.DB2Driver;
2629
import io.vertx.sqlclient.SqlConnectOptions;
2730

2831
import java.util.Collections;
2932
import java.util.HashMap;
3033
import java.util.Map;
34+
import java.util.Objects;
3135
import java.util.Set;
3236
import java.util.concurrent.TimeUnit;
3337

@@ -135,6 +139,24 @@ public PgConnectOptions(PgConnectOptions other) {
135139
pipeliningLimit = other.pipeliningLimit;
136140
sslMode = other.sslMode;
137141
}
142+
143+
@Override
144+
public String getKind() {
145+
return PgDriver.KIND;
146+
}
147+
148+
@Override
149+
public PgConnectOptions setKind(String kind) {
150+
Objects.requireNonNull(kind, "Database kind must be non-null");
151+
// Tolerate setting the kind to the same thing, but raise an error otherwise
152+
if (!PgDriver.KIND.equalsIgnoreCase(kind) &&
153+
!"postgre".equalsIgnoreCase(kind) &&
154+
!"postgres".equalsIgnoreCase(kind)) {
155+
throw new IllegalArgumentException("Database kind for " + getClass() +
156+
" must be of type " + PgDriver.KIND + ", postgre, or postgres but " + kind + " was specified");
157+
}
158+
return this;
159+
}
138160

139161
@Override
140162
public PgConnectOptions setHost(String host) {

vertx-pg-client/src/main/java/io/vertx/pgclient/spi/PgDriver.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import io.vertx.core.Vertx;
44
import io.vertx.pgclient.PgConnectOptions;
55
import io.vertx.pgclient.PgPool;
6+
import io.vertx.sqlclient.DatabaseKind;
67
import io.vertx.sqlclient.Pool;
78
import io.vertx.sqlclient.PoolOptions;
89
import io.vertx.sqlclient.SqlConnectOptions;
910
import io.vertx.sqlclient.spi.Driver;
1011

1112
public class PgDriver implements Driver {
13+
14+
public static final String KIND = DatabaseKind.POSTGRESQL;
1215

1316
@Override
1417
public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) {
@@ -22,7 +25,16 @@ public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolO
2225

2326
@Override
2427
public boolean acceptsOptions(SqlConnectOptions options) {
25-
return options instanceof PgConnectOptions || SqlConnectOptions.class.equals(options.getClass());
28+
if (options instanceof PgConnectOptions) {
29+
return true;
30+
}
31+
if (SqlConnectOptions.class.equals(options.getClass())) {
32+
return KIND.equalsIgnoreCase(options.getKind()) ||
33+
"postgre".equalsIgnoreCase(options.getKind()) ||
34+
"postgres".equalsIgnoreCase(options.getKind()) ||
35+
SqlConnectOptions.DEFAULT_KIND.equalsIgnoreCase(options.getKind());
36+
}
37+
return false;
2638
}
2739

2840
private static PgConnectOptions wrap(SqlConnectOptions options) {

vertx-pg-client/src/test/java/io/vertx/pgclient/tck/PgDriverTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,10 @@ public class PgDriverTest extends DriverTestBase {
3333
protected SqlConnectOptions defaultOptions() {
3434
return rule.options();
3535
}
36+
37+
@Override
38+
protected String getKind() {
39+
return "postgresql";
40+
}
3641

3742
}

vertx-sql-client/src/main/asciidoc/dataobjects.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ Specify the host for connecting to the server.
5050
|[[hostnameVerificationAlgorithm]]`@hostnameVerificationAlgorithm`|`String`|-
5151
|[[idleTimeout]]`@idleTimeout`|`Number (int)`|-
5252
|[[idleTimeoutUnit]]`@idleTimeoutUnit`|`link:enums.html#TimeUnit[TimeUnit]`|-
53+
|[[kind]]`@kind`|`String`|+++
54+
Specify the kind of database the connect options are for.
55+
+++
5356
|[[localAddress]]`@localAddress`|`String`|-
5457
|[[logActivity]]`@logActivity`|`Boolean`|-
5558
|[[metricsName]]`@metricsName`|`String`|-

vertx-sql-client/src/main/generated/io/vertx/sqlclient/SqlConnectOptionsConverter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json,
3030
obj.setHost((String)member.getValue());
3131
}
3232
break;
33+
case "kind":
34+
if (member.getValue() instanceof String) {
35+
obj.setKind((String)member.getValue());
36+
}
37+
break;
3338
case "password":
3439
if (member.getValue() instanceof String) {
3540
obj.setPassword((String)member.getValue());
@@ -81,6 +86,9 @@ public static void toJson(SqlConnectOptions obj, java.util.Map<String, Object> j
8186
if (obj.getHost() != null) {
8287
json.put("host", obj.getHost());
8388
}
89+
if (obj.getKind() != null) {
90+
json.put("kind", obj.getKind());
91+
}
8492
if (obj.getPassword() != null) {
8593
json.put("password", obj.getPassword());
8694
}

0 commit comments

Comments
 (0)