Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
616f89e
Couple of missing module requires in tests
vietj Jun 30, 2025
8acb97f
Decouple ConnectionFactory from connection API.
vietj Jun 30, 2025
d7f63b2
Add generic driver with testing.
vietj Jun 30, 2025
4ccee4d
Avoid dealing with the command base handler when we can, since we wan…
vietj Jun 30, 2025
90e29f5
Refactor socket based clients to produce a command message from a com…
vietj Jun 30, 2025
0aa4093
Replace usage of CommandBase#handler by CommandMessage#handler
vietj Jun 30, 2025
3095bfb
Remove CommandBase#handler field, which ends a step in this refactoring.
vietj Jul 1, 2025
9f6ff0d
Cleanup in Oracle client, stop using CommandResponse which is actuall…
vietj Jul 1, 2025
32c48b7
Move CommandResponse to impl package.
vietj Jul 1, 2025
cd0ff4e
Make RowBase and RowDesc usable without creating subclasses.
vietj Jul 1, 2025
21a5be9
Move the pool implementation to the implementation package, it should…
vietj Jul 1, 2025
b25f240
Move connection factory specific methods to GenericDriver.
vietj Jul 1, 2025
e8ae268
Remove getProcessId/getSecretKey from Connection contract that is spe…
vietj Jul 1, 2025
0b2633b
Make ExtendedQueryCommand prepared statement immutable.
vietj Jul 1, 2025
2c2eac8
Various API cleanups
vietj Jul 1, 2025
c115ed2
Move relevant packages to SPI
vietj Jul 1, 2025
813c276
Various cleanups
vietj Jul 1, 2025
9f67c06
Isolate SocketConnectionBase in a package
vietj Jul 1, 2025
4ac1990
Extract the socket/codec classes in its own module.
vietj Jul 1, 2025
9eb2efd
Remove unused ParamDesc class.
vietj Jul 1, 2025
3f7862a
Various cleanups/renames
vietj Jul 1, 2025
ac14e24
More cleanups, introduced a RowDescriptor interface to expose what is…
vietj Jul 1, 2025
71b6cb7
Minor cleanup
vietj Jul 1, 2025
906079a
Move the Notification class that is PG specific to vertx-pg-client
vietj Jul 1, 2025
ded5767
Rename GenericDriver to DriverBase
vietj Jul 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>

<!-- TMP -->
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client-codec</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down Expand Up @@ -184,6 +191,7 @@
</activation>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-pg-client</module>
<module>vertx-mysql-client</module>
<module>vertx-mssql-client</module>
Expand All @@ -199,6 +207,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-pg-client</module>
</modules>
</profile>
Expand All @@ -209,6 +218,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-pg-client</module>
</modules>
</profile>
Expand All @@ -219,6 +229,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-pg-client</module>
</modules>
</profile>
Expand All @@ -230,6 +241,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mysql-client</module>
</modules>
</profile>
Expand All @@ -241,6 +253,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mysql-client</module>
</modules>
</profile>
Expand All @@ -252,6 +265,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mysql-client</module>
</modules>
</profile>
Expand All @@ -263,6 +277,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mysql-client</module>
</modules>
</profile>
Expand All @@ -273,6 +288,7 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mssql-client</module>
</modules>
</profile>
Expand All @@ -283,20 +299,23 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-mssql-client</module>
</modules>
</profile>
<profile>
<id>DB2-11.5</id>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-db2-client</module>
</modules>
</profile>
<profile>
<id>SQL-templates</id>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-pg-client</module>
<module>vertx-mysql-client</module>
<module>vertx-sql-client-templates</module>
Expand All @@ -309,9 +328,10 @@
</properties>
<modules>
<module>vertx-sql-client</module>
<module>vertx-sql-client-codec</module>
<module>vertx-oracle-client</module>
</modules>
</profile>
</profiles>

</project>
</project>
4 changes: 4 additions & 0 deletions vertx-db2-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client-codec</artifactId>
</dependency>

<!-- Testing purposes -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@
import io.vertx.core.spi.metrics.ClientMetrics;
import io.vertx.core.spi.metrics.VertxMetrics;
import io.vertx.db2client.DB2ConnectOptions;
import io.vertx.sqlclient.SqlConnection;
import io.vertx.sqlclient.internal.Connection;
import io.vertx.sqlclient.spi.connection.Connection;
import io.vertx.sqlclient.impl.ConnectionFactoryBase;

