Skip to content

Commit 93b0633

Browse files
authored
Merge pull request #1534 from eclipse-vertx/isolate-command-to-backend
Backend SPI
2 parents 2832bf6 + ded5767 commit 93b0633

File tree

213 files changed

+1855
-1467
lines changed

Some content is hidden

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

213 files changed

+1855
-1467
lines changed

pom.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@
6565
<type>pom</type>
6666
<scope>import</scope>
6767
</dependency>
68+
69+
<!-- TMP -->
70+
<dependency>
71+
<groupId>io.vertx</groupId>
72+
<artifactId>vertx-sql-client-codec</artifactId>
73+
<version>${project.version}</version>
74+
</dependency>
6875
</dependencies>
6976
</dependencyManagement>
7077

@@ -184,6 +191,7 @@
184191
</activation>
185192
<modules>
186193
<module>vertx-sql-client</module>
194+
<module>vertx-sql-client-codec</module>
187195
<module>vertx-pg-client</module>
188196
<module>vertx-mysql-client</module>
189197
<module>vertx-mssql-client</module>
@@ -199,6 +207,7 @@
199207
</properties>
200208
<modules>
201209
<module>vertx-sql-client</module>
210+
<module>vertx-sql-client-codec</module>
202211
<module>vertx-pg-client</module>
203212
</modules>
204213
</profile>
@@ -209,6 +218,7 @@
209218
</properties>
210219
<modules>
211220
<module>vertx-sql-client</module>
221+
<module>vertx-sql-client-codec</module>
212222
<module>vertx-pg-client</module>
213223
</modules>
214224
</profile>
@@ -219,6 +229,7 @@
219229
</properties>
220230
<modules>
221231
<module>vertx-sql-client</module>
232+
<module>vertx-sql-client-codec</module>
222233
<module>vertx-pg-client</module>
223234
</modules>
224235
</profile>
@@ -230,6 +241,7 @@
230241
</properties>
231242
<modules>
232243
<module>vertx-sql-client</module>
244+
<module>vertx-sql-client-codec</module>
233245
<module>vertx-mysql-client</module>
234246
</modules>
235247
</profile>
@@ -241,6 +253,7 @@
241253
</properties>
242254
<modules>
243255
<module>vertx-sql-client</module>
256+
<module>vertx-sql-client-codec</module>
244257
<module>vertx-mysql-client</module>
245258
</modules>
246259
</profile>
@@ -252,6 +265,7 @@
252265
</properties>
253266
<modules>
254267
<module>vertx-sql-client</module>
268+
<module>vertx-sql-client-codec</module>
255269
<module>vertx-mysql-client</module>
256270
</modules>
257271
</profile>
@@ -263,6 +277,7 @@
263277
</properties>
264278
<modules>
265279
<module>vertx-sql-client</module>
280+
<module>vertx-sql-client-codec</module>
266281
<module>vertx-mysql-client</module>
267282
</modules>
268283
</profile>
@@ -273,6 +288,7 @@
273288
</properties>
274289
<modules>
275290
<module>vertx-sql-client</module>
291+
<module>vertx-sql-client-codec</module>
276292
<module>vertx-mssql-client</module>
277293
</modules>
278294
</profile>
@@ -283,20 +299,23 @@
283299
</properties>
284300
<modules>
285301
<module>vertx-sql-client</module>
302+
<module>vertx-sql-client-codec</module>
286303
<module>vertx-mssql-client</module>
287304
</modules>
288305
</profile>
289306
<profile>
290307
<id>DB2-11.5</id>
291308
<modules>
292309
<module>vertx-sql-client</module>
310+
<module>vertx-sql-client-codec</module>
293311
<module>vertx-db2-client</module>
294312
</modules>
295313
</profile>
296314
<profile>
297315
<id>SQL-templates</id>
298316
<modules>
299317
<module>vertx-sql-client</module>
318+
<module>vertx-sql-client-codec</module>
300319
<module>vertx-pg-client</module>
301320
<module>vertx-mysql-client</module>
302321
<module>vertx-sql-client-templates</module>
@@ -309,9 +328,10 @@
309328
</properties>
310329
<modules>
311330
<module>vertx-sql-client</module>
331+
<module>vertx-sql-client-codec</module>
312332
<module>vertx-oracle-client</module>
313333
</modules>
314334
</profile>
315335
</profiles>
316336

317-
</project>
337+
</project>

vertx-db2-client/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
<groupId>io.vertx</groupId>
4848
<artifactId>vertx-sql-client</artifactId>
4949
</dependency>
50+
<dependency>
51+
<groupId>io.vertx</groupId>
52+
<artifactId>vertx-sql-client-codec</artifactId>
53+
</dependency>
5054

5155
<!-- Testing purposes -->
5256
<dependency>

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
import io.vertx.core.spi.metrics.ClientMetrics;
2727
import io.vertx.core.spi.metrics.VertxMetrics;
2828
import io.vertx.db2client.DB2ConnectOptions;
29-
import io.vertx.sqlclient.SqlConnection;
30-
import io.vertx.sqlclient.internal.Connection;
29+
import io.vertx.sqlclient.spi.connection.Connection;
3130
import io.vertx.sqlclient.impl.ConnectionFactoryBase;
3231

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

