Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport the MS SQL Client to Vert.x 3.9.x #604

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
<module>vertx-sql-client</module>
<module>vertx-pg-client</module>
<module>vertx-mysql-client</module>
<module>vertx-mssql-client</module>
</modules>


Expand Down
11 changes: 11 additions & 0 deletions vertx-mssql-client/README.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
= The Reactive MSSQL Client

TODO

== Features TODO

* Cursor support
* Row streaming
* RxJava 1 and RxJava 2
* Polyglot support
* TLS support
112 changes: 112 additions & 0 deletions vertx-mssql-client/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client-parent</artifactId>
<version>3.9.1-SNAPSHOT</version>
</parent>

<artifactId>vertx-mssql-client</artifactId>

<name>Vertx MSSQL Client</name>
<url>https://github.com/eclipse-vertx/vertx-sql-client</url>
<description>The Reactive MSSQL Client</description>

<properties>
<doc.skip>false</doc.skip>
<docs.dir>${project.basedir}/src/main/docs</docs.dir>
<generated.dir>${project.basedir}/src/main/generated</generated.dir>
</properties>

<dependencies>

<!-- Vert.x dependencies -->
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-codegen</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-docgen</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client</artifactId>
<version>${stack.version}</version>
</dependency>

<!-- Testing purposes -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mssqlserver</artifactId>
<version>1.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.2.2.jre8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-sql-client</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<configuration>
<optionMap>
<docgen.source>${project.basedir}/../vertx-sql-client/src/main/asciidoc/*.adoc,${asciidoc.dir}/*.adoc</docgen.source>
</optionMap>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<!-- Override sources to use custom descriptor to have all adoc files -->
<execution>
<id>package-sources</id>
<configuration>
<descriptors>
<descriptor>${project.basedir}/../assembly/sources.xml</descriptor>
</descriptors>
<descriptorRefs>
<descriptorRef>none</descriptorRef>
</descriptorRefs>
<ignoreMissingDescriptor>true</ignoreMissingDescriptor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<profiles>

</profiles>


</project>
65 changes: 65 additions & 0 deletions vertx-mssql-client/src/main/asciidoc/dataobjects.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
= Cheatsheets

[[MSSQLConnectOptions]]
== MSSQLConnectOptions

++++
Connect options for configuring link.
++++
'''

[cols=">25%,25%,50%"]
[frame="topbot"]
|===
^|Name | Type ^| Description
|[[cachePreparedStatements]]`@cachePreparedStatements`|`Boolean`|-
|[[connectTimeout]]`@connectTimeout`|`Number (int)`|-
|[[crlPaths]]`@crlPaths`|`Array of String`|-
|[[crlValues]]`@crlValues`|`Array of Buffer`|-
|[[database]]`@database`|`String`|-
|[[enabledCipherSuites]]`@enabledCipherSuites`|`Array of String`|-
|[[enabledSecureTransportProtocols]]`@enabledSecureTransportProtocols`|`Array of String`|-
|[[host]]`@host`|`String`|-
|[[hostnameVerificationAlgorithm]]`@hostnameVerificationAlgorithm`|`String`|-
|[[idleTimeout]]`@idleTimeout`|`Number (int)`|-
|[[idleTimeoutUnit]]`@idleTimeoutUnit`|`link:enums.html#TimeUnit[TimeUnit]`|-
|[[jdkSslEngineOptions]]`@jdkSslEngineOptions`|`link:dataobjects.html#JdkSSLEngineOptions[JdkSSLEngineOptions]`|-
|[[keyStoreOptions]]`@keyStoreOptions`|`link:dataobjects.html#JksOptions[JksOptions]`|-
|[[localAddress]]`@localAddress`|`String`|-
|[[logActivity]]`@logActivity`|`Boolean`|-
|[[metricsName]]`@metricsName`|`String`|-
|[[openSslEngineOptions]]`@openSslEngineOptions`|`link:dataobjects.html#OpenSSLEngineOptions[OpenSSLEngineOptions]`|-
|[[password]]`@password`|`String`|-
|[[pemKeyCertOptions]]`@pemKeyCertOptions`|`link:dataobjects.html#PemKeyCertOptions[PemKeyCertOptions]`|-
|[[pemTrustOptions]]`@pemTrustOptions`|`link:dataobjects.html#PemTrustOptions[PemTrustOptions]`|-
|[[pfxKeyCertOptions]]`@pfxKeyCertOptions`|`link:dataobjects.html#PfxOptions[PfxOptions]`|-
|[[pfxTrustOptions]]`@pfxTrustOptions`|`link:dataobjects.html#PfxOptions[PfxOptions]`|-
|[[port]]`@port`|`Number (int)`|-
|[[preparedStatementCacheMaxSize]]`@preparedStatementCacheMaxSize`|`Number (int)`|-
|[[preparedStatementCacheSqlLimit]]`@preparedStatementCacheSqlLimit`|`Number (int)`|-
|[[properties]]`@properties`|`String`|-
|[[propertys]]`@propertys`|`String`|-
|[[proxyOptions]]`@proxyOptions`|`link:dataobjects.html#ProxyOptions[ProxyOptions]`|-
|[[receiveBufferSize]]`@receiveBufferSize`|`Number (int)`|-
|[[reconnectAttempts]]`@reconnectAttempts`|`Number (int)`|-
|[[reconnectInterval]]`@reconnectInterval`|`Number (long)`|-
|[[reuseAddress]]`@reuseAddress`|`Boolean`|-
|[[reusePort]]`@reusePort`|`Boolean`|-
|[[sendBufferSize]]`@sendBufferSize`|`Number (int)`|-
|[[soLinger]]`@soLinger`|`Number (int)`|-
|[[ssl]]`@ssl`|`Boolean`|-
|[[sslHandshakeTimeout]]`@sslHandshakeTimeout`|`Number (long)`|-
|[[sslHandshakeTimeoutUnit]]`@sslHandshakeTimeoutUnit`|`link:enums.html#TimeUnit[TimeUnit]`|-
|[[tcpCork]]`@tcpCork`|`Boolean`|-
|[[tcpFastOpen]]`@tcpFastOpen`|`Boolean`|-
|[[tcpKeepAlive]]`@tcpKeepAlive`|`Boolean`|-
|[[tcpNoDelay]]`@tcpNoDelay`|`Boolean`|-
|[[tcpQuickAck]]`@tcpQuickAck`|`Boolean`|-
|[[trafficClass]]`@trafficClass`|`Number (int)`|-
|[[trustAll]]`@trustAll`|`Boolean`|-
|[[trustStoreOptions]]`@trustStoreOptions`|`link:dataobjects.html#JksOptions[JksOptions]`|-
|[[useAlpn]]`@useAlpn`|`Boolean`|-
|[[usePooledBuffers]]`@usePooledBuffers`|`Boolean`|-
|[[user]]`@user`|`String`|-
|===

133 changes: 133 additions & 0 deletions vertx-mssql-client/src/main/asciidoc/index.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
= Reactive MSSQL Client

The Reactive MSSQL Client is a client for Microsoft SQL Server with a straightforward API focusing on
scalability and low overhead.

*Features*

* Event driven
* Lightweight
* Built-in connection pooling
* Direct memory to object without unnecessary copies
* Java 8 Date and Time

== Usage

To use the Reactive MSSQL Client add the following dependency to the _dependencies_ section of your build descriptor:

* Maven (in your `pom.xml`):

[source,xml]
----
<dependency>
<groupId>${maven.groupId}</groupId>
<artifactId>${maven.artifactId}</artifactId>
<version>${maven.version}</version>
</dependency>
----
* Gradle (in your `build.gradle` file):

[source,groovy]
----
dependencies {
compile '${maven.groupId}:${maven.artifactId}:${maven.version}'
}
----

== Getting started

Here is the simplest way to connect, query and disconnect

[source,$lang]
----
{@link examples.MSSQLClientExamples#gettingStarted()}
----

== Connecting to SQL Server

Most of the time you will use a pool to connect to MSSQL:

[source,$lang]
----
{@link examples.MSSQLClientExamples#connecting01}
----

The pooled client uses a connection pool and any operation will borrow a connection from the pool
to execute the operation and release it to the pool.

If you are running with Vert.x you can pass it your Vertx instance:

[source,$lang]
----
{@link examples.MSSQLClientExamples#connecting02}
----

You need to release the pool when you don't need it anymore:

[source,$lang]
----
{@link examples.MSSQLClientExamples#connecting03}
----

When you need to execute several operations on the same connection, you need to use a client
{@link io.vertx.mssqlclient.MSSQLConnection connection}.

You can easily get one from the pool:

[source,$lang]
----
{@link examples.MSSQLClientExamples#connecting04}
----

Once you are done with the connection you must close it to release it to the pool, so it can be reused.

== Configuration

=== Data Object

A simple way to configure the client is to specify a `MSSQLConnectOptions` data object.

[source,$lang]
----
{@link examples.MSSQLClientExamples#configureFromDataObject(io.vertx.core.Vertx)}
----

include::queries.adoc[]

== DATATYPE support

Currently the client supports the following SQL Server types

* TINYINT(`java.lang.Byte`)
* SMALLINT(`java.lang.Short`)
* INT(`java.lang.Integer`)
* BIGINT(`java.lang.Long`)
* BIT(`java.lang.Boolean`)
* REAL(`java.lang.Float`)
* DOUBLE(`java.lang.Double`)
* CHAR(`java.lang.String`)
* VARCHAR(`java.lang.String`)
* DATE(`java.time.LocalDate`)
* TIME(`java.time.LocalTime`)

Tuple decoding uses the above types when storing values

== Collector queries

You can use Java collectors with the query API:

[source,$lang]
----
{@link examples.MSSQLClientExamples#collector01Example(io.vertx.sqlclient.SqlClient)}
----

The collector processing must not keep a reference on the {@link io.vertx.sqlclient.Row} as
there is a single row used for processing the entire set.

The Java `Collectors` provides many interesting predefined collectors, for example you can
create easily create a string directly from the row set:

[source,$lang]
----
{@link examples.MSSQLClientExamples#collector02Example(io.vertx.sqlclient.SqlClient)}
----
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.vertx.mssqlclient;

import io.vertx.core.json.JsonObject;
import io.vertx.core.json.JsonArray;
import java.time.Instant;
import java.time.format.DateTimeFormatter;

/**
* Converter for {@link io.vertx.mssqlclient.MSSQLConnectOptions}.
* NOTE: This class has been automatically generated from the {@link io.vertx.mssqlclient.MSSQLConnectOptions} original class using Vert.x codegen.
*/
public class MSSQLConnectOptionsConverter {

public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, MSSQLConnectOptions obj) {
for (java.util.Map.Entry<String, Object> member : json) {
switch (member.getKey()) {
}
}
}

public static void toJson(MSSQLConnectOptions obj, JsonObject json) {
toJson(obj, json.getMap());
}

public static void toJson(MSSQLConnectOptions obj, java.util.Map<String, Object> json) {
}
}
Loading