import java.util.Map;
Expand Down Expand Up @@ -65,15 +64,10 @@ protected Future<Connection> doConnectInternal(DB2ConnectOptions options, Contex
}

@Override
public Future<SqlConnection> connect(Context context, DB2ConnectOptions options) {
public Future<Connection> connect(Context context, DB2ConnectOptions options) {
ContextInternal contextInternal = (ContextInternal) context;
Promise<SqlConnection> promise = contextInternal.promise();
connect(asEventLoopContext(contextInternal), options)
.map(conn -> {
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(contextInternal, this, conn);
conn.init(db2Connection);
return (SqlConnection)db2Connection;
}).onComplete(promise);
Promise<Connection> promise = contextInternal.promise();
connect(asEventLoopContext(contextInternal), options).onComplete(promise);
return promise.future();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
import io.vertx.db2client.DB2Connection;
import io.vertx.db2client.impl.command.PingCommand;
import io.vertx.db2client.spi.DB2Driver;
import io.vertx.sqlclient.internal.Connection;
import io.vertx.sqlclient.spi.connection.Connection;
import io.vertx.sqlclient.internal.SqlConnectionBase;
import io.vertx.sqlclient.spi.ConnectionFactory;
import io.vertx.sqlclient.spi.connection.ConnectionFactory;

public class DB2ConnectionImpl extends SqlConnectionBase<DB2ConnectionImpl> implements DB2Connection {

Expand All @@ -37,7 +37,12 @@ public static Future<DB2Connection> connect(Vertx vertx, DB2ConnectOptions optio
} catch (Exception e) {
return ctx.failedFuture(e);
}
return prepareForClose(ctx, client.connect((Context)ctx, options)).map(DB2Connection::cast);
return client.connect((Context)ctx, options).map(conn -> {
DB2ConnectionImpl impl = new DB2ConnectionImpl(ctx, client, conn);
conn.init(impl);
prepareForClose(ctx, impl);
return impl;
});
}

public DB2ConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,18 @@
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.temporal.Temporal;
import java.util.List;
import java.util.UUID;

import io.vertx.core.buffer.Buffer;
import io.vertx.db2client.impl.drda.DB2RowId;
import io.vertx.sqlclient.data.Numeric;
import io.vertx.sqlclient.impl.RowBase;
import io.vertx.sqlclient.internal.RowDesc;
import io.vertx.sqlclient.internal.RowDescriptorBase;

public class DB2RowImpl extends RowBase {
public class DB2Row extends RowBase {

private final RowDesc rowDesc;

public DB2RowImpl(RowDesc rowDesc) {
super(rowDesc.columnNames().size());
this.rowDesc = rowDesc;
public DB2Row(RowDescriptorBase rowDescriptor) {
super(rowDescriptor);
}

@Override
Expand Down Expand Up @@ -82,23 +78,14 @@ public <T> T get(Class<T> type, int position) {
}
}

@Override
public String getColumnName(int pos) {
List<String> columnNames = rowDesc.columnNames();
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
}

@Override
public int getColumnIndex(String name) {
if (name == null) {
throw new NullPointerException();
}
int idx = rowDesc.columnIndex(name);
int idx = super.getColumnIndex(name);
if (idx >= 0) {
return idx;
}
// Unless the column is renamed in the SQL query, the column name will be uppercase
return rowDesc.columnIndex(name.toUpperCase());
return super.getColumnIndex(name.toUpperCase());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,31 @@
package io.vertx.db2client.impl;

import io.netty.channel.ChannelPipeline;
import io.vertx.core.AsyncResult;
import io.vertx.core.Completable;
import io.vertx.core.Handler;
import io.vertx.core.Promise;
import io.vertx.core.internal.ContextInternal;
import io.vertx.core.internal.net.NetSocketInternal;
import io.vertx.core.spi.metrics.ClientMetrics;
import io.vertx.db2client.DB2ConnectOptions;
import io.vertx.db2client.impl.codec.CommandCodec;
import io.vertx.db2client.impl.codec.DB2Codec;
import io.vertx.db2client.impl.codec.DB2PreparedStatement;
import io.vertx.db2client.impl.codec.ExtendedBatchQueryCommandCodec;
import io.vertx.db2client.impl.codec.ExtendedQueryCommandCodec;
import io.vertx.db2client.impl.command.InitialHandshakeCommand;
import io.vertx.db2client.impl.drda.ConnectionMetaData;
import io.vertx.sqlclient.SqlConnectOptions;
import io.vertx.sqlclient.internal.Connection;
import io.vertx.sqlclient.codec.CommandMessage;
import io.vertx.sqlclient.spi.connection.Connection;
import io.vertx.sqlclient.internal.PreparedStatement;
import io.vertx.sqlclient.internal.QueryResultHandler;
import io.vertx.sqlclient.impl.SocketConnectionBase;
import io.vertx.sqlclient.internal.command.*;
import io.vertx.sqlclient.codec.SocketConnectionBase;
import io.vertx.sqlclient.spi.DatabaseMetadata;
import io.vertx.sqlclient.spi.protocol.CommandBase;
import io.vertx.sqlclient.spi.protocol.ExtendedQueryCommand;
import io.vertx.sqlclient.spi.protocol.SimpleQueryCommand;
import io.vertx.sqlclient.spi.protocol.TxCommand;

import java.util.Map;
import java.util.function.Predicate;
Expand Down Expand Up @@ -79,19 +87,32 @@ public void init() {
super.init();
}

@Override
protected CommandMessage<?, ?> toMessage(ExtendedQueryCommand<?> command, PreparedStatement preparedStatement) {
if (command.isBatch()) {
return new ExtendedBatchQueryCommandCodec<>(command, (DB2PreparedStatement) preparedStatement);
} else {
return new ExtendedQueryCommandCodec(command, (DB2PreparedStatement) preparedStatement);
}
}

@Override
protected CommandMessage<?, ?> toMessage(CommandBase<?> command) {
return CommandCodec.wrap(command);
}

@Override
protected <R> void doSchedule(CommandBase<R> cmd, Completable<R> handler) {
if (cmd instanceof TxCommand) {
TxCommand<R> txCmd = (TxCommand<R>) cmd;
if (txCmd.kind == TxCommand.Kind.BEGIN) {
if (txCmd.kind() == TxCommand.Kind.BEGIN) {
// DB2 always implicitly starts a transaction with each query, and does
// not support the 'BEGIN' keyword. Instead we can no-op BEGIN commands
cmd.handler = handler;
cmd.complete(CommandResponse.success(txCmd.result).toAsyncResult());
handler.succeed(txCmd.result());
} else {
SimpleQueryCommand<Void> cmd2 = new SimpleQueryCommand<>(txCmd.kind.sql, false, false,
QueryCommandBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER);
super.doSchedule(cmd2, (res, err) -> handler.complete(txCmd.result, err));
SimpleQueryCommand<Void> cmd2 = new SimpleQueryCommand<>(txCmd.kind().sql(), false, false,
SocketConnectionBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER);
super.doSchedule(cmd2, (res, err) -> handler.complete(txCmd.result(), err));

}
} else {
Expand All @@ -111,7 +132,7 @@ public String system() {
}

@Override
public DatabaseMetadata getDatabaseMetaData() {
public DatabaseMetadata databaseMetadata() {
return connMetadata.getDbMetadata();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import io.netty.buffer.ByteBuf;
import io.vertx.db2client.impl.drda.DRDAQueryRequest;
import io.vertx.db2client.impl.drda.DRDAQueryResponse;
import io.vertx.sqlclient.internal.command.CloseConnectionCommand;
import io.vertx.sqlclient.spi.protocol.CloseConnectionCommand;

class CloseConnectionCommandCodec extends CommandCodec<Void, CloseConnectionCommand> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import io.vertx.db2client.impl.codec.DB2PreparedStatement.QueryInstance;
import io.vertx.db2client.impl.drda.DRDAQueryRequest;
import io.vertx.db2client.impl.drda.DRDAQueryResponse;
import io.vertx.sqlclient.internal.command.CloseCursorCommand;
import io.vertx.sqlclient.internal.command.CommandResponse;
import io.vertx.sqlclient.spi.protocol.CloseCursorCommand;
import io.vertx.sqlclient.codec.CommandResponse;

class CloseCursorCommandCodec extends CommandCodec<Void, CloseCursorCommand> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
package io.vertx.db2client.impl.codec;

import io.netty.buffer.ByteBuf;
import io.vertx.sqlclient.internal.command.CloseStatementCommand;
import io.vertx.sqlclient.internal.command.CommandResponse;
import io.vertx.sqlclient.spi.protocol.CloseStatementCommand;
import io.vertx.sqlclient.codec.CommandResponse;

class CloseStatementCommandCodec extends CommandCodec<Void, CloseStatementCommand> {

Expand Down
Loading