6766
@Override
68-
public Future<SqlConnection> connect(Context context, DB2ConnectOptions options) {
67+
public Future<Connection> connect(Context context, DB2ConnectOptions options) {
6968
ContextInternal contextInternal = (ContextInternal) context;
70-
Promise<SqlConnection> promise = contextInternal.promise();
71-
connect(asEventLoopContext(contextInternal), options)
72-
.map(conn -> {
73-
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(contextInternal, this, conn);
74-
conn.init(db2Connection);
75-
return (SqlConnection)db2Connection;
76-
}).onComplete(promise);
69+
Promise<Connection> promise = contextInternal.promise();
70+
connect(asEventLoopContext(contextInternal), options).onComplete(promise);
7771
return promise.future();
7872
}
7973
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import io.vertx.db2client.DB2Connection;
2424
import io.vertx.db2client.impl.command.PingCommand;
2525
import io.vertx.db2client.spi.DB2Driver;
26-
import io.vertx.sqlclient.internal.Connection;
26+
import io.vertx.sqlclient.spi.connection.Connection;
2727
import io.vertx.sqlclient.internal.SqlConnectionBase;
28-
import io.vertx.sqlclient.spi.ConnectionFactory;
28+
import io.vertx.sqlclient.spi.connection.ConnectionFactory;
2929

3030
public class DB2ConnectionImpl extends SqlConnectionBase<DB2ConnectionImpl> implements DB2Connection {
3131

@@ -37,7 +37,12 @@ public static Future<DB2Connection> connect(Vertx vertx, DB2ConnectOptions optio
3737
} catch (Exception e) {
3838
return ctx.failedFuture(e);
3939
}
40-
return prepareForClose(ctx, client.connect((Context)ctx, options)).map(DB2Connection::cast);
40+
return client.connect((Context)ctx, options).map(conn -> {
41+
DB2ConnectionImpl impl = new DB2ConnectionImpl(ctx, client, conn);
42+
conn.init(impl);
43+
prepareForClose(ctx, impl);
44+
return impl;
45+
});
4146
}
4247

4348
public DB2ConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {

vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2RowImpl.java renamed to vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2Row.java

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,18 @@
2323
import java.time.OffsetDateTime;
2424
import java.time.OffsetTime;
2525
import java.time.temporal.Temporal;
26-
import java.util.List;
2726
import java.util.UUID;
2827

2928
import io.vertx.core.buffer.Buffer;
3029
import io.vertx.db2client.impl.drda.DB2RowId;
3130
import io.vertx.sqlclient.data.Numeric;
3231
import io.vertx.sqlclient.impl.RowBase;
33-
import io.vertx.sqlclient.internal.RowDesc;
32+
import io.vertx.sqlclient.internal.RowDescriptorBase;
3433

35-
public class DB2RowImpl extends RowBase {
34+
public class DB2Row extends RowBase {
3635

37-
private final RowDesc rowDesc;
38-
39-
public DB2RowImpl(RowDesc rowDesc) {
40-
super(rowDesc.columnNames().size());
41-
this.rowDesc = rowDesc;
36+
public DB2Row(RowDescriptorBase rowDescriptor) {
37+
super(rowDescriptor);
4238
}
4339

4440
@Override
@@ -82,23 +78,14 @@ public <T> T get(Class<T> type, int position) {
8278
}
8379
}
8480

85-
@Override
86-
public String getColumnName(int pos) {
87-
List<String> columnNames = rowDesc.columnNames();
88-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
89-
}
90-
9181
@Override
9282
public int getColumnIndex(String name) {
93-
if (name == null) {
94-
throw new NullPointerException();
95-
}
96-
int idx = rowDesc.columnIndex(name);
83+
int idx = super.getColumnIndex(name);
9784
if (idx >= 0) {
9885
return idx;
9986
}
10087
// Unless the column is renamed in the SQL query, the column name will be uppercase
101-
return rowDesc.columnIndex(name.toUpperCase());
88+
return super.getColumnIndex(name.toUpperCase());
10289
}
10390

10491
@Override

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

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,31 @@
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;
2322
import io.vertx.core.internal.ContextInternal;
2423
import io.vertx.core.internal.net.NetSocketInternal;
2524
import io.vertx.core.spi.metrics.ClientMetrics;
2625
import io.vertx.db2client.DB2ConnectOptions;
26+
import io.vertx.db2client.impl.codec.CommandCodec;
2727
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;
2831
import io.vertx.db2client.impl.command.InitialHandshakeCommand;
2932
import io.vertx.db2client.impl.drda.ConnectionMetaData;
3033
import io.vertx.sqlclient.SqlConnectOptions;
31-
import io.vertx.sqlclient.internal.Connection;
34+
import io.vertx.sqlclient.codec.CommandMessage;
35+
import io.vertx.sqlclient.spi.connection.Connection;
36+
import io.vertx.sqlclient.internal.PreparedStatement;
3237
import io.vertx.sqlclient.internal.QueryResultHandler;
33-
import io.vertx.sqlclient.impl.SocketConnectionBase;
34-
import io.vertx.sqlclient.internal.command.*;
38+
import io.vertx.sqlclient.codec.SocketConnectionBase;
3539
import io.vertx.sqlclient.spi.DatabaseMetadata;
40+
import io.vertx.sqlclient.spi.protocol.CommandBase;
41+
import io.vertx.sqlclient.spi.protocol.ExtendedQueryCommand;
42+
import io.vertx.sqlclient.spi.protocol.SimpleQueryCommand;
43+
import io.vertx.sqlclient.spi.protocol.TxCommand;
3644

3745
import java.util.Map;
3846
import java.util.function.Predicate;
@@ -79,19 +87,32 @@ public void init() {
7987
super.init();
8088
}
8189

90+
@Override
91+
protected CommandMessage<?, ?> toMessage(ExtendedQueryCommand<?> command, PreparedStatement preparedStatement) {
92+
if (command.isBatch()) {
93+
return new ExtendedBatchQueryCommandCodec<>(command, (DB2PreparedStatement) preparedStatement);
94+
} else {
95+
return new ExtendedQueryCommandCodec(command, (DB2PreparedStatement) preparedStatement);
96+
}
97+
}
98+
99+
@Override
100+
protected CommandMessage<?, ?> toMessage(CommandBase<?> command) {
101+
return CommandCodec.wrap(command);
102+
}
103+
82104
@Override
83105
protected <R> void doSchedule(CommandBase<R> cmd, Completable<R> handler) {
84106
if (cmd instanceof TxCommand) {
85107
TxCommand<R> txCmd = (TxCommand<R>) cmd;
86-
if (txCmd.kind == TxCommand.Kind.BEGIN) {
108+
if (txCmd.kind() == TxCommand.Kind.BEGIN) {
87109
// DB2 always implicitly starts a transaction with each query, and does
88110
// not support the 'BEGIN' keyword. Instead we can no-op BEGIN commands
89-
cmd.handler = handler;
90-
cmd.complete(CommandResponse.success(txCmd.result).toAsyncResult());
111+
handler.succeed(txCmd.result());
91112
} else {
92-
SimpleQueryCommand<Void> cmd2 = new SimpleQueryCommand<>(txCmd.kind.sql, false, false,
93-
QueryCommandBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER);
94-
super.doSchedule(cmd2, (res, err) -> handler.complete(txCmd.result, err));
113+
SimpleQueryCommand<Void> cmd2 = new SimpleQueryCommand<>(txCmd.kind().sql(), false, false,
114+
SocketConnectionBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER);
115+
super.doSchedule(cmd2, (res, err) -> handler.complete(txCmd.result(), err));
95116

96117
}
97118
} else {
@@ -111,7 +132,7 @@ public String system() {
111132
}
112133

113134
@Override
114-
public DatabaseMetadata getDatabaseMetaData() {
135+
public DatabaseMetadata databaseMetadata() {
115136
return connMetadata.getDbMetadata();
116137
}
117138

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import io.netty.buffer.ByteBuf;
1919
import io.vertx.db2client.impl.drda.DRDAQueryRequest;
2020
import io.vertx.db2client.impl.drda.DRDAQueryResponse;
21-
import io.vertx.sqlclient.internal.command.CloseConnectionCommand;
21+
import io.vertx.sqlclient.spi.protocol.CloseConnectionCommand;
2222

2323
class CloseConnectionCommandCodec extends CommandCodec<Void, CloseConnectionCommand> {
2424

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import io.vertx.db2client.impl.codec.DB2PreparedStatement.QueryInstance;
2222
import io.vertx.db2client.impl.drda.DRDAQueryRequest;
2323
import io.vertx.db2client.impl.drda.DRDAQueryResponse;
24-
import io.vertx.sqlclient.internal.command.CloseCursorCommand;
25-
import io.vertx.sqlclient.internal.command.CommandResponse;
24+
import io.vertx.sqlclient.spi.protocol.CloseCursorCommand;
25+
import io.vertx.sqlclient.codec.CommandResponse;
2626

2727
class CloseCursorCommandCodec extends CommandCodec<Void, CloseCursorCommand> {
2828

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package io.vertx.db2client.impl.codec;
1717

1818
import io.netty.buffer.ByteBuf;
19-
import io.vertx.sqlclient.internal.command.CloseStatementCommand;
20-
import io.vertx.sqlclient.internal.command.CommandResponse;
19+
import io.vertx.sqlclient.spi.protocol.CloseStatementCommand;
20+
import io.vertx.sqlclient.codec.CommandResponse;
2121

2222
class CloseStatementCommandCodec extends CommandCodec<Void, CloseStatementCommand> {
2323

0 commit comments

Comments
 (0)