Skip to content

Commit 0b2633b

Browse files
committed
Make ExtendedQueryCommand prepared statement immutable.
1 parent e8ae268 commit 0b2633b

File tree

25 files changed

+119
-92
lines changed

25 files changed

+119
-92
lines changed

vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2SocketConnection.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package io.vertx.db2client.impl;
1717

1818
import io.netty.channel.ChannelPipeline;
19-
import io.vertx.core.AsyncResult;
2019
import io.vertx.core.Completable;
2120
import io.vertx.core.Handler;
2221
import io.vertx.core.Promise;
@@ -26,11 +25,15 @@
2625
import io.vertx.db2client.DB2ConnectOptions;
2726
import io.vertx.db2client.impl.codec.CommandCodec;
2827
import io.vertx.db2client.impl.codec.DB2Codec;
28+
import io.vertx.db2client.impl.codec.DB2PreparedStatement;
29+
import io.vertx.db2client.impl.codec.ExtendedBatchQueryCommandCodec;
30+
import io.vertx.db2client.impl.codec.ExtendedQueryCommandCodec;
2931
import io.vertx.db2client.impl.command.InitialHandshakeCommand;
3032
import io.vertx.db2client.impl.drda.ConnectionMetaData;
3133
import io.vertx.sqlclient.SqlConnectOptions;
3234
import io.vertx.sqlclient.impl.CommandMessage;
3335
import io.vertx.sqlclient.internal.Connection;
36+
import io.vertx.sqlclient.internal.PreparedStatement;
3437
import io.vertx.sqlclient.internal.QueryResultHandler;
3538
import io.vertx.sqlclient.impl.SocketConnectionBase;
3639
import io.vertx.sqlclient.internal.command.*;
@@ -81,6 +84,15 @@ public void init() {
8184
super.init();
8285
}
8386

87+
@Override
88+
protected CommandMessage<?, ?> toMessage(ExtendedQueryCommand<?> command, PreparedStatement preparedStatement) {
89+
if (command.isBatch()) {
90+
return new ExtendedBatchQueryCommandCodec<>(command, (DB2PreparedStatement) preparedStatement);
91+
} else {
92+
return new ExtendedQueryCommandCodec(command, (DB2PreparedStatement) preparedStatement);
93+
}
94+
}
95+
8496
@Override
8597
protected CommandMessage<?, ?> toMessage(CommandBase<?> command) {
8698
return CommandCodec.wrap(command);

vertx-db2-client/src/main/java/io/vertx/db2client/impl/codec/CommandCodec.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,6 @@ public abstract class CommandCodec<R, C extends CommandBase<R>> extends CommandM
4747
codec = new InitialHandshakeCommandCodec((InitialHandshakeCommand) cmd);
4848
} else if (cmd instanceof SimpleQueryCommand) {
4949
codec = new SimpleQueryCommandCodec((SimpleQueryCommand) cmd);
50-
} else if (cmd instanceof ExtendedQueryCommand) {
51-
ExtendedQueryCommand<?> queryCmd = (ExtendedQueryCommand<?>) cmd;
52-
if (queryCmd.isBatch()) {
53-
codec = new ExtendedBatchQueryCommandCodec<>(queryCmd);
54-
} else {
55-
codec = new ExtendedQueryCommandCodec(queryCmd);
56-
}
5750
} else if (cmd instanceof CloseConnectionCommand) {
5851
codec = new CloseConnectionCommandCodec((CloseConnectionCommand) cmd);
5952
} else if (cmd instanceof PrepareStatementCommand) {

vertx-db2-client/src/main/java/io/vertx/db2client/impl/codec/DB2PreparedStatement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import io.vertx.sqlclient.internal.RowDesc;
2929
import io.vertx.sqlclient.internal.TupleInternal;
3030

31-
class DB2PreparedStatement implements PreparedStatement {
31+
public class DB2PreparedStatement implements PreparedStatement {
3232

3333
private static final Logger LOG = LoggerFactory.getLogger(DB2PreparedStatement.class);
3434

vertx-db2-client/src/main/java/io/vertx/db2client/impl/codec/ExtendedBatchQueryCommandCodec.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@
3131
import io.vertx.sqlclient.impl.CommandResponse;
3232
import io.vertx.sqlclient.internal.command.ExtendedQueryCommand;
3333

34-
class ExtendedBatchQueryCommandCodec<R> extends ExtendedQueryCommandBaseCodec<R, ExtendedQueryCommand<R>> {
34+
public class ExtendedBatchQueryCommandCodec<R> extends ExtendedQueryCommandBaseCodec<R, ExtendedQueryCommand<R>> {
3535

3636
private static final Logger LOG = LoggerFactory.getLogger(ExtendedBatchQueryCommandCodec.class);
3737

3838
private final List<TupleInternal> params;
3939
private final List<QueryInstance> queryInstances;
4040
private final String baseCursorId;
4141

42-
ExtendedBatchQueryCommandCodec(ExtendedQueryCommand<R> cmd) {
43-
super(cmd);
42+
public ExtendedBatchQueryCommandCodec(ExtendedQueryCommand<R> cmd, DB2PreparedStatement statement) {
43+
super(cmd, statement);
4444
params = cmd.paramsList();
4545
queryInstances = new ArrayList<>(params.size());
4646
baseCursorId = (cmd.cursorId() == null ? UUID.randomUUID().toString() : cmd.cursorId()) + "-";

vertx-db2-client/src/main/java/io/vertx/db2client/impl/codec/ExtendedQueryCommandBaseCodec.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ abstract class ExtendedQueryCommandBaseCodec<R, C extends ExtendedQueryCommand<R
3535

3636
final DB2PreparedStatement statement;
3737

38-
ExtendedQueryCommandBaseCodec(C cmd) {
38+
ExtendedQueryCommandBaseCodec(C cmd, DB2PreparedStatement statement) {
3939
super(cmd);
40-
statement = (DB2PreparedStatement) cmd.preparedStatement();
41-
columnDefinitions = statement.rowDesc.columnDefinitions();
40+
this.statement = statement;
41+
this.columnDefinitions = statement.rowDesc.columnDefinitions();
4242
}
4343

4444
void encodePreparedQuery(DRDAQueryRequest queryRequest, QueryInstance queryInstance, Tuple params) {

vertx-db2-client/src/main/java/io/vertx/db2client/impl/codec/ExtendedQueryCommandCodec.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
import io.vertx.sqlclient.impl.CommandResponse;
2323
import io.vertx.sqlclient.internal.command.ExtendedQueryCommand;
2424

25-
class ExtendedQueryCommandCodec<R> extends ExtendedQueryCommandBaseCodec<R, ExtendedQueryCommand<R>> {
25+
public class ExtendedQueryCommandCodec<R> extends ExtendedQueryCommandBaseCodec<R, ExtendedQueryCommand<R>> {
2626

2727
final QueryInstance queryInstance;
2828

29-
ExtendedQueryCommandCodec(ExtendedQueryCommand<R> cmd) {
30-
super(cmd);
29+
public ExtendedQueryCommandCodec(ExtendedQueryCommand<R> cmd, DB2PreparedStatement statement) {
30+
super(cmd, statement);
3131
queryInstance = statement.getQueryInstance(cmd.cursorId());
3232
}
3333

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLSocketConnection.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
import io.vertx.core.spi.metrics.ClientMetrics;
3030
import io.vertx.mssqlclient.MSSQLConnectOptions;
3131
import io.vertx.mssqlclient.MSSQLInfo;
32+
import io.vertx.mssqlclient.impl.codec.ExtendedQueryCommandBaseCodec;
3233
import io.vertx.mssqlclient.impl.codec.MSSQLCommandCodec;
34+
import io.vertx.mssqlclient.impl.codec.MSSQLPreparedStatement;
3335
import io.vertx.mssqlclient.impl.codec.TdsLoginSentCompletionHandler;
3436
import io.vertx.mssqlclient.impl.codec.TdsMessageCodec;
3537
import io.vertx.mssqlclient.impl.codec.TdsPacketDecoder;
@@ -38,6 +40,7 @@
3840
import io.vertx.sqlclient.SqlConnectOptions;
3941
import io.vertx.sqlclient.impl.CommandMessage;
4042
import io.vertx.sqlclient.internal.Connection;
43+
import io.vertx.sqlclient.internal.PreparedStatement;
4144
import io.vertx.sqlclient.internal.QueryResultHandler;
4245
import io.vertx.sqlclient.impl.SocketConnectionBase;
4346
import io.vertx.sqlclient.internal.command.*;
@@ -149,6 +152,11 @@ public void init() {
149152
super.init();
150153
}
151154

155+
@Override
156+
protected CommandMessage<?, ?> toMessage(ExtendedQueryCommand<?> command, PreparedStatement preparedStatement) {
157+
return ExtendedQueryCommandBaseCodec.create(command, (MSSQLPreparedStatement)preparedStatement);
158+
}
159+
152160
@Override
153161
protected CommandMessage<?, ?> toMessage(CommandBase<?> command) {
154162
return MSSQLCommandCodec.wrap(command);

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/codec/ExtendedBatchQueryCommandCodec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class ExtendedBatchQueryCommandCodec<T> extends ExtendedQueryCommandBaseCodec<T>
2525
private int paramsIdx;
2626
private int messageDecoded;
2727

28-
ExtendedBatchQueryCommandCodec(ExtendedQueryCommand<T> cmd) {
29-
super(cmd);
28+
ExtendedBatchQueryCommandCodec(ExtendedQueryCommand<T> cmd, MSSQLPreparedStatement ps) {
29+
super(cmd, ps);
3030
paramsList = cmd.paramsList();
3131
}
3232

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/codec/ExtendedCursorQueryCommandCodec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ class ExtendedCursorQueryCommandCodec<T> extends ExtendedQueryCommandBaseCodec<T
2323

2424
private CursorData cursorData;
2525

26-
ExtendedCursorQueryCommandCodec(ExtendedQueryCommand<T> cmd) {
27-
super(cmd);
26+
ExtendedCursorQueryCommandCodec(ExtendedQueryCommand<T> cmd, MSSQLPreparedStatement ps) {
27+
super(cmd, ps);
2828
}
2929

3030
@Override

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/codec/ExtendedQueryCommandBaseCodec.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@
1919
import static io.vertx.mssqlclient.impl.codec.DataType.*;
2020
import static io.vertx.mssqlclient.impl.codec.MessageType.RPC;
2121

22-
abstract class ExtendedQueryCommandBaseCodec<T> extends QueryCommandBaseCodec<T, ExtendedQueryCommand<T>> {
22+
public abstract class ExtendedQueryCommandBaseCodec<T> extends QueryCommandBaseCodec<T, ExtendedQueryCommand<T>> {
2323

2424
final MSSQLPreparedStatement ps;
2525

26-
ExtendedQueryCommandBaseCodec(ExtendedQueryCommand<T> cmd) {
26+
public ExtendedQueryCommandBaseCodec(ExtendedQueryCommand<T> cmd, MSSQLPreparedStatement ps) {
2727
super(cmd);
28-
ps = (MSSQLPreparedStatement) this.cmd.preparedStatement();
28+
this.ps = ps;
2929
}
3030

31-
public static <U> MSSQLCommandCodec<?, ?> create(ExtendedQueryCommand<U> queryCmd) {
31+
public static <U> MSSQLCommandCodec<?, ?> create(ExtendedQueryCommand<U> queryCmd, MSSQLPreparedStatement ps) {
3232
if (queryCmd.isBatch()) {
33-
return new ExtendedBatchQueryCommandCodec<>(queryCmd);
33+
return new ExtendedBatchQueryCommandCodec<>(queryCmd, ps);
3434
} else if (queryCmd.cursorId() != null) {
35-
return new ExtendedCursorQueryCommandCodec<>(queryCmd);
35+
return new ExtendedCursorQueryCommandCodec<>(queryCmd, ps);
3636
} else {
37-
return new ExtendedQueryCommandCodec<>(queryCmd);
37+
return new ExtendedQueryCommandCodec<>(queryCmd, ps);
3838
}
3939
}
4040

0 commit comments

Comments
 (0)