From 8101d06be3aae7b480bbabb1ab6c30aa9c8cd0f7 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Feb 2021 20:09:51 +0300 Subject: [PATCH 001/176] Added clickhouse InitCommand handler Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 0 .../clickhousenative/ClickhouseConstants.java | 7 ++ .../ClickhouseNativeConnectOptions.java | 32 ++++++++++ ...ickhouseNativeConnectOptionsConverter.java | 15 +++++ .../ClickhouseNativeConnection.java | 24 +++++++ .../ClickhouseNativePool.java | 26 ++++++++ .../ClickhouseNativeConnectionFactory.java | 59 +++++++++++++++++ .../impl/ClickhouseNativeConnectionImpl.java | 40 ++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 37 +++++++++++ .../impl/ClickhouseNativePoolImpl.java | 48 ++++++++++++++ .../ClickhouseNativeSocketConnection.java | 50 +++++++++++++++ .../impl/ClickhouseServerException.java | 2 + .../impl/codec/ByteBufUtils.java | 24 +++++++ .../impl/codec/ClickhouseNativeCodec.java | 17 +++++ .../codec/ClickhouseNativeCommandCodec.java | 31 +++++++++ .../impl/codec/ClickhouseNativeDecoder.java | 28 ++++++++ .../impl/codec/ClickhouseNativeEncoder.java | 64 +++++++++++++++++++ ...ClickhouseNativeQueryCommandBaseCodec.java | 2 + .../impl/codec/ClientPacketTypes.java | 5 ++ .../impl/codec/InitCommandCodec.java | 42 ++++++++++++ .../impl/codec/ServerPacketTypes.java | 2 + .../impl/codec/SimpleQueryCodec.java | 2 + .../spi/ClickhouseNativeDriver.java | 34 ++++++++++ .../src/main/resources/META-INF/MANIFEST.MF | 2 + .../services/io.vertx.sqlclient.spi.Driver | 1 + 25 files changed, 594 insertions(+) create mode 100644 vertx-clickhouse-native-client/pom.xml create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java create mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF create mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java new file mode 100644 index 0000000000..d313a788d5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -0,0 +1,7 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Defines { + public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; + public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; + public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java new file mode 100644 index 0000000000..85ced66106 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.codegen.annotations.DataObject; +import io.vertx.core.json.JsonObject; +import io.vertx.sqlclient.SqlConnectOptions; + +@DataObject(generateConverter = true) +public class ClickhouseNativeConnectOptions extends SqlConnectOptions { + public static final int DEFAULT_PIPELINING_LIMIT = 256; + + private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; + + public ClickhouseNativeConnectOptions(JsonObject json) { + super(json); + ClickhouseNativeConnectOptionsConverter.fromJson(json, this); + } + + public ClickhouseNativeConnectOptions(SqlConnectOptions other) { + super(other); + if (other instanceof ClickhouseNativeConnectOptions) { + ClickhouseNativeConnectOptions opts = (ClickhouseNativeConnectOptions) other; + } + } + + public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { + super(other); + } + + public int getPipeliningLimit() { + return pipeliningLimit; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java new file mode 100644 index 0000000000..627956809f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -0,0 +1,15 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.core.json.JsonObject; + +public class ClickhouseNativeConnectOptionsConverter { + public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + } + + public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + toJson(obj, json.getMap()); + } + + public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java new file mode 100644 index 0000000000..e13f78f394 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.codegen.annotations.VertxGen; +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Vertx; +import io.vertx.core.impl.ContextInternal; +import io.vertx.sqlclient.SqlConnection; + +@VertxGen +public interface ClickhouseNativeConnection extends SqlConnection { + static void connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, Handler> handler) { + Future fut = connect(vertx, connectOptions); + if (handler != null) { + fut.onComplete(handler); + } + } + + static Future connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions) { + return ClickhouseNativeConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java new file mode 100644 index 0000000000..c9829f7293 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.codegen.annotations.VertxGen; +import io.vertx.core.Vertx; +import io.vertx.core.VertxOptions; +import io.vertx.core.impl.VertxInternal; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; + +@VertxGen +public interface ClickhouseNativePool extends Pool { + static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + if (Vertx.currentContext() != null) { + throw new IllegalStateException("Running in a Vertx context => use PgPool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); + } + VertxOptions vertxOptions = new VertxOptions(); + VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); + return ClickhouseNativePoolImpl.create(vertx.getOrCreateContext(), true, connectOptions, poolOptions); + } + + + static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + return ClickhouseNativePoolImpl.create(((VertxInternal)vertx).getOrCreateContext(), false, connectOptions, poolOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java new file mode 100644 index 0000000000..2facd19cbb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -0,0 +1,59 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.core.Future; +import io.vertx.core.Promise; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.net.NetClientOptions; +import io.vertx.core.net.NetSocket; +import io.vertx.core.net.impl.NetSocketInternal; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; + +public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private int pipeliningLimit; + + ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { + super(context, options); + } + + @Override + protected void initializeConfiguration(SqlConnectOptions connectOptions) { + ClickhouseNativeConnectOptions options = (ClickhouseNativeConnectOptions) connectOptions; + this.pipeliningLimit = options.getPipeliningLimit(); + } + + @Override + protected void configureNetClientOptions(NetClientOptions netClientOptions) { + netClientOptions.setSsl(false); + } + + @Override + protected void doConnectInternal(Promise promise) { + doConnect().flatMap(conn -> { + ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; + socket.init(); + return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) + .map(conn); + }).onComplete(promise); + } + + private Future doConnect() { + Future soFut; + try { + soFut = netClient.connect(socketAddress, (String) null); + } catch (Exception e) { + // Client is closed + return context.failedFuture(e); + } + Future connFut = soFut.map(so -> newSocketConnection((NetSocketInternal) so)); + return connFut; + } + + private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { + return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, + preparedStatementCacheSqlFilter, pipeliningLimit, context); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java new file mode 100644 index 0000000000..132dd8d053 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnection; +import io.vertx.core.Future; +import io.vertx.core.impl.ContextInternal; +import io.vertx.core.impl.future.PromiseInternal; +import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.QueryTracer; + +public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl implements ClickhouseNativeConnection { + private final ClickhouseNativeConnectionFactory factory; + + public static Future connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { + ClickhouseNativeConnectionFactory client; + try { + client = new ClickhouseNativeConnectionFactory(ConnectionFactory.asEventLoopContext(ctx), options); + } catch (Exception e) { + return ctx.failedFuture(e); + } + ctx.addCloseHook(client); + QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); + PromiseInternal promise = ctx.promise(); + client.connect(promise); + return promise.future().map(conn -> { + ClickhouseNativeConnectionImpl mySQLConnection = new ClickhouseNativeConnectionImpl(client, ctx, conn, tracer, null); + conn.init(mySQLConnection); + return mySQLConnection; + }); + } + + ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { + super(context, conn, tracer, metrics); + + this.factory = factory; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java new file mode 100644 index 0000000000..9bfad341f0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.sqlclient.spi.DatabaseMetadata; + +public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { + private final String productName; + private final String fullVersion; + private final String major; + private final String minor; + + public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, String major, String minor) { + this.productName = productName; + this.fullVersion = fullVersion; + this.major = major; + this.minor = minor; + } + + @Override + public String productName() { + return null; + } + + @Override + public String fullVersion() { + return null; + } + + @Override + public int majorVersion() { + return 0; + } + + @Override + public int minorVersion() { + return 0; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java new file mode 100644 index 0000000000..3c892b54c0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.core.impl.CloseFuture; +import io.vertx.core.impl.ContextInternal; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.core.spi.metrics.VertxMetrics; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.PoolBase; +import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.QueryTracer; + +public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { + public static ClickhouseNativePoolImpl create(ContextInternal context, boolean closeVertx, + ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); + VertxMetrics vertxMetrics = context.owner().metricsSPI(); + ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), + "sql", connectOptions.getMetricsName()) : null; + EventLoopContext eventLoopContext = ConnectionFactory.asEventLoopContext(context); + ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(eventLoopContext, + new ClickhouseNativeConnectionFactory(eventLoopContext, connectOptions), tracer, metrics, poolOptions); + CloseFuture closeFuture = pool.closeFuture(); + if (closeVertx) { + closeFuture.onComplete(ar -> context.owner().close()); + } else { + context.addCloseHook(closeFuture); + } + return pool; + } + + private final ClickhouseNativeConnectionFactory factory; + + private ClickhouseNativePoolImpl(EventLoopContext context, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + ClientMetrics metrics, PoolOptions poolOptions) { + super(context, factory, tracer, metrics, poolOptions); + this.factory = factory; + } + + @Override + protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { + return new ClickhouseNativeConnectionImpl(factory, context, conn, tracer, metrics); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java new file mode 100644 index 0000000000..aabc88bf52 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.netty.channel.ChannelPipeline; +import io.vertx.clickhouse.clikhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.core.Promise; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.net.impl.NetSocketInternal; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.SocketConnectionBase; +import io.vertx.sqlclient.impl.command.InitCommand; +import io.vertx.sqlclient.spi.DatabaseMetadata; + +import java.util.Map; +import java.util.function.Predicate; + +public class ClickhouseNativeSocketConnection extends SocketConnectionBase { + private ClickhouseNativeCodec codec; + private ClickhouseNativeDatabaseMetadata md; + + public ClickhouseNativeSocketConnection(NetSocketInternal socket, + boolean cachePreparedStatements, + int preparedStatementCacheSize, + Predicate preparedStatementCacheSqlFilter, + int pipeliningLimit, + EventLoopContext context) { + super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + } + + @Override + public void init() { + codec = new ClickhouseNativeCodec(this); + ChannelPipeline pipeline = socket.channelHandlerContext().pipeline(); + pipeline.addBefore("handler", "codec", codec); + super.init(); + } + + void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { + InitCommand cmd = new InitCommand(this, username, password, database, properties); + schedule(cmd, completionHandler); + } + + public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + } + + @Override + public DatabaseMetadata getDatabaseMetaData() { + return md; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java new file mode 100644 index 0000000000..1a7d402763 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl;public class ClickhouseServerException { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java new file mode 100644 index 0000000000..953d21a006 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +import java.nio.charset.StandardCharsets; + +public class ByteBufUtils { + public static void writeULeb128(int value, ByteBuf buf) { + assert (value >= 0); + int remaining = value >>> 7; + while (remaining != 0) { + buf.writeByte((byte) ((value & 0x7f) | 0x80)); + value = remaining; + remaining >>>= 7; + } + buf.writeByte((byte) (value & 0x7f)); + } + + public static void writeCString(String str, ByteBuf buf) { + byte[] b = str.getBytes(StandardCharsets.UTF_8); + writeULeb128(b.length, buf); + buf.writeBytes(b); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java new file mode 100644 index 0000000000..4c2ec05165 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -0,0 +1,17 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.channel.CombinedChannelDuplexHandler; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; + +import java.util.ArrayDeque; + +public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { + private ArrayDeque> inflight; + + public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { + inflight = new ArrayDeque<>(); + ClickhouseNativeEncoder encoder = new ClickhouseNativeEncoder(inflight, conn); + ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); + init(decoder, encoder); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java new file mode 100644 index 0000000000..d2a386e64e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.Handler; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.CommandResponse; + +abstract class ClickhouseNativeCommandCodec> { + protected ClickhouseNativeEncoder encoder; + protected Handler> completionHandler; + protected final C cmd; + + protected ClickhouseNativeCommandCodec(C cmd) { + this.cmd = cmd; + } + + void encode(ClickhouseNativeEncoder encoder) { + this.encoder = encoder; + } + + abstract void decode(ChannelHandlerContext ctx, ByteBuf in); + + ByteBuf allocateBuffer() { + return encoder.chctx().alloc().ioBuffer(); + } + + ByteBuf allocateBuffer(int capacity) { + return encoder.chctx().alloc().ioBuffer(capacity); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java new file mode 100644 index 0000000000..17ba46cfca --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.ArrayDeque; +import java.util.List; + +public class ClickhouseNativeDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeDecoder.class); + + private final ArrayDeque> inflight; + private final ClickhouseNativeSocketConnection conn; + public ClickhouseNativeDecoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + this.inflight = inflight; + this.conn = conn; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + ClickhouseNativeCommandCodec codec = inflight.peek(); + codec.decode(ctx, in); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java new file mode 100644 index 0000000000..45690fc1cf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.InitCommand; + +import java.util.ArrayDeque; + +public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { + + private final ArrayDeque> inflight; + private final ClickhouseNativeSocketConnection conn; + + private ChannelHandlerContext chctx; + + public ClickhouseNativeEncoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + this.inflight = inflight; + this.conn = conn; + } + + ClickhouseNativeSocketConnection getConn() { + return conn; + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + chctx = ctx; + } + + ChannelHandlerContext chctx() { + return chctx; + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (msg instanceof CommandBase) { + CommandBase cmd = (CommandBase) msg; + write(cmd); + } else { + super.write(ctx, msg, promise); + } + } + + void write(CommandBase cmd) { + ClickhouseNativeCommandCodec codec = wrap(cmd); + codec.completionHandler = resp -> { + ClickhouseNativeCommandCodec c = inflight.poll(); + resp.cmd = (CommandBase) c.cmd; + chctx.fireChannelRead(resp); + }; + inflight.add(codec); + codec.encode(this); + } + + private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { + if (cmd instanceof InitCommand) { + return new InitCommandCodec((InitCommand) cmd); + } + throw new UnsupportedOperationException(cmd.getClass().getName()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java new file mode 100644 index 0000000000..870eeb9739 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class ClickhouseNativeQueryCommandBaseCodec { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java new file mode 100644 index 0000000000..2b1f82a74b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -0,0 +1,5 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class PacketTypes { + public static final int HELLO = 0; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java new file mode 100644 index 0000000000..6a6b9c9d78 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.command.CommandResponse; +import io.vertx.sqlclient.impl.command.InitCommand; + +public class InitCommandCodec extends ClickhouseNativeCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); + + InitCommandCodec(InitCommand cmd) { + super(cmd); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + + ByteBuf buf = allocateBuffer(); + ByteBufUtils.writeULeb128(PacketTypes.HELLO, buf); + ByteBufUtils.writeCString("ClickHouse " + "test", buf); + ByteBufUtils.writeULeb128(20, buf); + ByteBufUtils.writeULeb128(10, buf); + ByteBufUtils.writeULeb128(54441, buf); + ByteBufUtils.writeCString("default", buf); + ByteBufUtils.writeCString("default", buf); + ByteBufUtils.writeCString("clickhouse4man", buf); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + LOG.info("sent hello packet"); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + encoder.getConn().setDatabaseMetadata(new ClickhouseNativeDatabaseMetadata("", "", "", "")); + LOG.info("decode"); + completionHandler.handle(CommandResponse.success(null)); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java new file mode 100644 index 0000000000..2283eca640 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class ServerPacketTypes { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java new file mode 100644 index 0000000000..8636774735 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class SimpleQueryCodec { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java new file mode 100644 index 0000000000..54f3fb44e9 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -0,0 +1,34 @@ +package io.vertx.clickhouse.clikhousenative.spi; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.core.Vertx; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.spi.Driver; + +public class ClickhouseNativeDriver implements Driver { + @Override + public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) { + return ClickhouseNativePool.pool(wrap(options), poolOptions); + } + + @Override + public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolOptions) { + return ClickhouseNativePool.pool(vertx, wrap(options), poolOptions); + } + + @Override + public boolean acceptsOptions(SqlConnectOptions options) { + return options instanceof ClickhouseNativeConnectOptions || SqlConnectOptions.class.equals(options.getClass()); + } + + private static ClickhouseNativeConnectOptions wrap(SqlConnectOptions options) { + if (options instanceof ClickhouseNativeConnectOptions) { + return (ClickhouseNativeConnectOptions) options; + } else { + return new ClickhouseNativeConnectOptions(options); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..0b2347374d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Automatic-Module-Name: io.vertx.client.sql.pg + diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver new file mode 100644 index 0000000000..eaa7ce3272 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -0,0 +1 @@ +io.vertx.pgclient.spi.PgDriver \ No newline at end of file From 622b2fb49e10efdbd52d5a8d77f1c5b0063f208a Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Feb 2021 20:17:19 +0300 Subject: [PATCH 002/176] Fixed typo Signed-off-by: vladimir --- pom.xml | 1 + vertx-clickhouse-native-client/pom.xml | 170 ++++++++++++++++++ .../clickhousenative/ClickhouseConstants.java | 6 +- .../ClickhouseNativeConnectOptions.java | 2 +- ...ickhouseNativeConnectOptionsConverter.java | 2 +- .../ClickhouseNativeConnection.java | 4 +- .../ClickhouseNativePool.java | 6 +- .../ClickhouseNativeConnectionFactory.java | 4 +- .../impl/ClickhouseNativeConnectionImpl.java | 13 +- .../ClickhouseNativeDatabaseMetadata.java | 31 +++- .../impl/ClickhouseNativePoolImpl.java | 6 +- .../ClickhouseNativeSocketConnection.java | 4 +- .../impl/ClickhouseServerException.java | 33 +++- .../impl/codec/ByteBufUtils.java | 47 ++++- .../impl/codec/ClickhouseNativeCodec.java | 16 +- .../codec/ClickhouseNativeCommandCodec.java | 2 +- .../impl/codec/ClickhouseNativeDecoder.java | 4 +- .../impl/codec/ClickhouseNativeEncoder.java | 7 +- ...ClickhouseNativeQueryCommandBaseCodec.java | 9 +- .../impl/codec/ClientPacketTypes.java | 2 +- .../impl/codec/InitCommandCodec.java | 124 +++++++++++-- .../impl/codec/ServerPacketTypes.java | 7 +- .../impl/codec/SimpleQueryCodec.java | 15 +- .../spi/ClickhouseNativeDriver.java | 6 +- .../src/main/resources/META-INF/MANIFEST.MF | 2 +- .../services/io.vertx.sqlclient.spi.Driver | 2 +- 26 files changed, 472 insertions(+), 53 deletions(-) diff --git a/pom.xml b/pom.xml index 844ec45b88..58225cab0e 100644 --- a/pom.xml +++ b/pom.xml @@ -117,6 +117,7 @@ vertx-mysql-client vertx-mssql-client vertx-db2-client + vertx-clickhouse-native-client vertx-sql-client-templates diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index e69de29bb2..454487572a 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -0,0 +1,170 @@ + + + + + 4.0.0 + + + io.vertx + vertx-sql-client-parent + 4.0.3-SNAPSHOT + + + vertx-clickhouse-native-client + + Vertx Clickhouse native Client + https://github.com/eclipse-vertx/vertx-sql-client + The Reactive Clickhouse Client + + + false + ${project.basedir}/src/main/docs + ${project.basedir}/src/main/generated + + + + + + + + + io.vertx + vertx-core + + + io.vertx + vertx-codegen + true + + + io.vertx + vertx-docgen + true + + + io.vertx + vertx-sql-client + + + + io.vertx + vertx-sql-client + test-jar + test + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + test + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + test + + + + + + + + + maven-surefire-plugin + + -Xmx1024M + + ${project.build.directory} + ${embedded.postgres.version} + ${connection.uri} + ${tls.connection.uri} + ${unix.socket.directory} + ${unix.socket.port} + + + io/vertx/pgclient/it/** + + + + + + + + org.bsc.maven + maven-processor-plugin + + + generate-sources + + + ${project.basedir}/../vertx-sql-client/src/main/asciidoc/*.adoc,${asciidoc.dir}/*.adoc + + + + + + + maven-assembly-plugin + + + + package-sources + + + ${project.basedir}/../assembly/sources.xml + + + none + + true + + + + + + maven-failsafe-plugin + 2.21.0 + + + env-test + + integration-test + + integration-test + + + io/vertx/pgclient/it/EnvTest.java + + + test_host + test_database + 1234 + test_user + test_password + require + + + + + + + + + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index d313a788d5..37bcec7c34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,7 +1,9 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative; -public class Defines { +public class ClickhouseConstants { public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; + + public static final String CLIENT_NAME = "CLIENT_NAME"; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 85ced66106..dacf708b77 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 627956809f..e085fa9144 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index e13f78f394..eee51f5f1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index c9829f7293..0583f93244 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; @@ -12,7 +12,7 @@ public interface ClickhouseNativePool extends Pool { static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { if (Vertx.currentContext() != null) { - throw new IllegalStateException("Running in a Vertx context => use PgPool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); + throw new IllegalStateException("Running in a Vertx context => use ClickhouseNativePool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 2facd19cbb..48f4135fc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index 132dd8d053..e0e483b487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,11 +1,12 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionImpl; @@ -34,7 +35,11 @@ public static Future connect(ContextInternal ctx, Cl ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { super(context, conn, tracer, metrics); - this.factory = factory; } + + @Override + public Future begin() { + throw new UnsupportedOperationException(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 9bfad341f0..ea5bc55667 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,18 +1,27 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; - private final String major; - private final String minor; + private final int major; + private final int minor; + private final int revision; + private final int patchVersion; + private final String displayName; + private final String timezone; - public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, String major, String minor) { + public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, + int patchVersion, String displayName, String timezone) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; this.minor = minor; + this.revision = revision; + this.patchVersion = patchVersion; + this.displayName = displayName; + this.timezone = timezone; } @Override @@ -34,4 +43,18 @@ public int majorVersion() { public int minorVersion() { return 0; } + + @Override + public String toString() { + return "ClickhouseNativeDatabaseMetadata{" + + "productName='" + productName + '\'' + + ", fullVersion='" + fullVersion + '\'' + + ", major=" + major + + ", minor=" + minor + + ", revision=" + revision + + ", patchVersion=" + patchVersion + + ", displayName='" + displayName + '\'' + + ", timezone='" + timezone + '\'' + + '}'; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 3c892b54c0..2f43623e6b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index aabc88bf52..fb4aa31825 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clikhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 1a7d402763..0561b90795 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,2 +1,33 @@ -package io.vertx.clickhouse.clickhousenative.impl;public class ClickhouseServerException { +package io.vertx.clickhouse.clickhousenative.impl; + +public class ClickhouseServerException extends RuntimeException { + private final Integer code; + private final String name; + private final String message; + private final String stacktrace; + + public ClickhouseServerException(Integer code, String name, String message, String stacktrace) { + super(message); + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + @Override + public String getMessage() { + return message; + } + + public String getStacktrace() { + return stacktrace; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 953d21a006..e7d9fe0474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; @@ -16,7 +16,50 @@ public static void writeULeb128(int value, ByteBuf buf) { buf.writeByte((byte) (value & 0x7f)); } - public static void writeCString(String str, ByteBuf buf) { + public static Integer readULeb128(ByteBuf buf) { + int value = 0; + int read = 0; + int count = 0; + int readerIndex = buf.readerIndex(); + boolean notEnoughData = false; + do { + if (buf.readableBytes() >= 1) { + read = buf.readByte() & 0xff; + value |= (read & 0x7f) << (count * 7); + count++; + } else { + notEnoughData = true; + break; + } + } while (((read & 0x80) == 0x80) && count < 5); + + if (notEnoughData) { + buf.readerIndex(readerIndex); + return null; + } + if ((read & 0x80) == 0x80) { + buf.readerIndex(readerIndex); + throw new RuntimeException("invalid LEB128 sequence"); + } + return value; + } + + public static String readPascalString(ByteBuf buf) { + int readerIndex = buf.readerIndex(); + Integer length = readULeb128(buf); + if (length == null) { + return null; + } + if (buf.readableBytes() >= length) { + byte[] b = new byte[length]; + buf.readBytes(b); + return new String(b, StandardCharsets.UTF_8); + } + buf.readerIndex(readerIndex); + return null; + } + + public static void writePascalString(String str, ByteBuf buf) { byte[] b = str.getBytes(StandardCharsets.UTF_8); writeULeb128(b.length, buf); buf.writeBytes(b); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index 4c2ec05165..c594165bb0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,11 +1,16 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; +import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); + private ArrayDeque> inflight; public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { @@ -14,4 +19,11 @@ public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); init(decoder, encoder); } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + //TODO smagellan: maybe remove method + LOG.error("caught exception", cause); + super.exceptionCaught(ctx, cause); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index d2a386e64e..369ae7d18a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 17ba46cfca..fb1ea517fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,9 +1,9 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 45690fc1cf..37b4511547 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,11 +1,12 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.InitCommand; +import io.vertx.sqlclient.impl.command.SimpleQueryCommand; import java.util.ArrayDeque; @@ -58,6 +59,8 @@ void write(CommandBase cmd) { private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); + } else if (cmd instanceof SimpleQueryCommand) { + return new SimpleQueryCodec<>((SimpleQueryCommand) cmd); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 870eeb9739..8b4596e7e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,2 +1,9 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class ClickhouseNativeQueryCommandBaseCodec { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.impl.command.QueryCommandBase; + +abstract class ClickhouseNativeQueryCommandBaseCodec > extends ClickhouseNativeCommandCodec{ + protected ClickhouseNativeQueryCommandBaseCodec(C cmd) { + super(cmd); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 2b1f82a74b..00e2d8f3ff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,5 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -public class PacketTypes { +public class ClientPacketTypes { public static final int HELLO = 0; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6a6b9c9d78..fa241013d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,8 +1,10 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; @@ -12,6 +14,22 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); + //server-related info + private Integer packetType; + private String productName; + private Integer major; + private Integer minor; + private Integer revision; + private String timezone; + private String displayName; + private Integer patchVersion; + + //server-error related info + private Integer code; + private String name; + private String message; + private String stacktrace; + InitCommandCodec(InitCommand cmd) { super(cmd); } @@ -21,22 +39,108 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); ByteBuf buf = allocateBuffer(); - ByteBufUtils.writeULeb128(PacketTypes.HELLO, buf); - ByteBufUtils.writeCString("ClickHouse " + "test", buf); + ByteBufUtils.writeULeb128(ClientPacketTypes.HELLO, buf); + String clientId = "ClickHouse " + cmd.properties() + .getOrDefault(ClickhouseConstants.CLIENT_NAME, "vertx-sql"); + ByteBufUtils.writePascalString(clientId, buf); ByteBufUtils.writeULeb128(20, buf); ByteBufUtils.writeULeb128(10, buf); ByteBufUtils.writeULeb128(54441, buf); - ByteBufUtils.writeCString("default", buf); - ByteBufUtils.writeCString("default", buf); - ByteBufUtils.writeCString("clickhouse4man", buf); + ByteBufUtils.writePascalString(cmd.database(), buf); + ByteBufUtils.writePascalString(cmd.username(), buf); + ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); LOG.info("sent hello packet"); } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - encoder.getConn().setDatabaseMetadata(new ClickhouseNativeDatabaseMetadata("", "", "", "")); - LOG.info("decode"); - completionHandler.handle(CommandResponse.success(null)); + if (packetType == null) { + packetType = ByteBufUtils.readULeb128(in); + LOG.info("packet type: " + packetType); + if (packetType == null) { + return; + } + } + if (packetType == ServerPacketTypes.HELLO) { + productName = ByteBufUtils.readPascalString(in); + if (productName == null) { + return; + } + if (major == null) { + major = ByteBufUtils.readULeb128(in); + if (major == null) { + return; + } + } + if (minor == null) { + minor = ByteBufUtils.readULeb128(in); + if (minor == null) { + return; + } + } + if (revision == null) { + revision = ByteBufUtils.readULeb128(in); + if (revision == null) { + return; + } + } + if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + timezone = ByteBufUtils.readPascalString(in); + if (timezone == null) { + return; + } + } + if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { + displayName = ByteBufUtils.readPascalString(in); + if (displayName == null) { + return; + } + } + patchVersion = revision; + if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + patchVersion = ByteBufUtils.readULeb128(in); + if (patchVersion == null) { + return; + } + } + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, + String.format("%d.%d.%d", major, minor, revision), + major, minor, revision, patchVersion, displayName, timezone); + encoder.getConn().setDatabaseMetadata(md); + LOG.info("decode: " + md); + completionHandler.handle(CommandResponse.success(null)); + } else if (packetType == ServerPacketTypes.EXCEPTION) { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return; + } + } + if (name == null) { + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return; + } + } + if (message == null) { + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return; + } + } + if (stacktrace == null) { + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return; + } + } + completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); + } else { + String msg = "unknown packet type: " + packetType; + LOG.error(msg); + completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java index 2283eca640..116d2b523f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java @@ -1,2 +1,7 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class ServerPacketTypes { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class ServerPacketTypes { + public static final int HELLO = 0; + public static final int DATA = 1; + public static final int EXCEPTION = 2; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java index 8636774735..57f077082b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -1,2 +1,15 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class SimpleQueryCodec { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.sqlclient.impl.command.SimpleQueryCommand; + +public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + protected SimpleQueryCodec(SimpleQueryCommand cmd) { + super(cmd); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 54f3fb44e9..7390ea7f9e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.spi; +package io.vertx.clickhouse.clickhousenative.spi; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF index 0b2347374d..40f000bfbe 100644 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF @@ -1,2 +1,2 @@ -Automatic-Module-Name: io.vertx.client.sql.pg +Automatic-Module-Name: io.vertx.client.sql.clickhouse.native diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver index eaa7ce3272..860bd992e9 100644 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -1 +1 @@ -io.vertx.pgclient.spi.PgDriver \ No newline at end of file +io.vertx.clickhouse.clickhousenative.spi.ClickhouseNativeDriver From 95a624e7708cfafcf63538a2744ab9a8b62c3ab7 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Feb 2021 22:33:48 +0300 Subject: [PATCH 003/176] implemented SimpleQueryCodec Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 18 ++- .../clickhousenative/impl/BaseBlock.java | 40 ++++++ .../clickhousenative/impl/BlockInfo.java | 76 ++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 24 +++- .../impl/ClickhouseNativeRow.java | 67 ++++++++++ .../impl/ClickhouseNativeRowDesc.java | 16 +++ .../ClickhouseNativeSocketConnection.java | 2 +- .../impl/ColumnOrientedBlock.java | 31 +++++ .../clickhousenative/impl/Pair.java | 27 ++++ .../impl/RowOrientedBlock.java | 29 +++++ .../impl/codec/BlockStreamProfileInfo.java | 95 ++++++++++++++ .../ClickhouseNativeColumnDescriptor.java | 64 ++++++++++ .../impl/codec/ClientInfo.java | 47 +++++++ .../impl/codec/ClientPacketTypes.java | 2 + .../impl/codec/ColumnOrientedBlockReader.java | 117 ++++++++++++++++++ .../impl/codec/Compression.java | 6 + .../impl/codec/InitCommandCodec.java | 35 ++++-- .../impl/codec/PacketReader.java | 76 ++++++++++++ .../impl/codec/QueryProcessingStage.java | 7 ++ .../impl/codec/QueryProgressInfo.java | 79 ++++++++++++ .../impl/codec/RowResultDecoder.java | 47 +++++++ .../impl/codec/ServerPacketType.java | 73 +++++++++++ .../impl/codec/ServerPacketTypes.java | 7 -- .../impl/codec/SimpleQueryCodec.java | 108 ++++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 77 ++++++++++++ .../impl/codec/columns/ClickhouseColumns.java | 58 +++++++++ .../impl/codec/columns/ColumnSpec.java | 16 +++ .../impl/codec/columns/FixedStringColumn.java | 31 +++++ .../impl/codec/columns/StringColumn.java | 40 ++++++ .../impl/codec/columns/UInt32Column.java | 24 ++++ .../impl/codec/columns/UInt8Column.java | 24 ++++ 31 files changed, 1342 insertions(+), 21 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 37bcec7c34..b696a0409c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,9 +1,25 @@ package io.vertx.clickhouse.clickhousenative; public class ClickhouseConstants { + public static final int DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES = 50264; + public static final int DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS = 51554; + public static final int DBMS_MIN_REVISION_WITH_BLOCK_INFO = 51903; + + public static final int DBMS_MIN_REVISION_WITH_CLIENT_INFO = 54032; public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; + public static final int DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO = 54060; public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; + public static final int DBMS_MIN_REVISION_WITH_SERVER_LOGS = 54406; + public static final int DBMS_MIN_REVISION_WITH_COLUMN_DEFAULTS_METADATA = 54410; + public static final int DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO = 54420; + public static final int DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS = 54429; + public static final int DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET = 54441; + + public static final int CLIENT_VERSION_MAJOR = 20; + public static final int CLIENT_VERSION_MINOR = 10; + public static final int CLIENT_VERSION_PATCH = 2; + public static final int CLIENT_REVISION = 54441; - public static final String CLIENT_NAME = "CLIENT_NAME"; + public static final String OPTION_CLIENT_NAME = "CLIENT_NAME"; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java new file mode 100644 index 0000000000..5f25466814 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ColumnSpec; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class BaseBlock { + private final Map columnsWithTypes; + private final List data; + private final BlockInfo blockInfo; + private final ClickhouseNativeDatabaseMetadata md; + + public BaseBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + this.columnsWithTypes = columnsWithTypes; + this.data = data; + this.blockInfo = blockInfo; + this.md = md; + } + + public Map getColumnsWithTypes() { + return columnsWithTypes; + } + + public List getData() { + return data; + } + + public BlockInfo getBlockInfo() { + return blockInfo; + } + + public ClickhouseNativeDatabaseMetadata getMd() { + return md; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java new file mode 100644 index 0000000000..607d0f0b52 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +public class BlockInfo { + private static final Logger LOG = LoggerFactory.getLogger(BlockInfo.class); + + private Boolean isOverflows; + private Integer bucketNum; + private boolean complete; + + public BlockInfo() { + isOverflows = false; + bucketNum = -1; + } + + public BlockInfo(Boolean isOverflows, Integer bucketNum) { + this.isOverflows = isOverflows; + this.bucketNum = bucketNum; + } + + public void serializeTo(ByteBuf buf) { + ByteBufUtils.writeULeb128(1, buf); + buf.writeByte(isOverflows ? 1 : 0); + ByteBufUtils.writeULeb128(2, buf); + buf.writeIntLE(bucketNum); + ByteBufUtils.writeULeb128(0, buf); + } + + public boolean isComplete() { + return complete; + } + + public boolean isPartial() { + return !complete; + } + + public void readFrom(ByteBuf buf) { + while (isPartial()) { + Integer fieldNum = ByteBufUtils.readULeb128(buf); + if (fieldNum != null) { + LOG.info("fieldNum: " + fieldNum); + if (fieldNum == 0) { + complete = true; + return; + } + if (fieldNum == 1) { + if (buf.readableBytes() >= 1) { + isOverflows = buf.readByte() != 0; + LOG.info("isOverflows: " + isOverflows); + } else { + return; + } + } else if (fieldNum == 2) { + if (buf.readableBytes() >= 4) { + bucketNum = buf.readInt(); + LOG.info("bucketNum: " + bucketNum); + } else { + return; + } + } + } + } + } + + @Override + public String toString() { + return "BlockInfo{" + + "isOverflows=" + isOverflows + + ", bucketNum=" + bucketNum + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index ea5bc55667..d167ec24d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -11,9 +11,10 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int patchVersion; private final String displayName; private final String timezone; + private final String clientName; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, String timezone) { + int patchVersion, String displayName, String timezone, String clientName) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -22,6 +23,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.patchVersion = patchVersion; this.displayName = displayName; this.timezone = timezone; + this.clientName = clientName; } @Override @@ -44,6 +46,26 @@ public int minorVersion() { return 0; } + public int getRevision() { + return revision; + } + + public int getPatchVersion() { + return patchVersion; + } + + public String getDisplayName() { + return displayName; + } + + public String getTimezone() { + return timezone; + } + + public String getClientName() { + return clientName; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java new file mode 100644 index 0000000000..c2d668cff8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -0,0 +1,67 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class ClickhouseNativeRow implements Row { + private final int rowNo; + private final Charset stringCharset; + private final ClickhouseNativeRowDesc rowDesc; + private final ColumnOrientedBlock block; + + public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block) { + this.rowNo = rowNo; + this.rowDesc = rowDesc; + this.block = block; + this.stringCharset = StandardCharsets.UTF_8; + } + + @Override + public String getColumnName(int pos) { + return rowDesc.columnNames().get(pos); + } + + @Override + public int getColumnIndex(String column) { + return rowDesc.columnIndex(column); + } + + @Override + public Object getValue(int columnIndex) { + return block.getData().get(columnIndex).getElement(rowNo); + } + + @Override + public String getString(int pos) { + Object val = getValue(pos); + if (val == null) { + return null; + } else if (val instanceof String) { + return (String) val; + } else if (val instanceof Enum) { + return ((Enum) val).name(); + } else if (val.getClass() == byte[].class) { + return new String((byte[])val, stringCharset); + } else { + throw new ClassCastException("Invalid String value type " + val.getClass()); + } + } + + @Override + public Tuple addValue(Object value) { + throw new IllegalStateException("not implemented"); + } + + @Override + public int size() { + return block.numRows(); + } + + @Override + public void clear() { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java new file mode 100644 index 0000000000..3db511730d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -0,0 +1,16 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.sqlclient.desc.ColumnDescriptor; +import io.vertx.sqlclient.impl.RowDesc; + +import java.util.List; + +public class ClickhouseNativeRowDesc extends RowDesc { + public ClickhouseNativeRowDesc(List columnNames) { + super(columnNames); + } + + public ClickhouseNativeRowDesc(List columnNames, List columnDescriptors) { + super(columnNames, columnDescriptors); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index fb4aa31825..6f0b9100e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -44,7 +44,7 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { } @Override - public DatabaseMetadata getDatabaseMetaData() { + public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java new file mode 100644 index 0000000000..f1e538e0a0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class ColumnOrientedBlock extends BaseBlock { + public static final ColumnOrientedBlock PARTIAL = new ColumnOrientedBlock(null, null, null, null); + + public ColumnOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + super(columnsWithTypes, data, blockInfo, md); + } + + public int numColumns() { + Collection dt = getData(); + return dt == null ? 0 : dt.size(); + } + + public int numRows() { + if (numColumns() > 0) { + ClickhouseColumn firstRow = getData().iterator().next(); + return java.lang.reflect.Array.getLength(firstRow.getItems()); + } else { + return 0; + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java new file mode 100644 index 0000000000..1c3cf43dcd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +public class Pair { + private final K left; + private final V right; + + public Pair(K left, V right) { + this.left = left; + this.right = right; + } + + public K getLeft() { + return left; + } + + public V getRight() { + return right; + } + + @Override + public String toString() { + return "Pair{" + + "left=" + left + + ", right=" + right + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java new file mode 100644 index 0000000000..2c15f7f8bc --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; + +import java.util.List; +import java.util.Map; + +public class RowOrientedBlock extends BaseBlock { + + public RowOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + super(columnsWithTypes, data, blockInfo, md); + } + + public void serializeTo(ByteBuf buf) { + if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + getBlockInfo().serializeTo(buf); + } + //n_columns + ByteBufUtils.writeULeb128(0, buf); + //n_rows + ByteBufUtils.writeULeb128(0, buf); + //TODO smagellan + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java new file mode 100644 index 0000000000..bae2e68a88 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -0,0 +1,95 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +public class BlockStreamProfileInfo { + private Integer rows; + private Integer blocks; + private Integer bytes; + private Boolean appliedLimit; + private Integer rowsBeforeLimit; + private Boolean calculatedRowsBeforeLimit; + + public void readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return; + } + } + if (blocks == null) { + blocks = ByteBufUtils.readULeb128(in); + if (blocks == null) { + return; + } + } + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return; + } + } + if (appliedLimit == null) { + if (in.readableBytes() == 0) { + return; + } + appliedLimit = in.readBoolean(); + } + if (rowsBeforeLimit == null) { + rowsBeforeLimit = ByteBufUtils.readULeb128(in); + if (rowsBeforeLimit == null) { + return; + } + } + if (calculatedRowsBeforeLimit == null) { + if (in.readableBytes() == 0) { + return; + } + calculatedRowsBeforeLimit = in.readBoolean(); + } + } + + public Integer getRows() { + return rows; + } + + public Integer getBlocks() { + return blocks; + } + + public Integer getBytes() { + return bytes; + } + + public Boolean getAppliedLimit() { + return appliedLimit; + } + + public Integer getRowsBeforeLimit() { + return rowsBeforeLimit; + } + + public Boolean getCalculatedRowsBeforeLimit() { + return calculatedRowsBeforeLimit; + } + + public boolean isComplete() { + return !isPartial(); + } + + public boolean isPartial() { + return calculatedRowsBeforeLimit == null; + } + + @Override + public String toString() { + return "BlockStreamProfileInfo{" + + "rows=" + rows + + ", blocks=" + blocks + + ", bytes=" + bytes + + ", appliedLimit=" + appliedLimit + + ", rowsBeforeLimit=" + rowsBeforeLimit + + ", calculatedRowsBeforeLimit=" + calculatedRowsBeforeLimit + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java new file mode 100644 index 0000000000..2dd5a1bcad --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.desc.ColumnDescriptor; + +import java.sql.JDBCType; + +public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { + public static final int NOSIZE = -1; + + private final String name; + private final String unparsedNativeType; + private final String nativeType; + private final boolean isArray; + private final JDBCType jdbcType; + private final int elementSize; + private final boolean nullable; + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable) { + this.name = name; + this.unparsedNativeType = unparsedNativeType; + this.nativeType = nativeType; + this.isArray = isArray; + this.elementSize = elementSize; + this.jdbcType = jdbcType; + this.nullable = nullable; + } + + @Override + public String name() { + return name; + } + + @Override + public boolean isArray() { + return isArray; + } + + @Override + public JDBCType jdbcType() { + return jdbcType; + } + + public int getElementSize() { + return elementSize; + } + + public boolean isNullable() { + return nullable; + } + + @Override + public String toString() { + return "ClickhouseNativeColumnDescriptor{" + + "name='" + name + '\'' + + ", unparsedNativeType='" + unparsedNativeType + '\'' + + ", nativeType='" + nativeType + '\'' + + ", isArray=" + isArray + + ", jdbcType=" + jdbcType + + ", elementSize=" + elementSize + + ", nullable=" + nullable + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java new file mode 100644 index 0000000000..4799c319ec --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -0,0 +1,47 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class ClientInfo { + public static final int NO_QUERY = 0; + public static final int INITIAL_QUERY = 1; + + private final ClickhouseNativeDatabaseMetadata meta; + + public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { + this.meta = meta; + } + + public void serializeTo(ByteBuf buf) { + int serverRevision = meta.getRevision(); + if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", + serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + } + buf.writeByte(INITIAL_QUERY); + //initial_user + ByteBufUtils.writePascalString("", buf); + //initial_query_id + ByteBufUtils.writePascalString("", buf); + //initial_address + ByteBufUtils.writePascalString("0.0.0.0:0", buf); + //interface: TCP + buf.writeByte(1); + ByteBufUtils.writePascalString(System.getProperty("user.name"), buf); + //TODO smagellan: fix client_hostname resolution + ByteBufUtils.writePascalString("bhorse", buf); + ByteBufUtils.writePascalString(meta.getClientName(), buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + //quota_key + ByteBufUtils.writePascalString("", buf); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 00e2d8f3ff..7573773f4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -2,4 +2,6 @@ public class ClientPacketTypes { public static final int HELLO = 0; + public static final int QUERY = 1; + public static final int DATA = 2; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java new file mode 100644 index 0000000000..1e5199d24f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -0,0 +1,117 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhousenative.impl.Pair; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.*; + +public class ColumnOrientedBlockReader { + private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); + + private final int serverRevision; + private final ClickhouseNativeDatabaseMetadata md; + + private String tempTableInfo; + private BlockInfo blockInfo; + private Integer nColumns; + private Integer nRows; + private Map colWithTypes; + private List data; + + private String colName; + private String colType; + private ClickhouseColumn columnData; + + public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + this.serverRevision = md.getRevision(); + } + + public ColumnOrientedBlock readFrom(ByteBuf in) { + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + } + + //BlockInputStream.read + if (blockInfo == null) { + blockInfo = new BlockInfo(); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + if (blockInfo.isPartial()) { + blockInfo.readFrom(in); + if (blockInfo.isPartial()) { + return ColumnOrientedBlock.PARTIAL; + } + } + } + if (nColumns == null) { + nColumns = ByteBufUtils.readULeb128(in); + if (nColumns == null) { + return ColumnOrientedBlock.PARTIAL; + } + colWithTypes = new LinkedHashMap<>(); + } + if (nRows == null) { + nRows = ByteBufUtils.readULeb128(in); + if (nRows == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + + if (colWithTypes.size() < nColumns) { + if (colName == null) { + colName = ByteBufUtils.readPascalString(in); + if (colName == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + if (colType == null) { + colType = ByteBufUtils.readPascalString(in); + if (colType == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); + if (nRows > 0) { + if (data == null) { + data = new ArrayList<>(nColumns); + } + if (columnData == null) { + LOG.info("reading column " + colName + " of type " + colType); + columnData = ClickhouseColumns.columnForSpec(colName, colWithTypes, nRows); + columnData.readColumn(in); + + if (columnData.isPartial()) { + return ColumnOrientedBlock.PARTIAL; + } else { + data.add(columnData); + columnData = null; + } + } + } + colName = null; + colType = null; + } + if (colWithTypes.size() == nColumns) { + LOG.info("nColumns: " + nColumns + "; nRows: " + nRows); + LOG.info("columns: " + colWithTypes); + LOG.info("decoded: ColumnOrientedBlock"); + return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); + } + return ColumnOrientedBlock.PARTIAL; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java new file mode 100644 index 0000000000..221252ea35 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -0,0 +1,6 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Compression { + public static final int DISABLED = 0; + public static final int ENABLED = 1; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index fa241013d9..226d55926a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -29,6 +29,9 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { patchVersion = ByteBufUtils.readULeb128(in); if (patchVersion == null) { return; } + } else { + patchVersion = revision; } ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone); + major, minor, revision, patchVersion, displayName, timezone, clientName); encoder.getConn().setDatabaseMetadata(md); - LOG.info("decode: " + md); + LOG.info("connected to server: " + md); completionHandler.handle(CommandResponse.success(null)); - } else if (packetType == ServerPacketTypes.EXCEPTION) { + } else if (packetType == ServerPacketType.EXCEPTION.code()) { if (code == null) { if (in.readableBytes() >= 4) { code = in.readIntLE(); @@ -136,6 +141,14 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { return; } } + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readByte() != 0; + } else { + return; + } + } + //TODO smagellan: read nested exception if nested == true completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); } else { String msg = "unknown packet type: " + packetType; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java new file mode 100644 index 0000000000..6cd795f3f9 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +public class PacketReader { + private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); + + private final ClickhouseNativeDatabaseMetadata md; + + private Integer packetType; + + private ColumnOrientedBlockReader columnBlockReader; + + private BlockStreamProfileInfo blockStreamProfileInfo; + private QueryProgressInfo queryProgress; + private boolean endOfStream; + + public PacketReader(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + } + + public ColumnOrientedBlock receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + if (packetType == null) { + packetType = ByteBufUtils.readULeb128(in); + if (packetType == null) { + return ColumnOrientedBlock.PARTIAL; + } + LOG.info("packet type: " + ServerPacketType.fromCode(packetType)); + } + if (packetType == ServerPacketType.DATA.code()) { + if (columnBlockReader == null) { + columnBlockReader = new ColumnOrientedBlockReader(md); + } + ColumnOrientedBlock block = columnBlockReader.readFrom(in); + if (block != ColumnOrientedBlock.PARTIAL) { + columnBlockReader = null; + packetType = null; + } + return block; + } else if (packetType == ServerPacketType.PROFILE_INFO.code()) { + if (blockStreamProfileInfo == null) { + blockStreamProfileInfo = new BlockStreamProfileInfo(); + } + blockStreamProfileInfo.readFrom(in); + if (blockStreamProfileInfo.isComplete()) { + LOG.info("decoded: BlockStreamProfileInfo: " + blockStreamProfileInfo); + blockStreamProfileInfo = null; + packetType = null; + } + } else if (packetType == ServerPacketType.PROGRESS.code()) { + if (queryProgress == null) { + queryProgress = new QueryProgressInfo(md); + } + queryProgress.readFrom(in); + if (queryProgress.isComplete()) { + LOG.info("decoded: QueryProgressInfo: " + queryProgress); + queryProgress = null; + packetType = null; + } + } else if (packetType == ServerPacketType.END_OF_STREAM.code()) { + LOG.info("reached end of stream"); + packetType = null; + endOfStream = true; + } + return null; + } + + public boolean isEndOfStream() { + return endOfStream; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java new file mode 100644 index 0000000000..9c5f44fd2f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -0,0 +1,7 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class QueryProcessingStage { + public static final int FETCH_COLUMNS = 0; + public static final int WITH_MERGEABLE_STATE = 1; + public static final int COMPLETE = 2; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java new file mode 100644 index 0000000000..d8cbc8c637 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -0,0 +1,79 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class QueryProgressInfo { + private final int serverRevision; + + private Integer rows; + private Integer bytes; + private Integer totalRows; + private Integer writtenRows; + private Integer writtenBytes; + + public QueryProgressInfo(ClickhouseNativeDatabaseMetadata md) { + this.serverRevision = md.getRevision(); + } + + public void readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return; + } + } + + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { + if (totalRows == null) { + totalRows = ByteBufUtils.readULeb128(in); + } + if (totalRows == null) { + return; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { + if (writtenRows == null) { + writtenRows = ByteBufUtils.readULeb128(in); + } + if (writtenRows == null) { + return; + } + if (writtenBytes == null) { + writtenBytes = ByteBufUtils.readULeb128(in); + if (writtenBytes == null) { + return; + } + } + } + } + + public boolean isComplete() { + return !isPartial(); + } + + public boolean isPartial() { + return writtenBytes == null; + } + + @Override + public String toString() { + return "QueryProgressInfo{" + + "serverRevision=" + serverRevision + + ", rows=" + rows + + ", bytes=" + bytes + + ", totalRows=" + totalRows + + ", writtenRows=" + writtenRows + + ", writtenBytes=" + writtenBytes + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java new file mode 100644 index 0000000000..fcc4ef690a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -0,0 +1,47 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.impl.RowDecoder; + +import java.util.stream.Collector; + +class RowResultDecoder extends RowDecoder { + private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); + + private final ClickhouseNativeRowDesc rowDesc; + private ColumnOrientedBlock block; + private int rowNo; + + protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc) { + super(collector); + this.rowDesc = rowDesc; + } + + @Override + protected Row decodeRow(int len, ByteBuf in) { + LOG.info("generating row"); + ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); + ++rowNo; + return row; + } + + public void generateRows(ColumnOrientedBlock block) { + this.block = block; + this.rowNo = 0; + for (int i = 0; i < block.numRows(); ++i) { + this.handleRow(-1, null); + } + this.block = null; + this.rowNo = 0; + } + + public ClickhouseNativeRowDesc getRowDesc() { + return rowDesc; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java new file mode 100644 index 0000000000..e51bb1fd0b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -0,0 +1,73 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import java.util.HashMap; +import java.util.Map; + +public enum ServerPacketType { + //Name, version, revision. + HELLO(0), + //A block of data (compressed or not). + DATA(1), + + //The exception during query execution. + EXCEPTION(2), + + //Query execution progress: rows read, bytes read. + PROGRESS( 3), + + //Ping response + PONG(4), + + //All packets were transmitted + END_OF_STREAM(5), + + //Packet with profiling info. + PROFILE_INFO(6), + + //A block with totals (compressed or not). + TOTALS(7), + + //A block with minimums and maximums (compressed or not). + EXTREMES(8), + + //A response to TablesStatus request. + TABLES_STATUS_RESPONSE(9), + + //System logs of the query execution + LOG(10), + + //Columns' description for default values calculation + TABLE_COLUMNS(11); + + private static final Map CODE_INDEX = buildCodeIndex(); + + private final int code; + ServerPacketType(int code) { + this.code = code; + } + + public int code() { + return code; + } + + @Override + public String toString() { + return this.name() + "(" + this.code + ")"; + } + + public static ServerPacketType fromCode(int code) { + ServerPacketType ret = CODE_INDEX.get(code); + if (ret == null) { + throw new IllegalArgumentException("unknown code: " + code); + } + return ret; + } + + private static Map buildCodeIndex() { + Map ret = new HashMap<>(); + for (ServerPacketType pType : ServerPacketType.values()) { + ret.put(pType.code(), pType); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java deleted file mode 100644 index 116d2b523f..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -public class ServerPacketTypes { - public static final int HELLO = 0; - public static final int DATA = 1; - public static final int EXCEPTION = 2; -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java index 57f077082b..97a55374c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -2,14 +2,122 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.desc.ColumnDescriptor; +import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import java.util.*; + public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCodec.class); + private RowResultDecoder rowResultDecoder; + private PacketReader packetReader; + private int dataPacketNo; + protected SimpleQueryCodec(SimpleQueryCommand cmd) { super(cmd); } + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + ByteBuf buf = allocateBuffer(); + sendQuery(cmd.sql(), buf); + sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } + + private void sendExternalTables(ByteBuf buf, Collection blocks) { + ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + for (RowOrientedBlock block : blocks) { + //TODO smagellan + sendData(buf, block, null); + } + sendData(buf, new RowOrientedBlock(null, null, new BlockInfo(), md), ""); + } + + private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { + ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); + if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + ByteBufUtils.writePascalString(tableName, buf); + } + block.serializeTo(buf); + } + + private void sendQuery(String query, ByteBuf buf) { + ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); + //query id + ByteBufUtils.writePascalString("", buf); + ClickhouseNativeDatabaseMetadata meta = encoder.getConn().getDatabaseMetaData(); + int serverRevision = meta.getRevision(); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + ClientInfo clInfo = new ClientInfo(meta); + clInfo.serializeTo(buf); + } + boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; + writeSettings(Collections.emptyMap(), settingsAsStrings, true, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { + ByteBufUtils.writePascalString("", buf); + } + ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); + ByteBufUtils.writeULeb128(Compression.DISABLED, buf); + ByteBufUtils.writePascalString(query, buf); + } + + private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + //TODO smagellan + //end of settings + ByteBufUtils.writePascalString("", buf); + } + @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { + LOG.info("decode: " + in.readableBytes()); + if (packetReader == null) { + //TODO: reimplement PacketReader via RowResultDecoder + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData()); + } + ColumnOrientedBlock block = packetReader.receivePacket(ctx, in); + if (block != null && block != ColumnOrientedBlock.PARTIAL) { + LOG.info("decoded packet: " + block + " row count " + block.numRows()); + if (dataPacketNo == 0) { + ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + } + packetReader = null; + rowResultDecoder.generateRows(block); + ++dataPacketNo; + } else if (packetReader.isEndOfStream()) { + notifyOperationComplete(); + } + } + + private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { + Map data = block.getColumnsWithTypes(); + List columnNames = new ArrayList<>(data.keySet()); + List columnTypes = new ArrayList<>(data.values()); + return new ClickhouseNativeRowDesc(columnNames, columnTypes); + } + + private void notifyOperationComplete() { + Throwable failure = rowResultDecoder.complete(); + T result = rowResultDecoder.result(); + int size = rowResultDecoder.size(); + rowResultDecoder.reset(); + + cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + rowResultDecoder.reset(); + + CommandResponse response; + if (failure == null) { + response = CommandResponse.success(true); + } else { + response = CommandResponse.failure(failure); + } + completionHandler.handle(response); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java new file mode 100644 index 0000000000..64f82e08d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -0,0 +1,77 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import java.util.BitSet; + +public abstract class ClickhouseColumn { + protected final int nItems; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected BitSet nullsMap; + protected Object items; + + protected ClickhouseColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + this.columnDescriptor = columnDescriptor; + this.nItems = nItems; + } + + public void readColumn(ByteBuf in){ + readStatePrefix(in); + readData(in); + } + + protected void readStatePrefix(ByteBuf in) { + } + + protected void readData(ByteBuf in) { + if (columnDescriptor.isNullable() && nullsMap == null) { + nullsMap = readNullsMap(in); + if (nullsMap == null) { + return; + } + } + readDataInternal(in); + } + + protected void readDataInternal(ByteBuf in) { + if (items == null) { + items = readItems(in); + if (items == null) { + return; + } + } + afterReadItems(in); + } + + protected abstract Object readItems(ByteBuf in); + protected void afterReadItems(ByteBuf in) { + } + + protected BitSet readNullsMap(ByteBuf in) { + int nBytes = nItems / 8 + (nItems % 8 == 0 ? 0 : 1); + return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + } + + public boolean isPartial() { + return items == null; + } + + public Object getItems() { + return items; + } + + public Object getElement(int rowNo) { + if (nullsMap != null && nullsMap.get(rowNo)) { + return null; + } + return getElementInternal(rowNo); + } + + protected Object getElementInternal(int rowNo) { + return java.lang.reflect.Array.get(items, rowNo); + } + + public ClickhouseNativeColumnDescriptor getColumnDescriptor() { + return columnDescriptor; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java new file mode 100644 index 0000000000..ab8cf880d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -0,0 +1,58 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.sql.JDBCType; +import java.util.Map; + +public class ClickhouseColumns { + public static final String NULLABLE_PREFIX = "Nullable("; + public static final int NULLABLE_PREFIX_LENGTH = NULLABLE_PREFIX.length(); + + public static final String FIXED_STRING_PREFIX = "FixedString("; + public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String spec, String name) { + if (spec.startsWith(NULLABLE_PREFIX)) { + String subSpec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); + return columnDescriptorForSpec(spec, subSpec, name, true); + } + return columnDescriptorForSpec(spec, spec, name, false); + } + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { + if (spec.equals("UInt32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable); + } else if (spec.equals("UInt8")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable); + } else if (spec.equals("String")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable); + } else if (spec.startsWith(FIXED_STRING_PREFIX)) { + String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); + int bytesLength = Integer.parseInt(lengthStr); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable); + } + throw new IllegalArgumentException("unknown spec: " + spec); + } + + public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nItems) { + ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); + if (descr == null) { + throw new IllegalArgumentException("no parsed spec for column name: " + name); + } + JDBCType jdbcType = descr.jdbcType(); + if (jdbcType == JDBCType.INTEGER) { + return new UInt32Column(nItems, descr); + } else if (jdbcType == JDBCType.TINYINT) { + return new UInt8Column(nItems, descr); + } else if (jdbcType == JDBCType.VARCHAR) { + if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + return new StringColumn(nItems, descr); + } else { + return new FixedStringColumn(nItems, descr); + } + } else { + throw new IllegalArgumentException("no column type for jdbc type " + jdbcType); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java new file mode 100644 index 0000000000..a1c22beea0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java @@ -0,0 +1,16 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public enum ColumnSpec { + UInt32(4), + String(null); + + private final Integer elementSize; + + ColumnSpec(Integer elementSize) { + this.elementSize = elementSize; + } + + public Integer elSize() { + return elementSize; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java new file mode 100644 index 0000000000..8b120ba6d0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.ArrayList; +import java.util.List; + +public class FixedStringColumn extends ClickhouseColumn { + private List elements; + + protected FixedStringColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + this.elements = new ArrayList<>(nItems); + } + + @Override + protected Object[] readItems(ByteBuf in) { + while (elements.size() < nItems) { + if (in.readableBytes() < columnDescriptor.getElementSize()) { + return null; + } + byte[] stringBytes = new byte[columnDescriptor.getElementSize()]; + in.readBytes(stringBytes); + elements.add(stringBytes); + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java new file mode 100644 index 0000000000..b495da9484 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.ArrayList; +import java.util.List; + +public class StringColumn extends ClickhouseColumn { + private Integer curStrLength; + private List elements; + + protected StringColumn(int nItems, ClickhouseNativeColumnDescriptor descriptor) { + super(nItems, descriptor); + this.elements = new ArrayList<>(nItems); + } + + @Override + protected Object[] readItems(ByteBuf in) { + while (elements.size() < nItems) { + if (curStrLength == null) { + curStrLength = ByteBufUtils.readULeb128(in); + if (curStrLength == null) { + return null; + } + } + if (in.readableBytes() < curStrLength) { + return null; + } + byte[] stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + elements.add(stringBytes); + curStrLength = null; + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java new file mode 100644 index 0000000000..9b6a6340d0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +public class UInt32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + public UInt32Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + int[] data = new int[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readIntLE(); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java new file mode 100644 index 0000000000..6b3fd4b8a5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +public class UInt8Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 1; + + public UInt8Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + byte[] data = new byte[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readByte(); + } + return data; + } + return null; + } +} From 74ed583074b609f8aebf9b665be6e60afaa3756e Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 19:36:17 +0300 Subject: [PATCH 004/176] added unit test Signed-off-by: vladimir --- pom.xml | 2 +- vertx-clickhouse-native-client/pom.xml | 15 +++++ .../ClickhouseNativeConnectOptions.java | 13 +++- .../ClickhouseNativeConnectionUriParser.java | 63 +++++++++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 8 ++- .../ClickhouseNativeColumnDescriptor.java | 8 ++- .../impl/codec/ClickhouseNativeEncoder.java | 5 +- .../codec/CloseConnectionCommandCodec.java | 26 ++++++++ .../impl/codec/InitCommandCodec.java | 4 +- ...odec.java => SimpleQueryCommandCodec.java} | 9 ++- .../impl/codec/columns/ClickhouseColumns.java | 12 ++-- .../impl/codec/columns/UInt32Column.java | 9 +++ .../impl/codec/columns/UInt8Column.java | 9 +++ .../ClickhouseResource.java | 55 ++++++++++++++++ .../ClickhouseTest.java | 49 +++++++++++++++ 15 files changed, 268 insertions(+), 19 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/{SimpleQueryCodec.java => SimpleQueryCommandCodec.java} (94%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java diff --git a/pom.xml b/pom.xml index 58225cab0e..a7e775e923 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ ${project.basedir}/src/main/resources/META-INF/MANIFEST.MF true - 1.12.4 + 1.15.2 diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 454487572a..167a843653 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -68,6 +68,21 @@ test + + org.testcontainers + clickhouse + ${testcontainers.version} + test + + + + ru.yandex.clickhouse + clickhouse-jdbc + 0.2.6 + test + + + org.openjdk.jmh jmh-core diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index dacf708b77..716487ccd7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; @@ -10,6 +11,15 @@ public class ClickhouseNativeConnectOptions extends SqlConnectOptions { private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; + public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { + JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); + return new ClickhouseNativeConnectOptions(parsedConfiguration); + } + + public ClickhouseNativeConnectOptions() { + super(); + } + public ClickhouseNativeConnectOptions(JsonObject json) { super(json); ClickhouseNativeConnectOptionsConverter.fromJson(json, this); @@ -17,9 +27,6 @@ public ClickhouseNativeConnectOptions(JsonObject json) { public ClickhouseNativeConnectOptions(SqlConnectOptions other) { super(other); - if (other instanceof ClickhouseNativeConnectOptions) { - ClickhouseNativeConnectOptions opts = (ClickhouseNativeConnectOptions) other; - } } public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java new file mode 100644 index 0000000000..c9db877bb5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -0,0 +1,63 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.core.json.JsonObject; + +import java.net.URI; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.AbstractMap.SimpleImmutableEntry; + +public class ClickhouseNativeConnectionUriParser { + public static JsonObject parse(String connectionUri) { + try { + JsonObject configuration = new JsonObject(); + URI location = URI.create(connectionUri); + String userInfo = location.getUserInfo(); + String user = userInfo; + String password = null; + if (userInfo.contains(":")) { + String[] tokens = userInfo.split(":"); + user = tokens[0]; + password = tokens[1]; + } + configuration.put("user", user); + configuration.put("password", password); + configuration.put("host", location.getHost()); + int port = location.getPort(); + if (port == -1) { + port = 9000; + } + configuration.put("port", port); + String path = location.getPath(); + int startDbOffset = path.startsWith("/") ? 1 : 0; + int endLocOffset = path.endsWith("/") && path.length() >= 2 ? 1 : 0; + path = path.substring(startDbOffset, path.length() - endLocOffset); + configuration.put("database", path); + + configuration.put("properties", queryAsMap(location.getQuery())); + + return configuration; + } catch (Exception e) { + throw new IllegalArgumentException("Cannot parse invalid connection URI: " + connectionUri, e); + } + } + + public static Map queryAsMap(String query) { + if (query == null || query.isEmpty()) { + return Collections.emptyMap(); + } + return Arrays.stream(query.split("&")) + .map(ClickhouseNativeConnectionUriParser::asEntry) + .collect(Collectors.toMap(SimpleImmutableEntry::getKey, SimpleImmutableEntry::getValue)); + } + + public static AbstractMap.SimpleImmutableEntry asEntry(String str) { + int idx = str.indexOf("="); + String key = idx > 0 ? str.substring(0, idx) : str; + String value = idx > 0 && str.length() > idx + 1 ? str.substring(idx + 1) : null; + return new AbstractMap.SimpleImmutableEntry<>(key, value); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index d167ec24d2..243610ca79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -2,6 +2,8 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; +import java.time.ZoneId; + public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; @@ -10,11 +12,11 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int revision; private final int patchVersion; private final String displayName; - private final String timezone; + private final ZoneId timezone; private final String clientName; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, String timezone, String clientName) { + int patchVersion, String displayName, ZoneId timezone, String clientName) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -58,7 +60,7 @@ public String getDisplayName() { return displayName; } - public String getTimezone() { + public ZoneId getTimezone() { return timezone; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 2dd5a1bcad..56e5febec8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -14,9 +14,10 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final JDBCType jdbcType; private final int elementSize; private final boolean nullable; + private final boolean unsigned; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, - boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable) { + boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -24,6 +25,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.elementSize = elementSize; this.jdbcType = jdbcType; this.nullable = nullable; + this.unsigned = unsigned; } @Override @@ -49,6 +51,10 @@ public boolean isNullable() { return nullable; } + public boolean isUnsigned() { + return unsigned; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 37b4511547..9be689edfd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,6 +4,7 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseConnectionCommand; import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.InitCommand; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; @@ -60,7 +61,9 @@ void write(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { - return new SimpleQueryCodec<>((SimpleQueryCommand) cmd); + return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd); + } else if (cmd instanceof CloseConnectionCommand) { + return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java new file mode 100644 index 0000000000..f7eebd8260 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.CloseConnectionCommand; + +public class CloseConnectionCommandCodec extends ClickhouseNativeCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(CloseConnectionCommandCodec.class); + + protected CloseConnectionCommandCodec(CloseConnectionCommand cmd) { + super(cmd); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } + + @Override + public void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + LOG.info("closing channel"); + encoder.chctx().channel().close(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 226d55926a..2e292709dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -11,6 +11,8 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; +import java.time.ZoneId; + public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); @@ -111,7 +113,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone, clientName); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), clientName); encoder.getConn().setDatabaseMetadata(md); LOG.info("connected to server: " + md); completionHandler.handle(CommandResponse.success(null)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 97a55374c2..3e011ec6e0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -12,13 +12,13 @@ import java.util.*; -public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ - private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCodec.class); +public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - protected SimpleQueryCodec(SimpleQueryCommand cmd) { + protected SimpleQueryCommandCodec(SimpleQueryCommand cmd) { super(cmd); } @@ -105,6 +105,9 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { private void notifyOperationComplete() { Throwable failure = rowResultDecoder.complete(); + if (failure != null) { + failure = new RuntimeException(failure); + } T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index ab8cf880d8..4477e29d4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -21,16 +21,16 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String sp } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { - if (spec.equals("UInt32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable); - } else if (spec.equals("UInt8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable); + if (spec.equals("UInt32") || spec.equals("Int32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + } else if (spec.equals("UInt8") || spec.equals("Int8")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable, false); } throw new IllegalArgumentException("unknown spec: " + spec); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 9b6a6340d0..02884e367a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -21,4 +21,13 @@ protected Object readItems(ByteBuf in) { } return null; } + + @Override + protected Object getElementInternal(int rowNo) { + int element = ((int[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Integer.toUnsignedLong(element); + } + return element; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 6b3fd4b8a5..a1a694fa4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -21,4 +21,13 @@ protected Object readItems(ByteBuf in) { } return null; } + + @Override + protected Object getElementInternal(int rowNo) { + byte element = ((byte[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Byte.toUnsignedInt(element); + } + return element; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java new file mode 100644 index 0000000000..e9f4742ff7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -0,0 +1,55 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import org.junit.rules.ExternalResource; +import org.testcontainers.containers.ClickHouseContainer; +import org.testcontainers.utility.DockerImageName; + +public class ClickhouseResource extends ExternalResource { + private static final String connectionUri = System.getProperty("connection.uri"); + private static final String tlsConnectionUri = System.getProperty("tls.connection.uri"); + + private ClickHouseContainer server; + private ClickhouseNativeConnectOptions options; + + @Override + protected void before() throws Throwable { + if (isTestingWithExternalDatabase()) { + this.options = ClickhouseNativeConnectOptions.fromUri(connectionUri); + return; + } + if (this.server != null) { + return; + } + DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag("20.10.2"); + server = new ClickHouseContainer(imageName); + server.start(); + this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() + .setPort(server.getMappedPort(ClickHouseContainer.NATIVE_PORT)) + .setHost(server.getContainerIpAddress()) + .setUser(server.getUsername()) + .setPassword(server.getPassword()) + .setDatabase("default") + .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver"); + } + + @Override + protected void after() { + if (server != null) { + server.stop(); + } + } + + public ClickhouseNativeConnectOptions options() { + return new ClickhouseNativeConnectOptions(options); + } + + public static boolean isTestingWithExternalDatabase() { + return isSystemPropertyValid(connectionUri) || isSystemPropertyValid(tlsConnectionUri); + } + + private static boolean isSystemPropertyValid(String systemProperty) { + return systemProperty != null && !systemProperty.isEmpty(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java new file mode 100644 index 0000000000..7dc75fe5b3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java @@ -0,0 +1,49 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlClient; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseTest { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup() { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void baseConnectTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); + } + + @Test + public void baseQueryTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("select 4 as resource, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + conn.close(); + }) + ); + })); + } +} From 240cb5a5564e5112789da16f026636264944b874 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 21:49:25 +0300 Subject: [PATCH 005/176] added UInt16, UInt64 types support Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 20 +++++++--- .../impl/codec/columns/UInt16Column.java | 33 ++++++++++++++++ .../impl/codec/columns/UInt64Column.java | 39 +++++++++++++++++++ .../impl/codec/columns/UInt8Column.java | 2 +- 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 4477e29d4c..bda7bcb54f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -21,10 +21,14 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String sp } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { - if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); - } else if (spec.equals("UInt8") || spec.equals("Int8")) { + if (spec.equals("UInt8") || spec.equals("Int8")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); + } else if (spec.equals("UInt16") || spec.equals("Int16")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U")); + } if (spec.equals("UInt32") || spec.equals("Int32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + } if (spec.equals("UInt64") || spec.equals("Int64")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 8, JDBCType.BIGINT, nullable, spec.startsWith("U")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { @@ -41,10 +45,14 @@ public static ClickhouseColumn columnForSpec(String name, Map= ELEMENT_SIZE * nItems) { + short[] data = new short[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readShortLE(); + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowNo) { + short element = ((short[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Short.toUnsignedInt(element); + } + return element; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java new file mode 100644 index 0000000000..cd26f39535 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigInteger; + +public class UInt64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + + public UInt64Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + long[] data = new long[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readLongLE(); + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowNo) { + long element = ((long[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + BigInteger ret = BigInteger.valueOf(element); + if (element < 0) { + ret = ret.negate(); + } + return ret; + } + return element; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index a1a694fa4a..19fc275010 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -26,7 +26,7 @@ protected Object readItems(ByteBuf in) { protected Object getElementInternal(int rowNo) { byte element = ((byte[])this.items)[rowNo]; if (columnDescriptor.isUnsigned()) { - return Byte.toUnsignedInt(element); + return (short)Byte.toUnsignedInt(element); } return element; } From 50a11ac9c64e0fa3f87e6a462c4d0c5a63296a60 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 22:49:08 +0300 Subject: [PATCH 006/176] renamed nItems to nRows, removed reflection API calls Signed-off-by: vladimir --- .../impl/ColumnOrientedBlock.java | 4 +- .../ClickhouseNativeColumnDescriptor.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 38 ++++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 14 +++---- .../impl/codec/columns/FixedStringColumn.java | 13 +++++-- .../impl/codec/columns/StringColumn.java | 13 +++++-- .../impl/codec/columns/UInt16Column.java | 12 +++--- .../impl/codec/columns/UInt32Column.java | 12 +++--- .../impl/codec/columns/UInt64Column.java | 12 +++--- .../impl/codec/columns/UInt8Column.java | 12 +++--- ...ouseTest.java => BasicClickhouseTest.java} | 3 +- 11 files changed, 79 insertions(+), 56 deletions(-) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/{ClickhouseTest.java => BasicClickhouseTest.java} (97%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index f1e538e0a0..859bf6fd70 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -22,8 +22,8 @@ public int numColumns() { public int numRows() { if (numColumns() > 0) { - ClickhouseColumn firstRow = getData().iterator().next(); - return java.lang.reflect.Array.getLength(firstRow.getItems()); + ClickhouseColumn firstColumn = getData().iterator().next(); + return firstColumn.nRows(); } else { return 0; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 56e5febec8..351e86434a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -10,9 +10,9 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final String name; private final String unparsedNativeType; private final String nativeType; - private final boolean isArray; private final JDBCType jdbcType; private final int elementSize; + private final boolean isArray; private final boolean nullable; private final boolean unsigned; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 64f82e08d8..1a37b6b4ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -5,14 +5,14 @@ import java.util.BitSet; public abstract class ClickhouseColumn { - protected final int nItems; + protected final int nRows; protected final ClickhouseNativeColumnDescriptor columnDescriptor; protected BitSet nullsMap; - protected Object items; + protected Object itemsArray; - protected ClickhouseColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { this.columnDescriptor = columnDescriptor; - this.nItems = nItems; + this.nRows = nRows; } public void readColumn(ByteBuf in){ @@ -20,6 +20,10 @@ public void readColumn(ByteBuf in){ readData(in); } + public int nRows() { + return nRows; + } + protected void readStatePrefix(ByteBuf in) { } @@ -34,9 +38,9 @@ protected void readData(ByteBuf in) { } protected void readDataInternal(ByteBuf in) { - if (items == null) { - items = readItems(in); - if (items == null) { + if (itemsArray == null) { + itemsArray = readItems(in); + if (itemsArray == null) { return; } } @@ -48,16 +52,19 @@ protected void afterReadItems(ByteBuf in) { } protected BitSet readNullsMap(ByteBuf in) { - int nBytes = nItems / 8 + (nItems % 8 == 0 ? 0 : 1); - return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); + if (in.readableBytes() >= nBytes) { + return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + } + return null; } public boolean isPartial() { - return items == null; + return itemsArray == null; } - public Object getItems() { - return items; + public Object getItemsArray() { + return itemsArray; } public Object getElement(int rowNo) { @@ -68,7 +75,12 @@ public Object getElement(int rowNo) { } protected Object getElementInternal(int rowNo) { - return java.lang.reflect.Array.get(items, rowNo); + return java.lang.reflect.Array.get(itemsArray, rowNo); + } + + protected Object getObjectsArrayElement(int rowNo) { + Object[] data = (Object[]) itemsArray; + return data[rowNo]; } public ClickhouseNativeColumnDescriptor getColumnDescriptor() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index bda7bcb54f..1d8d6f9ffc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -39,25 +39,25 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un throw new IllegalArgumentException("unknown spec: " + spec); } - public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nItems) { + public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT) { - return new UInt8Column(nItems, descr); + return new UInt8Column(nRows, descr); } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nItems, descr); + return new UInt16Column(nRows, descr); } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nItems, descr); + return new UInt32Column(nRows, descr); } else if (jdbcType == JDBCType.BIGINT && descr.getElementSize() == 8) { - return new UInt64Column(nItems, descr); + return new UInt64Column(nRows, descr); } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nItems, descr); + return new StringColumn(nRows, descr); } else { - return new FixedStringColumn(nItems, descr); + return new FixedStringColumn(nRows, descr); } } else { throw new IllegalArgumentException("no column type for jdbc type " + jdbcType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 8b120ba6d0..374d740a95 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -9,14 +9,14 @@ public class FixedStringColumn extends ClickhouseColumn { private List elements; - protected FixedStringColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); - this.elements = new ArrayList<>(nItems); + protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + this.elements = new ArrayList<>(nRows); } @Override protected Object[] readItems(ByteBuf in) { - while (elements.size() < nItems) { + while (elements.size() < nRows) { if (in.readableBytes() < columnDescriptor.getElementSize()) { return null; } @@ -28,4 +28,9 @@ protected Object[] readItems(ByteBuf in) { elements = null; return ret; } + + @Override + protected Object getElementInternal(int rowNo) { + return getObjectsArrayElement(rowNo); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index b495da9484..2612f90947 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -11,14 +11,14 @@ public class StringColumn extends ClickhouseColumn { private Integer curStrLength; private List elements; - protected StringColumn(int nItems, ClickhouseNativeColumnDescriptor descriptor) { - super(nItems, descriptor); - this.elements = new ArrayList<>(nItems); + protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + super(nRows, descriptor); + this.elements = new ArrayList<>(nRows); } @Override protected Object[] readItems(ByteBuf in) { - while (elements.size() < nItems) { + while (elements.size() < nRows) { if (curStrLength == null) { curStrLength = ByteBufUtils.readULeb128(in); if (curStrLength == null) { @@ -37,4 +37,9 @@ protected Object[] readItems(ByteBuf in) { elements = null; return ret; } + + @Override + protected Object getElementInternal(int rowNo) { + return getObjectsArrayElement(rowNo); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index aa3028a50e..f63af7aae9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -6,15 +6,15 @@ public class UInt16Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 2; - public UInt16Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - short[] data = new short[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + short[] data = new short[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readShortLE(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - short element = ((short[])this.items)[rowNo]; + short element = ((short[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return Short.toUnsignedInt(element); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 02884e367a..3ef29d986d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -6,15 +6,15 @@ public class UInt32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; - public UInt32Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - int[] data = new int[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int[] data = new int[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readIntLE(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - int element = ((int[])this.items)[rowNo]; + int element = ((int[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return Integer.toUnsignedLong(element); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index cd26f39535..f450c8dc60 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -8,15 +8,15 @@ public class UInt64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; - public UInt64Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - long[] data = new long[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + long[] data = new long[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readLongLE(); } return data; @@ -26,7 +26,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - long element = ((long[])this.items)[rowNo]; + long element = ((long[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { BigInteger ret = BigInteger.valueOf(element); if (element < 0) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 19fc275010..3626d523a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -6,15 +6,15 @@ public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; - public UInt8Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - byte[] data = new byte[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + byte[] data = new byte[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readByte(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - byte element = ((byte[])this.items)[rowNo]; + byte element = ((byte[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return (short)Byte.toUnsignedInt(element); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 7dc75fe5b3..a59cef2190 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -13,9 +13,10 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseTest { +public class BasicClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + private ClickhouseNativeConnectOptions options; private Vertx vertx; From 3be7ed898e37f1e713d460676eb1c69aedb83fb6 Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 26 Feb 2021 22:11:26 +0300 Subject: [PATCH 007/176] initial writeSettings implementation; initial PreparedStatement implementation Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 15 +++- .../ClickhouseNativeConnectionUriParser.java | 1 + .../ClickhouseNativeDatabaseMetadata.java | 18 ++-- .../ClickhouseNativeSocketConnection.java | 24 +++++- .../clickhousenative/impl/Pair.java | 15 ++++ .../ClickhouseNativeColumnDescriptor.java | 14 +++- .../impl/codec/ClickhouseNativeEncoder.java | 13 +-- .../impl/codec/ClickhouseNativeParamDesc.java | 13 +++ .../ClickhouseNativePreparedStatement.java | 39 +++++++++ .../impl/codec/ClientInfo.java | 35 ++++---- .../impl/codec/CloseCursorCodec.java | 27 ++++++ .../impl/codec/ExtendedQueryCodec.java | 35 ++++++++ .../impl/codec/InitCommandCodec.java | 9 +- .../impl/codec/PrepareStatementCodec.java | 32 +++++++ .../impl/codec/SimpleQueryCommandCodec.java | 26 +++++- .../impl/codec/columns/ClickhouseColumn.java | 14 ++-- .../impl/codec/columns/ClickhouseColumns.java | 83 +++++++++++++------ .../impl/codec/columns/FixedStringColumn.java | 4 +- .../impl/codec/columns/StringColumn.java | 4 +- .../impl/codec/columns/UInt16Column.java | 4 +- .../impl/codec/columns/UInt32Column.java | 4 +- .../impl/codec/columns/UInt64Column.java | 4 +- .../impl/codec/columns/UInt8Column.java | 4 +- 23 files changed, 354 insertions(+), 83 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index b696a0409c..419c8460aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,5 +1,10 @@ package io.vertx.clickhouse.clickhousenative; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + public class ClickhouseConstants { public static final int DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES = 50264; public static final int DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS = 51554; @@ -21,5 +26,13 @@ public class ClickhouseConstants { public static final int CLIENT_VERSION_PATCH = 2; public static final int CLIENT_REVISION = 54441; - public static final String OPTION_CLIENT_NAME = "CLIENT_NAME"; + public static final String OPTION_CLIENT_NAME = "application_name"; + public static final String OPTION_INITIAL_USER = "initial_user"; + public static final String OPTION_INITIAL_QUERY_ID = "initial_query_id"; + public static final String OPTION_INITIAL_ADDRESS = "initial_address"; + public static final String OPTION_INITIAL_USERNAME = "initial_username"; + public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( + OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index c9db877bb5..272438c081 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.json.JsonObject; import java.net.URI; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 243610ca79..6e6e089c5d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -3,6 +3,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; import java.time.ZoneId; +import java.util.Map; public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; @@ -13,10 +14,12 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int patchVersion; private final String displayName; private final ZoneId timezone; - private final String clientName; + private final String fullClientName; + private final Map properties; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, ZoneId timezone, String clientName) { + int patchVersion, String displayName, ZoneId timezone, String fullClientName, + Map properties) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -25,7 +28,8 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.patchVersion = patchVersion; this.displayName = displayName; this.timezone = timezone; - this.clientName = clientName; + this.fullClientName = fullClientName; + this.properties = properties; } @Override @@ -64,8 +68,12 @@ public ZoneId getTimezone() { return timezone; } - public String getClientName() { - return clientName; + public String getFullClientName() { + return fullClientName; + } + + public Map getProperties() { + return properties; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 6f0b9100e6..1bf3cf53cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -8,14 +8,15 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; import io.vertx.sqlclient.impl.command.InitCommand; -import io.vertx.sqlclient.spi.DatabaseMetadata; import java.util.Map; +import java.util.Objects; import java.util.function.Predicate; public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; + private String pendingCursorId; public ClickhouseNativeSocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, @@ -43,6 +44,27 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { this.md = md; } + public void setPendingCursorId(String cursorId) { + this.pendingCursorId = cursorId; + } + + public String getPendingCursorId() { + return pendingCursorId; + } + + public void releasePendingCursor(String cursorId) { + if (!Objects.equals(this.pendingCursorId, cursorId)) { + throw new IllegalArgumentException("can't release pending cursor: pending = " + pendingCursorId + "; provided: " + cursorId); + } + this.pendingCursorId = null; + } + + public void throwExceptionIfBusy() { + if (pendingCursorId != null) { + throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + } + } + @Override public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java index 1c3cf43dcd..81160b4f1b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java @@ -1,5 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; +import java.util.Objects; + public class Pair { private final K left; private final V right; @@ -17,6 +19,19 @@ public V getRight() { return right; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pair pair = (Pair) o; + return Objects.equals(left, pair.left) && Objects.equals(right, pair.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } + @Override public String toString() { return "Pair{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 351e86434a..56356eaebf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -15,9 +15,12 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final boolean isArray; private final boolean nullable; private final boolean unsigned; + private final boolean lowCardinality; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, - boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned) { + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -26,6 +29,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.jdbcType = jdbcType; this.nullable = nullable; this.unsigned = unsigned; + this.lowCardinality = lowCardinality; } @Override @@ -43,6 +47,10 @@ public JDBCType jdbcType() { return jdbcType; } + public String getUnparsedNativeType() { + return unparsedNativeType; + } + public int getElementSize() { return elementSize; } @@ -55,6 +63,10 @@ public boolean isUnsigned() { return unsigned; } + public boolean isLowCardinality() { + return lowCardinality; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 9be689edfd..9809629750 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,10 +4,7 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.sqlclient.impl.command.CloseConnectionCommand; -import io.vertx.sqlclient.impl.command.CommandBase; -import io.vertx.sqlclient.impl.command.InitCommand; -import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; @@ -61,9 +58,15 @@ void write(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { - return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd); + return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd, conn); } else if (cmd instanceof CloseConnectionCommand) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); + } else if (cmd instanceof PrepareStatementCommand) { + return new PrepareStatementCodec((PrepareStatementCommand) cmd); + } else if (cmd instanceof ExtendedQueryCommand) { + return new ExtendedQueryCodec<>((ExtendedQueryCommand)cmd, conn); + } else if (cmd instanceof CloseCursorCommand) { + return new CloseCursorCodec((CloseCursorCommand)cmd, conn); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java new file mode 100644 index 0000000000..c8454ed1d5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -0,0 +1,13 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.impl.ParamDesc; + +import java.util.List; + +public class ClickhouseNativeParamDesc extends ParamDesc { + private final List paramDescr; + + public ClickhouseNativeParamDesc(List paramDescr) { + this.paramDescr = paramDescr; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java new file mode 100644 index 0000000000..ce076217f4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.sqlclient.impl.ParamDesc; +import io.vertx.sqlclient.impl.PreparedStatement; +import io.vertx.sqlclient.impl.RowDesc; +import io.vertx.sqlclient.impl.TupleInternal; + +public class ClickhouseNativePreparedStatement implements PreparedStatement { + private final String sql; + private final ClickhouseNativeParamDesc paramDesc; + private final ClickhouseNativeRowDesc rowDesc; + + public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc) { + this.sql = sql; + this.paramDesc = paramDesc; + this.rowDesc = rowDesc; + } + + @Override + public ParamDesc paramDesc() { + return null; + } + + @Override + public RowDesc rowDesc() { + return null; + } + + @Override + public String sql() { + return null; + } + + @Override + public String prepare(TupleInternal values) { + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 4799c319ec..365199b154 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,9 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import java.util.Map; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.*; + public class ClientInfo { public static final int NO_QUERY = 0; public static final int INITIAL_QUERY = 1; @@ -16,32 +19,34 @@ public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { public void serializeTo(ByteBuf buf) { int serverRevision = meta.getRevision(); - if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + if (serverRevision < DBMS_MIN_REVISION_WITH_CLIENT_INFO) { throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", - serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + serverRevision, DBMS_MIN_REVISION_WITH_CLIENT_INFO)); } buf.writeByte(INITIAL_QUERY); + Map properties = meta.getProperties(); + //initial_user - ByteBufUtils.writePascalString("", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, ""), buf); //initial_query_id - ByteBufUtils.writePascalString("", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_QUERY_ID, ""), buf); //initial_address - ByteBufUtils.writePascalString("0.0.0.0:0", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); //interface: TCP buf.writeByte(1); - ByteBufUtils.writePascalString(System.getProperty("user.name"), buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); //TODO smagellan: fix client_hostname resolution - ByteBufUtils.writePascalString("bhorse", buf); - ByteBufUtils.writePascalString(meta.getClientName(), buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); + ByteBufUtils.writePascalString(meta.getFullClientName(), buf); + ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(CLIENT_REVISION, buf); + if (serverRevision >= DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { //quota_key ByteBufUtils.writePascalString("", buf); } - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + if (serverRevision >= DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(CLIENT_VERSION_PATCH, buf); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java new file mode 100644 index 0000000000..ab9a75e59d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseCursorCommand; +import io.vertx.sqlclient.impl.command.CommandResponse; + +public class CloseCursorCodec extends ClickhouseNativeCommandCodec{ + private final ClickhouseNativeSocketConnection conn; + + protected CloseCursorCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + this.conn = conn; + } + + void encode(ClickhouseNativeEncoder encoder) { + conn.releasePendingCursor(cmd.id()); + super.encode(encoder); + completionHandler.handle(CommandResponse.success(null)); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java new file mode 100644 index 0000000000..b7224aa581 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CommandResponse; +import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; + +import java.util.Collections; + +public class ExtendedQueryCodec extends ClickhouseNativeQueryCommandBaseCodec> { + private final ClickhouseNativeSocketConnection conn; + + public ExtendedQueryCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + this.conn = conn; + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + conn.throwExceptionIfBusy(); + conn.setPendingCursorId(cmd.cursorId()); + super.encode(encoder); + ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(Collections.emptyList()); + RowResultDecoder rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + Throwable t = rowResultDecoder.complete(); + cmd.resultHandler().handleResult(0, 0, rowDesc, rowResultDecoder.result(), t); + completionHandler.handle(CommandResponse.success(false)); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 2e292709dd..749a7bc3a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -32,8 +32,7 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec{ + private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); + + protected PrepareStatementCodec(PrepareStatementCommand cmd) { + super(cmd); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + LOG.info("handle ready for query"); + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), new ClickhouseNativeParamDesc(Collections.emptyList()), + new ClickhouseNativeRowDesc(Collections.emptyList())))); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 3e011ec6e0..2dcf3bdd2a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -10,20 +10,27 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; + private final ClickhouseNativeSocketConnection conn; - protected SimpleQueryCommandCodec(SimpleQueryCommand cmd) { + protected SimpleQueryCommandCodec(SimpleQueryCommand cmd, ClickhouseNativeSocketConnection conn) { super(cmd); - } + this.conn = conn; + } @Override void encode(ClickhouseNativeEncoder encoder) { + conn.throwExceptionIfBusy(); super.encode(encoder); ByteBuf buf = allocateBuffer(); sendQuery(cmd.sql(), buf); @@ -69,7 +76,18 @@ private void sendQuery(String query, ByteBuf buf) { } private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { - //TODO smagellan + if (settingsAsStrings) { + for (Map.Entry entry : settings.entrySet()) { + if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + ByteBufUtils.writePascalString(entry.getKey(), buf); + buf.writeBoolean(settingsAreImportant); + ByteBufUtils.writePascalString(entry.getValue().toString(), buf); + } + } + } else { + //TODO smagellan + throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); + } //end of settings ByteBufUtils.writePascalString("", buf); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1a37b6b4ba..774c5b5457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -67,20 +67,20 @@ public Object getItemsArray() { return itemsArray; } - public Object getElement(int rowNo) { - if (nullsMap != null && nullsMap.get(rowNo)) { + public Object getElement(int rowIdx) { + if (nullsMap != null && nullsMap.get(rowIdx)) { return null; } - return getElementInternal(rowNo); + return getElementInternal(rowIdx); } - protected Object getElementInternal(int rowNo) { - return java.lang.reflect.Array.get(itemsArray, rowNo); + protected Object getElementInternal(int rowIdx) { + return java.lang.reflect.Array.get(itemsArray, rowIdx); } - protected Object getObjectsArrayElement(int rowNo) { + protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; - return data[rowNo]; + return data[rowIdx]; } public ClickhouseNativeColumnDescriptor getColumnDescriptor() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 1d8d6f9ffc..de4139ac17 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -9,34 +9,55 @@ public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; public static final int NULLABLE_PREFIX_LENGTH = NULLABLE_PREFIX.length(); + public static final String ARRAY_PREFIX = "Array("; + public static final int ARRAY_PREFIX_LENGTH = ARRAY_PREFIX.length(); + + public static final String LOW_CARDINALITY_PREFIX = "LowCardinality"; + public static final int LOW_CARDINALITY_PREFIX_LENGTH = LOW_CARDINALITY_PREFIX.length(); + public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String spec, String name) { + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { + String spec = unparsedSpec; + boolean nullable = false; + boolean isArray = false; + boolean isLowCardinality = false; + if (spec.startsWith(ARRAY_PREFIX)) { + spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + isArray = true; + throw new IllegalStateException("arrays are not supported"); + } + if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { + spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); + isLowCardinality = true; + throw new IllegalStateException("low cardinality columns are not supported"); + } if (spec.startsWith(NULLABLE_PREFIX)) { - String subSpec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); - return columnDescriptorForSpec(spec, subSpec, name, true); + spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); + nullable = true; } - return columnDescriptorForSpec(spec, spec, name, false); + return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, isArray, isLowCardinality); } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, + boolean nullable, boolean isArray, boolean isLowCardinality) { if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, spec.startsWith("U"), isLowCardinality); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U"), isLowCardinality); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, spec.startsWith("U"), isLowCardinality); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 8, JDBCType.BIGINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, spec.startsWith("U"), isLowCardinality); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable, false); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality); } - throw new IllegalArgumentException("unknown spec: " + spec); + throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { @@ -45,22 +66,30 @@ public static ClickhouseColumn columnForSpec(String name, Map Date: Sat, 27 Feb 2021 19:06:11 +0300 Subject: [PATCH 008/176] refactored PacketReader Signed-off-by: vladimir --- .../impl/ClickhouseServerException.java | 6 +- .../impl/ColumnOrientedBlock.java | 1 - .../impl/codec/BlockStreamProfileInfo.java | 85 ++++-------- .../codec/BlockStreamProfileInfoReader.java | 52 +++++++ .../impl/codec/ClickhouseExceptionReader.java | 49 +++++++ .../impl/codec/ColumnOrientedBlockReader.java | 17 +-- .../impl/codec/DatabaseMetadataReader.java | 81 +++++++++++ .../impl/codec/InitCommandCodec.java | 130 +++--------------- .../impl/codec/PacketReader.java | 86 ++++++++---- .../impl/codec/QueryProgressInfo.java | 89 ++++-------- .../impl/codec/QueryProgressInfoReader.java | 60 ++++++++ .../impl/codec/ServerPacketType.java | 1 + .../impl/codec/SimpleQueryCommandCodec.java | 25 ++-- .../BasicClickhouseTest.java | 7 + 14 files changed, 401 insertions(+), 288 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 0561b90795..819f3fdb31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,12 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl; public class ClickhouseServerException extends RuntimeException { - private final Integer code; + private final int code; private final String name; private final String message; private final String stacktrace; - public ClickhouseServerException(Integer code, String name, String message, String stacktrace) { + public ClickhouseServerException(Integer code, String name, String message, String stacktrace, boolean hasNested) { super(message); this.code = code; this.name = name; @@ -14,7 +14,7 @@ public ClickhouseServerException(Integer code, String name, String message, Stri this.stacktrace = stacktrace; } - public Integer getCode() { + public int getCode() { return code; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 859bf6fd70..3bb756c68d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -8,7 +8,6 @@ import java.util.Map; public class ColumnOrientedBlock extends BaseBlock { - public static final ColumnOrientedBlock PARTIAL = new ColumnOrientedBlock(null, null, null, null); public ColumnOrientedBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index bae2e68a88..437cea6365 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,86 +1,47 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; - public class BlockStreamProfileInfo { - private Integer rows; - private Integer blocks; - private Integer bytes; - private Boolean appliedLimit; - private Integer rowsBeforeLimit; - private Boolean calculatedRowsBeforeLimit; - - public void readFrom(ByteBuf in) { - if (rows == null) { - rows = ByteBufUtils.readULeb128(in); - if (rows == null) { - return; - } - } - if (blocks == null) { - blocks = ByteBufUtils.readULeb128(in); - if (blocks == null) { - return; - } - } - if (bytes == null) { - bytes = ByteBufUtils.readULeb128(in); - if (bytes == null) { - return; - } - } - if (appliedLimit == null) { - if (in.readableBytes() == 0) { - return; - } - appliedLimit = in.readBoolean(); - } - if (rowsBeforeLimit == null) { - rowsBeforeLimit = ByteBufUtils.readULeb128(in); - if (rowsBeforeLimit == null) { - return; - } - } - if (calculatedRowsBeforeLimit == null) { - if (in.readableBytes() == 0) { - return; - } - calculatedRowsBeforeLimit = in.readBoolean(); - } - } - - public Integer getRows() { + private final int rows; + private final int blocks; + private final int bytes; + private final boolean appliedLimit; + private final int rowsBeforeLimit; + private final boolean calculatedRowsBeforeLimit; + + public BlockStreamProfileInfo(int rows, int blocks, int bytes, boolean appliedLimit, int rowsBeforeLimit, + boolean calculatedRowsBeforeLimit) { + this.rows = rows; + this.blocks = blocks; + this.bytes = bytes; + this.appliedLimit = appliedLimit; + this.rowsBeforeLimit = rowsBeforeLimit; + this.calculatedRowsBeforeLimit = calculatedRowsBeforeLimit; + } + + public int getRows() { return rows; } - public Integer getBlocks() { + public int getBlocks() { return blocks; } - public Integer getBytes() { + public int getBytes() { return bytes; } - public Boolean getAppliedLimit() { + public boolean getAppliedLimit() { return appliedLimit; } - public Integer getRowsBeforeLimit() { + public int getRowsBeforeLimit() { return rowsBeforeLimit; } - public Boolean getCalculatedRowsBeforeLimit() { + public boolean getCalculatedRowsBeforeLimit() { return calculatedRowsBeforeLimit; } - public boolean isComplete() { - return !isPartial(); - } - - public boolean isPartial() { - return calculatedRowsBeforeLimit == null; - } - @Override public String toString() { return "BlockStreamProfileInfo{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java new file mode 100644 index 0000000000..20ed90f8cf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -0,0 +1,52 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +public class BlockStreamProfileInfoReader { + private Integer rows; + private Integer blocks; + private Integer bytes; + private Boolean appliedLimit; + private Integer rowsBeforeLimit; + private Boolean calculatedRowsBeforeLimit; + + public BlockStreamProfileInfo readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return null; + } + } + if (blocks == null) { + blocks = ByteBufUtils.readULeb128(in); + if (blocks == null) { + return null; + } + } + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return null; + } + } + if (appliedLimit == null) { + if (in.readableBytes() == 0) { + return null; + } + appliedLimit = in.readBoolean(); + } + if (rowsBeforeLimit == null) { + rowsBeforeLimit = ByteBufUtils.readULeb128(in); + if (rowsBeforeLimit == null) { + return null; + } + } + if (calculatedRowsBeforeLimit == null) { + if (in.readableBytes() == 0) { + return null; + } + calculatedRowsBeforeLimit = in.readBoolean(); + } + return new BlockStreamProfileInfo(rows, blocks, bytes, appliedLimit, rowsBeforeLimit, calculatedRowsBeforeLimit); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java new file mode 100644 index 0000000000..8ee99cf2c2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -0,0 +1,49 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; + +public class ClickhouseExceptionReader { + private Integer code; + private String name; + private String message; + private String stacktrace; + private Boolean hasNested; + + public ClickhouseServerException readFrom(ByteBuf in) { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return null; + } + } + if (name == null) { + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return null; + } + } + if (message == null) { + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return null; + } + } + if (stacktrace == null) { + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return null; + } + } + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readByte() != 0; + } else { + return null; + } + } + //TODO smagellan: read nested exception + return new ClickhouseServerException(code, name, message, stacktrace, hasNested); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 1e5199d24f..79bac58ce4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -31,6 +31,7 @@ public class ColumnOrientedBlockReader { private ClickhouseColumn columnData; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + assert(md != null); this.md = md; this.serverRevision = md.getRevision(); } @@ -41,7 +42,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { tempTableInfo = ByteBufUtils.readPascalString(in); LOG.info("tempTableInfo: " + tempTableInfo); if (tempTableInfo == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } } @@ -54,21 +55,21 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { if (blockInfo.isPartial()) { blockInfo.readFrom(in); if (blockInfo.isPartial()) { - return ColumnOrientedBlock.PARTIAL; + return null; } } } if (nColumns == null) { nColumns = ByteBufUtils.readULeb128(in); if (nColumns == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } colWithTypes = new LinkedHashMap<>(); } if (nRows == null) { nRows = ByteBufUtils.readULeb128(in); if (nRows == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } @@ -76,13 +77,13 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { if (colName == null) { colName = ByteBufUtils.readPascalString(in); if (colName == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } if (colType == null) { colType = ByteBufUtils.readPascalString(in); if (colType == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); @@ -96,7 +97,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { columnData.readColumn(in); if (columnData.isPartial()) { - return ColumnOrientedBlock.PARTIAL; + return null; } else { data.add(columnData); columnData = null; @@ -112,6 +113,6 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { LOG.info("decoded: ColumnOrientedBlock"); return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); } - return ColumnOrientedBlock.PARTIAL; + return null; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java new file mode 100644 index 0000000000..e1575ed546 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -0,0 +1,81 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +import java.time.ZoneId; +import java.util.Map; + +public class DatabaseMetadataReader { + private final String fullClientName; + private final Map properties; + + private String productName; + private Integer major; + private Integer minor; + private Integer revision; + private String timezone; + private String displayName; + private Integer patchVersion; + + public DatabaseMetadataReader(String fullClientName, Map properties) { + assert(fullClientName != null); + assert(properties != null); + this.fullClientName = fullClientName; + this.properties = properties; + } + + public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { + if (productName == null) { + productName = ByteBufUtils.readPascalString(in); + if (productName == null) { + return null; + } + } + if (major == null) { + major = ByteBufUtils.readULeb128(in); + if (major == null) { + return null; + } + } + if (minor == null) { + minor = ByteBufUtils.readULeb128(in); + if (minor == null) { + return null; + } + } + if (revision == null) { + revision = ByteBufUtils.readULeb128(in); + if (revision == null) { + return null; + } + } + if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + timezone = ByteBufUtils.readPascalString(in); + if (timezone == null) { + return null; + } + } + if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { + displayName = ByteBufUtils.readPascalString(in); + if (displayName == null) { + return null; + } + } + + if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + if (patchVersion == null) { + patchVersion = ByteBufUtils.readULeb128(in); + if (patchVersion == null) { + return null; + } + } + } else { + patchVersion = revision; + } + return new ClickhouseNativeDatabaseMetadata(productName, + String.format("%d.%d.%d", major, minor, revision), + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 749a7bc3a1..7740ddad97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -11,27 +11,10 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; -import java.time.ZoneId; - public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); - //server-related info - private Integer packetType; - private String productName; - private Integer major; - private Integer minor; - private Integer revision; - private String timezone; - private String displayName; - private Integer patchVersion; - - //server-error related info - private Integer code; - private String name; - private String message; - private String stacktrace; - private Boolean hasNested; + private PacketReader packetReader; private String fullClientName; InitCommandCodec(InitCommand cmd) { @@ -54,107 +37,30 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBufUtils.writePascalString(cmd.username(), buf); ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); - LOG.info("sent hello packet"); + LOG.info("sent hello packet "); } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - if (packetType == null) { - packetType = ByteBufUtils.readULeb128(in); - LOG.info("packet type: " + packetType); - if (packetType == null) { - return; - } + if (packetReader == null) { + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties()); } - if (packetType == ServerPacketType.HELLO.code()) { - productName = ByteBufUtils.readPascalString(in); - if (productName == null) { - return; - } - if (major == null) { - major = ByteBufUtils.readULeb128(in); - if (major == null) { - return; - } - } - if (minor == null) { - minor = ByteBufUtils.readULeb128(in); - if (minor == null) { - return; - } - } - if (revision == null) { - revision = ByteBufUtils.readULeb128(in); - if (revision == null) { - return; - } - } - if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - timezone = ByteBufUtils.readPascalString(in); - if (timezone == null) { - return; - } - } - if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { - displayName = ByteBufUtils.readPascalString(in); - if (displayName == null) { - return; - } - } - - if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - patchVersion = ByteBufUtils.readULeb128(in); - if (patchVersion == null) { - return; - } + Object packet = packetReader.receivePacket(ctx, in); + if (packet != null) { + if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; + encoder.getConn().setDatabaseMetadata(md); + LOG.info("connected to server: " + md); + completionHandler.handle(CommandResponse.success(null)); + } else if (packet.getClass() == ClickhouseServerException.class) { + ClickhouseServerException exc = (ClickhouseServerException)packet; + completionHandler.handle(CommandResponse.failure(exc)); } else { - patchVersion = revision; - } - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, - String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, cmd.properties()); - encoder.getConn().setDatabaseMetadata(md); - LOG.info("connected to server: " + md); - completionHandler.handle(CommandResponse.success(null)); - } else if (packetType == ServerPacketType.EXCEPTION.code()) { - if (code == null) { - if (in.readableBytes() >= 4) { - code = in.readIntLE(); - } else { - return; - } - } - if (name == null) { - name = ByteBufUtils.readPascalString(in); - if (name == null) { - return; - } - } - if (message == null) { - message = ByteBufUtils.readPascalString(in); - if (message == null) { - return; - } - } - if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); - if (stacktrace == null) { - return; - } - } - if (hasNested == null) { - if (in.readableBytes() >= 1) { - hasNested = in.readByte() != 0; - } else { - return; - } + String msg = "unknown packet type: " + packet.getClass(); + LOG.error(msg); + completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } - //TODO smagellan: read nested exception if nested == true - completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); - } else { - String msg = "unknown packet type: " + packetType; - LOG.error(msg); - completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); + packetReader = null; } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 6cd795f3f9..4e4148ec03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -3,66 +3,100 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import java.util.Map; + public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); private final ClickhouseNativeDatabaseMetadata md; + private final String fullClientName; + private final Map properties; - private Integer packetType; + private ServerPacketType packetType; + private DatabaseMetadataReader metadataReader; + private ClickhouseExceptionReader exceptionReader; private ColumnOrientedBlockReader columnBlockReader; - private BlockStreamProfileInfo blockStreamProfileInfo; - private QueryProgressInfo queryProgress; + private BlockStreamProfileInfoReader blockStreamProfileReader; + private QueryProgressInfoReader queryProgressInfoReader; + private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md) { + public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties) { this.md = md; + this.fullClientName = fullClientName; + this.properties = properties; } - public ColumnOrientedBlock receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { if (packetType == null) { - packetType = ByteBufUtils.readULeb128(in); - if (packetType == null) { - return ColumnOrientedBlock.PARTIAL; + Integer packetTypeCode = ByteBufUtils.readULeb128(in); + if (packetTypeCode == null) { + return null; } - LOG.info("packet type: " + ServerPacketType.fromCode(packetType)); + packetType = ServerPacketType.fromCode(packetTypeCode); + LOG.info("packet type: " + packetType); } - if (packetType == ServerPacketType.DATA.code()) { + + if (packetType == ServerPacketType.HELLO) { + if (metadataReader == null) { + metadataReader = new DatabaseMetadataReader(fullClientName, properties); + } + ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + if (md != null) { + metadataReader = null; + packetType = null; + return md; + } + } else if (packetType == ServerPacketType.DATA) { if (columnBlockReader == null) { columnBlockReader = new ColumnOrientedBlockReader(md); } ColumnOrientedBlock block = columnBlockReader.readFrom(in); - if (block != ColumnOrientedBlock.PARTIAL) { + if (block != null) { columnBlockReader = null; packetType = null; } return block; - } else if (packetType == ServerPacketType.PROFILE_INFO.code()) { - if (blockStreamProfileInfo == null) { - blockStreamProfileInfo = new BlockStreamProfileInfo(); + } else if (packetType == ServerPacketType.EXCEPTION) { + if (exceptionReader == null) { + exceptionReader = new ClickhouseExceptionReader(); + } + ClickhouseServerException exc = exceptionReader.readFrom(in); + if (exc != null) { + exceptionReader = null; + packetType = null; + } + return exc; + } else if (packetType == ServerPacketType.PROFILE_INFO) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); } - blockStreamProfileInfo.readFrom(in); - if (blockStreamProfileInfo.isComplete()) { - LOG.info("decoded: BlockStreamProfileInfo: " + blockStreamProfileInfo); - blockStreamProfileInfo = null; + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: BlockStreamProfileInfo: " + profileInfo); + blockStreamProfileReader = null; packetType = null; } - } else if (packetType == ServerPacketType.PROGRESS.code()) { - if (queryProgress == null) { - queryProgress = new QueryProgressInfo(md); + return profileInfo; + } else if (packetType == ServerPacketType.PROGRESS) { + if (queryProgressInfoReader == null) { + queryProgressInfoReader = new QueryProgressInfoReader(md); } - queryProgress.readFrom(in); - if (queryProgress.isComplete()) { - LOG.info("decoded: QueryProgressInfo: " + queryProgress); - queryProgress = null; + QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); + if (queryProgressInfo != null) { + LOG.info("decoded: QueryProgressInfo: " + queryProgressInfo); + queryProgressInfoReader = null; packetType = null; } - } else if (packetType == ServerPacketType.END_OF_STREAM.code()) { + return queryProgressInfo; + } else if (packetType == ServerPacketType.END_OF_STREAM) { LOG.info("reached end of stream"); packetType = null; endOfStream = true; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index d8cbc8c637..ae4ee983ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,79 +1,38 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; - public class QueryProgressInfo { - private final int serverRevision; - - private Integer rows; - private Integer bytes; - private Integer totalRows; - private Integer writtenRows; - private Integer writtenBytes; - - public QueryProgressInfo(ClickhouseNativeDatabaseMetadata md) { - this.serverRevision = md.getRevision(); + private final int rows; + private final int bytes; + private final int totalRows; + private final int writtenRows; + private final int writtenBytes; + + public QueryProgressInfo(int rows, int bytes, int totalRows, int writtenRows, int writtenBytes) { + this.rows = rows; + this.bytes = bytes; + this.totalRows = totalRows; + + this.writtenRows = writtenRows; + this.writtenBytes = writtenBytes; } - public void readFrom(ByteBuf in) { - if (rows == null) { - rows = ByteBufUtils.readULeb128(in); - if (rows == null) { - return; - } - } - - if (bytes == null) { - bytes = ByteBufUtils.readULeb128(in); - if (bytes == null) { - return; - } - } - - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { - if (totalRows == null) { - totalRows = ByteBufUtils.readULeb128(in); - } - if (totalRows == null) { - return; - } - } + public int getRows() { + return rows; + } - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { - if (writtenRows == null) { - writtenRows = ByteBufUtils.readULeb128(in); - } - if (writtenRows == null) { - return; - } - if (writtenBytes == null) { - writtenBytes = ByteBufUtils.readULeb128(in); - if (writtenBytes == null) { - return; - } - } - } + public int getBytes() { + return bytes; } - public boolean isComplete() { - return !isPartial(); + public int getTotalRows() { + return totalRows; } - public boolean isPartial() { - return writtenBytes == null; + public int getWrittenRows() { + return writtenRows; } - @Override - public String toString() { - return "QueryProgressInfo{" + - "serverRevision=" + serverRevision + - ", rows=" + rows + - ", bytes=" + bytes + - ", totalRows=" + totalRows + - ", writtenRows=" + writtenRows + - ", writtenBytes=" + writtenBytes + - '}'; + public int getWrittenBytes() { + return writtenBytes; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java new file mode 100644 index 0000000000..5b44d9d4a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class QueryProgressInfoReader { + private final int serverRevision; + + private Integer rows; + private Integer bytes; + private Integer totalRows; + private Integer writtenRows; + private Integer writtenBytes; + + public QueryProgressInfoReader(ClickhouseNativeDatabaseMetadata md) { + this.serverRevision = md.getRevision(); + } + + public QueryProgressInfo readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return null; + } + } + + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return null; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { + if (totalRows == null) { + totalRows = ByteBufUtils.readULeb128(in); + } + if (totalRows == null) { + return null; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { + if (writtenRows == null) { + writtenRows = ByteBufUtils.readULeb128(in); + } + if (writtenRows == null) { + return null; + } + if (writtenBytes == null) { + writtenBytes = ByteBufUtils.readULeb128(in); + if (writtenBytes == null) { + return null; + } + } + } + return new QueryProgressInfo(rows, bytes, totalRows, writtenRows, writtenBytes); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index e51bb1fd0b..dbb872e89a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -6,6 +6,7 @@ public enum ServerPacketType { //Name, version, revision. HELLO(0), + //A block of data (compressed or not). DATA(1), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 2dcf3bdd2a..fa401edde6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -96,19 +96,22 @@ private void writeSettings(Map settings, boolean settingsAsStrin void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode: " + in.readableBytes()); if (packetReader == null) { - //TODO: reimplement PacketReader via RowResultDecoder - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData()); + //TODO: reimplement PacketReader via RowResultDecoder? + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); } - ColumnOrientedBlock block = packetReader.receivePacket(ctx, in); - if (block != null && block != ColumnOrientedBlock.PARTIAL) { - LOG.info("decoded packet: " + block + " row count " + block.numRows()); - if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + Object packet = packetReader.receivePacket(ctx, in); + if (packet != null) { + if (packet.getClass() == ColumnOrientedBlock.class) { + ColumnOrientedBlock block = (ColumnOrientedBlock)packet; + LOG.info("decoded packet: " + block + " row count " + block.numRows()); + if (dataPacketNo == 0) { + ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + } + packetReader = null; + rowResultDecoder.generateRows(block); + ++dataPacketNo; } - packetReader = null; - rowResultDecoder.generateRows(block); - ++dataPacketNo; } else if (packetReader.isEndOfStream()) { notifyOperationComplete(); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index a59cef2190..f980c62a06 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -36,6 +36,13 @@ public void baseConnectTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); } + @Test + public void loginFailureTest(TestContext ctx) { + ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions(options); + opts.setPassword("wrong-password"); + ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { From 057ca73a667fc1a7a3df8140d16dfb439b544003 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 1 Mar 2021 00:40:46 +0300 Subject: [PATCH 009/176] added ExtendedClickhouseTest Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 2 + .../clickhousenative/impl/BlockInfo.java | 46 ++++++----- .../impl/ClickhouseNativeRow.java | 5 +- .../ClickhouseNativeSocketConnection.java | 6 +- .../impl/ClickhouseServerException.java | 2 +- .../impl/codec/ByteBufUtils.java | 1 + .../impl/codec/ClickhouseNativeEncoder.java | 4 +- .../ClickhouseNativePreparedStatement.java | 2 +- ...odec.java => CloseCursorCommandCodec.java} | 4 +- .../impl/codec/ColumnOrientedBlockReader.java | 18 +++-- .../impl/codec/ExtendedQueryCodec.java | 35 -------- .../impl/codec/ExtendedQueryCommandCodec.java | 60 ++++++++++++++ .../impl/codec/PacketReader.java | 40 +++++---- .../impl/codec/QueryProgressInfo.java | 11 +++ .../impl/codec/RowResultDecoder.java | 2 +- .../impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 81 ++++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 3 +- .../ExtendedClickhouseTest.java | 72 +++++++++++++++++ 19 files changed, 279 insertions(+), 117 deletions(-) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/{CloseCursorCodec.java => CloseCursorCommandCodec.java} (77%) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 419c8460aa..1330bb179b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -33,6 +33,8 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 607d0f0b52..79d65633fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -11,6 +11,7 @@ public class BlockInfo { private Boolean isOverflows; private Integer bucketNum; private boolean complete; + private Integer fieldNum; public BlockInfo() { isOverflows = false; @@ -40,27 +41,34 @@ public boolean isPartial() { public void readFrom(ByteBuf buf) { while (isPartial()) { - Integer fieldNum = ByteBufUtils.readULeb128(buf); - if (fieldNum != null) { - LOG.info("fieldNum: " + fieldNum); - if (fieldNum == 0) { - complete = true; + if (fieldNum == null) { + fieldNum = ByteBufUtils.readULeb128(buf); + if (fieldNum == null) { return; } - if (fieldNum == 1) { - if (buf.readableBytes() >= 1) { - isOverflows = buf.readByte() != 0; - LOG.info("isOverflows: " + isOverflows); - } else { - return; - } - } else if (fieldNum == 2) { - if (buf.readableBytes() >= 4) { - bucketNum = buf.readInt(); - LOG.info("bucketNum: " + bucketNum); - } else { - return; - } + } + + LOG.info("fieldNum: " + fieldNum); + if (fieldNum == 0) { + complete = true; + return; + } + if (fieldNum == 1) { + if (buf.readableBytes() >= 1) { + isOverflows = buf.readBoolean(); + fieldNum = null; + LOG.info("isOverflows: " + isOverflows); + } else { + return; + } + } else if (fieldNum == 2) { + int readable = buf.readableBytes(); + if (readable >= 4) { + bucketNum = buf.readIntLE(); + fieldNum = null; + LOG.info("bucketNum: " + bucketNum); + } else { + return; } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index c2d668cff8..526445601c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -1,10 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.List; public class ClickhouseNativeRow implements Row { private final int rowNo; @@ -31,7 +33,8 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { - return block.getData().get(columnIndex).getElement(rowNo); + List data = block.getData(); + return data.get(columnIndex).getElement(rowNo); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 1bf3cf53cf..06e8c1f0a2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -59,9 +59,11 @@ public void releasePendingCursor(String cursorId) { this.pendingCursorId = null; } - public void throwExceptionIfBusy() { + public void throwExceptionIfBusy(String callerCursorId) { if (pendingCursorId != null) { - throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + if (!Objects.equals(pendingCursorId, callerCursorId)) { + throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 819f3fdb31..0b497d830b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -27,7 +27,7 @@ public String getMessage() { return message; } - public String getStacktrace() { + public String getServerStacktrace() { return stacktrace; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index e7d9fe0474..19e008c788 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 9809629750..57251dd31d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -64,9 +64,9 @@ void write(CommandBase cmd) { } else if (cmd instanceof PrepareStatementCommand) { return new PrepareStatementCodec((PrepareStatementCommand) cmd); } else if (cmd instanceof ExtendedQueryCommand) { - return new ExtendedQueryCodec<>((ExtendedQueryCommand)cmd, conn); + return new ExtendedQueryCommandCodec<>((ExtendedQueryCommand)cmd, conn); } else if (cmd instanceof CloseCursorCommand) { - return new CloseCursorCodec((CloseCursorCommand)cmd, conn); + return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index ce076217f4..fedc263648 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -29,7 +29,7 @@ public RowDesc rowDesc() { @Override public String sql() { - return null; + return sql; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index ab9a75e59d..754d940a41 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -6,10 +6,10 @@ import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseCursorCodec extends ClickhouseNativeCommandCodec{ +public class CloseCursorCommandCodec extends ClickhouseNativeCommandCodec{ private final ClickhouseNativeSocketConnection conn; - protected CloseCursorCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { super(cmd); this.conn = conn; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 79bac58ce4..863439cbb4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -29,6 +29,7 @@ public class ColumnOrientedBlockReader { private String colName; private String colType; private ClickhouseColumn columnData; + private ClickhouseNativeColumnDescriptor columnDescriptor; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { assert(md != null); @@ -73,7 +74,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } - if (colWithTypes.size() < nColumns) { + while (colWithTypes.size() < nColumns) { if (colName == null) { colName = ByteBufUtils.readPascalString(in); if (colName == null) { @@ -86,16 +87,20 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { return null; } } - colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); + if (columnDescriptor == null) { + columnDescriptor = ClickhouseColumns.columnDescriptorForSpec(colType, colName); + } if (nRows > 0) { if (data == null) { data = new ArrayList<>(nColumns); } if (columnData == null) { + columnData = ClickhouseColumns.columnForSpec(colName, columnDescriptor, nRows); + } + if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); - columnData = ClickhouseColumns.columnForSpec(colName, colWithTypes, nRows); - columnData.readColumn(in); + columnData.readColumn(in); if (columnData.isPartial()) { return null; } else { @@ -104,13 +109,12 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } } + colWithTypes.put(colName, columnDescriptor); + columnDescriptor = null; colName = null; colType = null; } if (colWithTypes.size() == nColumns) { - LOG.info("nColumns: " + nColumns + "; nRows: " + nRows); - LOG.info("columns: " + colWithTypes); - LOG.info("decoded: ColumnOrientedBlock"); return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); } return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java deleted file mode 100644 index b7224aa581..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.sqlclient.impl.command.CommandResponse; -import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; - -import java.util.Collections; - -public class ExtendedQueryCodec extends ClickhouseNativeQueryCommandBaseCodec> { - private final ClickhouseNativeSocketConnection conn; - - public ExtendedQueryCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd); - this.conn = conn; - } - - @Override - void encode(ClickhouseNativeEncoder encoder) { - conn.throwExceptionIfBusy(); - conn.setPendingCursorId(cmd.cursorId()); - super.encode(encoder); - ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(Collections.emptyList()); - RowResultDecoder rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); - Throwable t = rowResultDecoder.complete(); - cmd.resultHandler().handleResult(0, 0, rowDesc, rowResultDecoder.result(), t); - completionHandler.handle(CommandResponse.success(false)); - } - - @Override - void decode(ChannelHandlerContext ctx, ByteBuf in) { - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java new file mode 100644 index 0000000000..7ec837c11a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.OPTION_MAX_BLOCK_SIZE; + +public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); + + public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd, conn); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + String ourCursorId = ecmd().cursorId(); + if (conn.getPendingCursorId() == null) { + conn.setPendingCursorId(ourCursorId); + } else { + conn.throwExceptionIfBusy(ourCursorId); + } + super.encode(encoder); + } + + @Override + protected Map settings() { + String fetchSize = Integer.toString(ecmd().fetch()); + Map defaultSettings = super.settings(); + String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); + if (!Objects.equals(defaultFetchSize, fetchSize)) { + if (LOG.isWarnEnabled() && defaultFetchSize != null) { + LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + } + defaultSettings = new HashMap<>(defaultSettings); + defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); + } + return defaultSettings; + } + + @Override + protected void checkIfBusy() { + conn.throwExceptionIfBusy(ecmd().cursorId()); + } + + @Override + protected boolean isSuspended() { + return ecmd().isSuspended(); + } + + private ExtendedQueryCommand ecmd() { + return (ExtendedQueryCommand)cmd; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 4e4148ec03..75fa5aeae0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; @@ -40,8 +41,12 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { if (packetTypeCode == null) { return null; } - packetType = ServerPacketType.fromCode(packetTypeCode); - LOG.info("packet type: " + packetType); + try { + packetType = ServerPacketType.fromCode(packetTypeCode); + LOG.info("packet type: " + packetType); + } catch (IllegalArgumentException ex) { + LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in), ex); + } } if (packetType == ServerPacketType.HELLO) { @@ -50,6 +55,7 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { + LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); metadataReader = null; packetType = null; return md; @@ -60,6 +66,7 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ColumnOrientedBlock block = columnBlockReader.readFrom(in); if (block != null) { + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; } @@ -70,36 +77,39 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { + LOG.info("decoded: EXCEPTION/ClickhouseServerException"); exceptionReader = null; packetType = null; } return exc; - } else if (packetType == ServerPacketType.PROFILE_INFO) { - if (blockStreamProfileReader == null) { - blockStreamProfileReader = new BlockStreamProfileInfoReader(); - } - BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); - if (profileInfo != null) { - LOG.info("decoded: BlockStreamProfileInfo: " + profileInfo); - blockStreamProfileReader = null; - packetType = null; - } - return profileInfo; } else if (packetType == ServerPacketType.PROGRESS) { if (queryProgressInfoReader == null) { queryProgressInfoReader = new QueryProgressInfoReader(md); } QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); if (queryProgressInfo != null) { - LOG.info("decoded: QueryProgressInfo: " + queryProgressInfo); + LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); queryProgressInfoReader = null; packetType = null; } return queryProgressInfo; } else if (packetType == ServerPacketType.END_OF_STREAM) { - LOG.info("reached end of stream"); + LOG.info("decoded: END_OF_STREAM"); packetType = null; endOfStream = true; + } else if (packetType == ServerPacketType.PROFILE_INFO) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); + } + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + blockStreamProfileReader = null; + packetType = null; + } + return profileInfo; + } else { + throw new IllegalStateException("unknown packet type: " + packetType); } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index ae4ee983ce..2f12160f7d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -35,4 +35,15 @@ public int getWrittenRows() { public int getWrittenBytes() { return writtenBytes; } + + @Override + public String toString() { + return "QueryProgressInfo{" + + "rows=" + rows + + ", bytes=" + bytes + + ", totalRows=" + totalRows + + ", writtenRows=" + writtenRows + + ", writtenBytes=" + writtenBytes + + '}'; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index fcc4ef690a..f35260f1e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -25,7 +25,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - LOG.info("generating row"); + LOG.info("generating row " + (rowNo + 1)); ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); ++rowNo; return row; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index dbb872e89a..385f857556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -59,7 +59,7 @@ public String toString() { public static ServerPacketType fromCode(int code) { ServerPacketType ret = CODE_INDEX.get(code); if (ret == null) { - throw new IllegalArgumentException("unknown code: " + code); + throw new IllegalArgumentException("unknown code: " + code + "(" + Integer.toHexString(code) + ")"); } return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index fa401edde6..1bc0c680e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -8,7 +8,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.command.CommandResponse; -import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import io.vertx.sqlclient.impl.command.QueryCommandBase; import java.util.ArrayList; import java.util.Collection; @@ -16,26 +16,28 @@ import java.util.List; import java.util.Map; -public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ +public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - private final ClickhouseNativeSocketConnection conn; + protected final ClickhouseNativeSocketConnection conn; - protected SimpleQueryCommandCodec(SimpleQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { super(cmd); this.conn = conn; } @Override void encode(ClickhouseNativeEncoder encoder) { - conn.throwExceptionIfBusy(); + checkIfBusy(); super.encode(encoder); - ByteBuf buf = allocateBuffer(); - sendQuery(cmd.sql(), buf); - sendExternalTables(buf, Collections.emptyList()); - encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + if (!isSuspended()) { + ByteBuf buf = allocateBuffer(); + sendQuery(cmd.sql(), buf); + sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } } private void sendExternalTables(ByteBuf buf, Collection blocks) { @@ -66,7 +68,7 @@ private void sendQuery(String query, ByteBuf buf) { clInfo.serializeTo(buf); } boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; - writeSettings(Collections.emptyMap(), settingsAsStrings, true, buf); + writeSettings(settings(), settingsAsStrings, true, buf); if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { ByteBufUtils.writePascalString("", buf); } @@ -75,13 +77,26 @@ private void sendQuery(String query, ByteBuf buf) { ByteBufUtils.writePascalString(query, buf); } - private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + protected Map settings() { + return conn.getDatabaseMetaData().getProperties(); + } + + protected boolean isSuspended() { + return false; + } + + protected void checkIfBusy() { + conn.throwExceptionIfBusy(null); + } + + private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { if (settingsAsStrings) { - for (Map.Entry entry : settings.entrySet()) { + for (Map.Entry entry : settings.entrySet()) { if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + LOG.info("writing query setting: " + entry); ByteBufUtils.writePascalString(entry.getKey(), buf); buf.writeBoolean(settingsAreImportant); - ByteBufUtils.writePascalString(entry.getValue().toString(), buf); + ByteBufUtils.writePascalString(entry.getValue(), buf); } } } else { @@ -94,26 +109,33 @@ private void writeSettings(Map settings, boolean settingsAsStrin @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - LOG.info("decode: " + in.readableBytes()); + LOG.info("decode, readable bytes: " + in.readableBytes()); if (packetReader == null) { - //TODO: reimplement PacketReader via RowResultDecoder? packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); } Object packet = packetReader.receivePacket(ctx, in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; - LOG.info("decoded packet: " + block + " row count " + block.numRows()); + LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); } packetReader = null; rowResultDecoder.generateRows(block); + if (block.numRows() > 0) { + notifyOperationUpdate(true); + } ++dataPacketNo; + } else { + String msg = "unknown packet type: " + packet.getClass(); + LOG.error(msg); + //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { - notifyOperationComplete(); + notifyOperationUpdate(false); + packetReader = null; } } @@ -124,21 +146,24 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { return new ClickhouseNativeRowDesc(columnNames, columnTypes); } - private void notifyOperationComplete() { - Throwable failure = rowResultDecoder.complete(); - if (failure != null) { - failure = new RuntimeException(failure); - } - T result = rowResultDecoder.result(); - int size = rowResultDecoder.size(); - rowResultDecoder.reset(); + private void notifyOperationUpdate(boolean hasMoreResults) { + Throwable failure = null; + if (rowResultDecoder != null) { + LOG.info("notifying operation update; has more result = " + hasMoreResults); + failure = rowResultDecoder.complete(); + if (failure != null) { + failure = new RuntimeException(failure); + } + T result = rowResultDecoder.result(); + int size = rowResultDecoder.size(); + rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); - rowResultDecoder.reset(); + cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + } CommandResponse response; if (failure == null) { - response = CommandResponse.success(true); + response = CommandResponse.success(hasMoreResults); } else { response = CommandResponse.failure(failure); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index de4139ac17..b0e3231b49 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -60,8 +60,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } - public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { - ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); + public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java new file mode 100644 index 0000000000..3dad48df58 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -0,0 +1,72 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.Async; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowStream; +import io.vertx.sqlclient.impl.ArrayTuple; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.concurrent.atomic.LongAdder; + +@RunWith(VertxUnitRunner.class) +public class ExtendedClickhouseTest { + private static final Logger LOG = LoggerFactory.getLogger(ExtendedClickhouseTest.class); + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn + .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") + .execute(ctx.asyncAssertSuccess()); + })); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void extendedQueryTest(TestContext ctx) { + Async async = ctx.async(); + LongAdder adder = new LongAdder(); + final long limit = 55; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn + .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { + RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); + stream.exceptionHandler(err -> { + LOG.error(err.getMessage()); + }); + stream.endHandler(v -> { + LOG.info("got End of stream"); + ctx.assertEquals(limit, adder.sum()); + async.complete(); + }); + stream.handler(row -> { + adder.increment(); + LOG.info("name: " + row.getString("name") + "; value: " + row.getInteger("value")); + }); + })); + })); + } +} From ab430b3a6a84b3243dbac0c7021c39726233280f Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 1 Mar 2021 21:47:59 +0300 Subject: [PATCH 010/176] added testIntegerRanges test Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 22 ++++++++- .../impl/codec/ExtendedQueryCommandCodec.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 9 +++- .../impl/codec/columns/ClickhouseColumns.java | 26 +++++----- .../impl/codec/columns/UInt64Column.java | 19 ++++++-- .../BasicClickhouseTest.java | 48 +++++++++++++++++++ .../ExtendedClickhouseTest.java | 2 +- 7 files changed, 106 insertions(+), 22 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 56356eaebf..2d6134b9c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -2,6 +2,7 @@ import io.vertx.sqlclient.desc.ColumnDescriptor; +import java.math.BigInteger; import java.sql.JDBCType; public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { @@ -16,11 +17,13 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final boolean nullable; private final boolean unsigned; private final boolean lowCardinality; + private final BigInteger minValue; + private final BigInteger maxValue; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, - boolean lowCardinality) { + boolean lowCardinality, Number minValue, Number maxValue) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -30,6 +33,15 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.nullable = nullable; this.unsigned = unsigned; this.lowCardinality = lowCardinality; + this.minValue = bi(minValue); + this.maxValue = bi(maxValue); + } + + private BigInteger bi(Number src) { + if (src instanceof Byte || src instanceof Integer || src instanceof Long) { + return BigInteger.valueOf(src.longValue()); + } + return (BigInteger) src; } @Override @@ -67,6 +79,14 @@ public boolean isLowCardinality() { return lowCardinality; } + public BigInteger getMinValue() { + return minValue; + } + + public BigInteger getMaxValue() { + return maxValue; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 7ec837c11a..eab456fc70 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -15,7 +15,7 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn); + super(cmd, conn, true); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 1bc0c680e2..6a400fd96d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -18,14 +18,19 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); + private final boolean requireUpdates; private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; protected final ClickhouseNativeSocketConnection conn; protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { + this(cmd, conn, false); + } + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdates) { super(cmd); this.conn = conn; + this.requireUpdates = requireUpdates; } @Override @@ -124,7 +129,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } packetReader = null; rowResultDecoder.generateRows(block); - if (block.numRows() > 0) { + if (requireUpdates && block.numRows() > 0) { notifyOperationUpdate(true); } ++dataPacketNo; @@ -149,7 +154,7 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { private void notifyOperationUpdate(boolean hasMoreResults) { Throwable failure = null; if (rowResultDecoder != null) { - LOG.info("notifying operation update; has more result = " + hasMoreResults); + LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); if (failure != null) { failure = new RuntimeException(failure); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b0e3231b49..b94590eb7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -2,8 +2,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import java.math.BigInteger; import java.sql.JDBCType; -import java.util.Map; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -42,20 +42,27 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { + boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, + nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, + nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -86,9 +93,4 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor descr = columnDescriptorForSpec("Array(Nullable(UInt32))", "col1"); - System.err.println(descr); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 8e6c01894c..9bf4bf1c82 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -28,12 +28,21 @@ protected Object readItems(ByteBuf in) { protected Object getElementInternal(int rowIdx) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { - BigInteger ret = BigInteger.valueOf(element); - if (element < 0) { - ret = ret.negate(); - } - return ret; + return unsignedBi(element); } return element; } + + private static BigInteger unsignedBi(long l) { + return new BigInteger(1, new byte[] { + (byte) (l >>> 56 & 0xFF), + (byte) (l >>> 48 & 0xFF), + (byte) (l >>> 40 & 0xFF), + (byte) (l >>> 32 & 0xFF), + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index f980c62a06..4a4a9d0070 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -2,9 +2,14 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; import io.vertx.sqlclient.SqlClient; import org.junit.After; import org.junit.Before; @@ -12,8 +17,15 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + @RunWith(VertxUnitRunner.class) public class BasicClickhouseTest { + private static final Logger LOG = LoggerFactory.getLogger(BasicClickhouseTest.class); + @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -43,6 +55,42 @@ public void loginFailureTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); } + @Test + public void testIntegerRanges(TestContext ctx) { + List types = Stream.of("Int8", "Int16", "Int32", "Int64") + .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + .collect(Collectors.toList()); + List typeNames = types.stream() + .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + LOG.info("integer columns: " + typeNames); + Iterator typesIter = types.iterator(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + scheduleQuery(ctx, typesIter, conn); + })); + } + + private void scheduleQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + if (typeIterator.hasNext()) { + ClickhouseNativeColumnDescriptor descr = typeIterator.next(); + String nativeType = descr.getUnparsedNativeType(); + String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + descr.getMinValue(), nativeType, descr.getMaxValue(), nativeType); + LOG.info("running query: " + query); + conn.query(query).execute( + ctx.asyncAssertSuccess(res -> { + ctx.assertEquals(1, res.size()); + Row row = res.iterator().next(); + ctx.assertEquals(descr.getMinValue(), row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); + ctx.assertEquals(descr.getMaxValue(), row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); + scheduleQuery(ctx, typeIterator, conn); + }) + ); + } else { + conn.close(); + } + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 3dad48df58..a026c70717 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -55,7 +55,7 @@ public void extendedQueryTest(TestContext ctx) { .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); stream.exceptionHandler(err -> { - LOG.error(err.getMessage()); + LOG.error("exceptionHandler: ", err); }); stream.endHandler(v -> { LOG.info("got End of stream"); From 9df29addf028ae5a06ff0ac33bdb7e37c40ac3af Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 3 Mar 2021 00:54:41 +0300 Subject: [PATCH 011/176] added Int128 type Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 +++++-- .../impl/codec/columns/UInt128Column.java | 42 +++++++++++++++++++ .../BasicClickhouseTest.java | 27 +++++++----- 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b94590eb7c..fb899fa23d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -54,7 +54,11 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, - unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); + unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), + unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); + } if (spec.equals("Int128")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, JDBCType.BIGINT, nullable, false, isLowCardinality, + new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); @@ -81,8 +85,12 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn return new UInt16Column(nRows, descr); } else if (jdbcType == JDBCType.INTEGER) { return new UInt32Column(nRows, descr); - } else if (jdbcType == JDBCType.BIGINT && descr.getElementSize() == 8) { - return new UInt64Column(nRows, descr); + } else if (jdbcType == JDBCType.BIGINT) { + if (descr.getElementSize() == 8) { + return new UInt64Column(nRows, descr); + } else if (descr.getElementSize() == 16) { + return new UInt128Column(nRows, descr); + } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { return new StringColumn(nRows, descr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java new file mode 100644 index 0000000000..cc567f2ad5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigInteger; + +public class UInt128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + + protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigInteger[] data = new BigInteger[nRows]; + for (int i = 0; i < nRows; ++i) { + byte[] tmp = new byte[ELEMENT_SIZE]; + in.readBytes(tmp); + data[i] = new BigInteger(reverse(tmp)); + } + return data; + } + return null; + } + + private byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } + + @Override + protected Object getElementInternal(int rowIdx) { + return ((BigInteger[]) this.itemsArray)[rowIdx]; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 4a4a9d0070..7862f44e7a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -17,6 +17,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.math.BigInteger; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -57,33 +58,39 @@ public void loginFailureTest(TestContext ctx) { @Test public void testIntegerRanges(TestContext ctx) { - List types = Stream.of("Int8", "Int16", "Int32", "Int64") - .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) - .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + //TODO: LowCardinality + List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") + .flatMap(el -> "Int128".equals(el) + ? Stream.of(el, "Nullable(" + el + ")") + : Stream.of(el, "U" + el, "Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); LOG.info("integer columns: " + typeNames); Iterator typesIter = types.iterator(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - scheduleQuery(ctx, typesIter, conn); + scheduleIntTypeQuery(ctx, typesIter, conn); })); } - private void scheduleQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { if (typeIterator.hasNext()) { ClickhouseNativeColumnDescriptor descr = typeIterator.next(); String nativeType = descr.getUnparsedNativeType(); - String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - descr.getMinValue(), nativeType, descr.getMaxValue(), nativeType); + //looks like Nullable(UInt128) is broken for min/max at the moment, hence add/subtract + BigInteger minValue = descr.getMinValue().add(BigInteger.ONE); + BigInteger maxValue = descr.getMaxValue().subtract(BigInteger.ONE); + String query = String.format("SELECT CAST('%s', '%s') as min_val, CAST('%s', '%s') as max_val", + minValue, nativeType, maxValue, nativeType); LOG.info("running query: " + query); conn.query(query).execute( ctx.asyncAssertSuccess(res -> { ctx.assertEquals(1, res.size()); Row row = res.iterator().next(); - ctx.assertEquals(descr.getMinValue(), row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); - ctx.assertEquals(descr.getMaxValue(), row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); - scheduleQuery(ctx, typeIterator, conn); + ctx.assertEquals(minValue, row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); + ctx.assertEquals(maxValue, row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); + scheduleIntTypeQuery(ctx, typeIterator, conn); }) ); } else { From 9edb5e1bd3b157d536730a7a54a51d8ae2f06610 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 7 Mar 2021 15:13:57 +0300 Subject: [PATCH 012/176] basic lz4 compression/decompression [WIP] Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 18 ++ .../clickhousenative/ClickhouseConstants.java | 7 +- .../clickhousenative/impl/BlockInfo.java | 28 +-- .../ClickhouseNativeConnectionFactory.java | 21 ++- .../ClickhouseNativeSocketConnection.java | 19 ++- .../impl/RowOrientedBlock.java | 11 +- .../impl/codec/ByteBufUtils.java | 1 - .../impl/codec/ClickhouseStreamDataSink.java | 10 ++ .../codec/ClickhouseStreamDataSource.java | 18 ++ .../impl/codec/ClientInfo.java | 1 - .../impl/codec/ColumnOrientedBlockReader.java | 27 ++- .../impl/codec/InitCommandCodec.java | 4 +- .../codec/Lz4ClickhouseStreamDataSink.java | 76 +++++++++ .../codec/Lz4ClickhouseStreamDataSource.java | 159 ++++++++++++++++++ .../impl/codec/PacketReader.java | 35 +++- .../codec/RawClickhouseStreamDataSink.java | 26 +++ .../codec/RawClickhouseStreamDataSource.java | 66 ++++++++ .../impl/codec/RowResultDecoder.java | 1 - .../impl/codec/SimpleQueryCommandCodec.java | 24 ++- .../clickhousenative/impl/codec/Utils.java | 11 ++ .../impl/codec/columns/ClickhouseColumn.java | 17 +- .../impl/codec/columns/FixedStringColumn.java | 4 +- .../impl/codec/columns/StringColumn.java | 6 +- .../impl/codec/columns/UInt128Column.java | 4 +- .../impl/codec/columns/UInt16Column.java | 4 +- .../impl/codec/columns/UInt32Column.java | 4 +- .../impl/codec/columns/UInt64Column.java | 4 +- .../impl/codec/columns/UInt8Column.java | 4 +- .../ExtendedClickhouseTest.java | 8 +- 29 files changed, 536 insertions(+), 82 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 167a843653..fec1a8e5b4 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -61,6 +61,12 @@ vertx-sql-client + + org.lz4 + lz4-java + 1.7.1 + + io.vertx vertx-sql-client @@ -68,6 +74,18 @@ test + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.12.2 + + org.testcontainers clickhouse diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 1330bb179b..958faa3cc8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -32,9 +32,14 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_ADDRESS = "initial_address"; public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final short COMPRESSION_METHOD_LZ4 = 0x82; + public static final short COMPRESSION_METHOD_ZSTD = 0x90; + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( - OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); + OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 79d65633fb..c626d899e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -23,12 +23,12 @@ public BlockInfo(Boolean isOverflows, Integer bucketNum) { this.bucketNum = bucketNum; } - public void serializeTo(ByteBuf buf) { - ByteBufUtils.writeULeb128(1, buf); - buf.writeByte(isOverflows ? 1 : 0); - ByteBufUtils.writeULeb128(2, buf); - buf.writeIntLE(bucketNum); - ByteBufUtils.writeULeb128(0, buf); + public void serializeTo(ClickhouseStreamDataSink sink) { + sink.writeULeb128(1); + sink.writeByte(isOverflows ? 1 : 0); + sink.writeULeb128(2); + sink.writeIntLE(bucketNum); + sink.writeULeb128(0); } public boolean isComplete() { @@ -39,10 +39,10 @@ public boolean isPartial() { return !complete; } - public void readFrom(ByteBuf buf) { + public void readFrom(ClickhouseStreamDataSource in) { while (isPartial()) { if (fieldNum == null) { - fieldNum = ByteBufUtils.readULeb128(buf); + fieldNum = in.readULeb128(); if (fieldNum == null) { return; } @@ -54,17 +54,17 @@ public void readFrom(ByteBuf buf) { return; } if (fieldNum == 1) { - if (buf.readableBytes() >= 1) { - isOverflows = buf.readBoolean(); + if (in.readableBytes() >= 1) { + isOverflows = in.readBoolean(); fieldNum = null; LOG.info("isOverflows: " + isOverflows); } else { return; } } else if (fieldNum == 2) { - int readable = buf.readableBytes(); + int readable = in.readableBytes(); if (readable >= 4) { - bucketNum = buf.readIntLE(); + bucketNum = in.readIntLE(); fieldNum = null; LOG.info("bucketNum: " + bucketNum); } else { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 48f4135fc7..921ffae46c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -11,12 +12,30 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; +import net.jpountz.lz4.LZ4Factory; public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { private int pipeliningLimit; + private final LZ4Factory lz4Factory; ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { super(context, options); + this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); + } + + private LZ4Factory lz4FactoryForName(String name) { + if ("lz4_native".equals(name)) { + return LZ4Factory.nativeInstance(); + } else if ("lz4_fastest".equals(name)) { + return LZ4Factory.fastestInstance(); + } else if ("lz4_fastest_java".equals(name)) { + return LZ4Factory.fastestJavaInstance(); + } else if ("lz4_safe".equals(name)) { + return LZ4Factory.safeInstance(); + } else if ("lz4_unsafe".equals(name)) { + return LZ4Factory.unsafeInstance(); + } + return null; } @Override @@ -54,6 +73,6 @@ private Future doConnect() { private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, pipeliningLimit, context); + preparedStatementCacheSqlFilter, pipeliningLimit, context, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 06e8c1f0a2..0d771cd245 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -8,6 +8,7 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; import io.vertx.sqlclient.impl.command.InitCommand; +import net.jpountz.lz4.LZ4Factory; import java.util.Map; import java.util.Objects; @@ -17,14 +18,18 @@ public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; private String pendingCursorId; + private final LZ4Factory lz4Factory; + public ClickhouseNativeSocketConnection(NetSocketInternal socket, - boolean cachePreparedStatements, - int preparedStatementCacheSize, - Predicate preparedStatementCacheSqlFilter, - int pipeliningLimit, - EventLoopContext context) { + boolean cachePreparedStatements, + int preparedStatementCacheSize, + Predicate preparedStatementCacheSqlFilter, + int pipeliningLimit, + EventLoopContext context, + LZ4Factory lz4Factory) { super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + this.lz4Factory = lz4Factory; } @Override @@ -71,4 +76,8 @@ public void throwExceptionIfBusy(String callerCursorId) { public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; } + + public LZ4Factory lz4Factory() { + return lz4Factory; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 2c15f7f8bc..7658fe1676 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,9 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import java.util.List; @@ -16,14 +15,14 @@ public RowOrientedBlock(Map columnsWit super(columnsWithTypes, data, blockInfo, md); } - public void serializeTo(ByteBuf buf) { + public void serializeTo(ClickhouseStreamDataSink sink) { if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { - getBlockInfo().serializeTo(buf); + getBlockInfo().serializeTo(sink); } //n_columns - ByteBufUtils.writeULeb128(0, buf); + sink.writeULeb128(0); //n_rows - ByteBufUtils.writeULeb128(0, buf); + sink.writeULeb128(0); //TODO smagellan } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 19e008c788..e7d9fe0474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,7 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java new file mode 100644 index 0000000000..846b62bd76 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -0,0 +1,10 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public interface ClickhouseStreamDataSink { + void writeULeb128(int value); + void writeByte(int value); + void writeIntLE(int value); + + default void finish() { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java new file mode 100644 index 0000000000..a9ae8ed5d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -0,0 +1,18 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; + +public interface ClickhouseStreamDataSource { + void moreData(ByteBuf buf, ByteBufAllocator ctx); + int readableBytes(); + String readPascalString(); + Integer readULeb128(); + Boolean readBoolean(); + Integer readIntLE(); + ByteBuf readSlice(int nBytes); + void readBytes(byte[] dst); + byte readByte(); + long readLongLE(); + short readShortLE(); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 365199b154..807cac542c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -35,7 +35,6 @@ public void serializeTo(ByteBuf buf) { //interface: TCP buf.writeByte(1); ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); - //TODO smagellan: fix client_hostname resolution ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); ByteBufUtils.writePascalString(meta.getFullClientName(), buf); ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 863439cbb4..cfdc92e00e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,17 +1,18 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.Pair; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; public class ColumnOrientedBlockReader { private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); @@ -37,16 +38,8 @@ public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { this.serverRevision = md.getRevision(); } - public ColumnOrientedBlock readFrom(ByteBuf in) { - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); - if (tempTableInfo == null) { - return null; - } - } - } + public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { + //BlockInputStream.read if (blockInfo == null) { @@ -61,14 +54,14 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } if (nColumns == null) { - nColumns = ByteBufUtils.readULeb128(in); + nColumns = in.readULeb128(); if (nColumns == null) { return null; } colWithTypes = new LinkedHashMap<>(); } if (nRows == null) { - nRows = ByteBufUtils.readULeb128(in); + nRows = in.readULeb128(); if (nRows == null) { return null; } @@ -76,13 +69,13 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { while (colWithTypes.size() < nColumns) { if (colName == null) { - colName = ByteBufUtils.readPascalString(in); + colName = in.readPascalString(); if (colName == null) { return null; } } if (colType == null) { - colType = ByteBufUtils.readPascalString(in); + colType = in.readPascalString(); if (colType == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 7740ddad97..32f120d315 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -43,9 +43,9 @@ void encode(ClickhouseNativeEncoder encoder) { @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties()); + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties(), encoder.getConn().lz4Factory()); } - Object packet = packetReader.receivePacket(ctx, in); + Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java new file mode 100644 index 0000000000..b5116113b7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Compressor; +import net.jpountz.lz4.LZ4Factory; +import ru.yandex.clickhouse.util.ClickHouseCityHash; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.COMPRESSION_METHOD_LZ4; + +class Lz4ClickhouseStreamDataSink implements ClickhouseStreamDataSink { + private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSink.class); + + public static final int HEADER_SIZE = 1 + 4 + 4; + + private final ByteBuf sink; + private final LZ4Factory lz4Factory; + private final ByteBuf tmpStorage; + private final ChannelHandlerContext ctx; + + Lz4ClickhouseStreamDataSink(ByteBuf sink, LZ4Factory lz4Factory, ChannelHandlerContext ctx) { + this.sink = sink; + this.tmpStorage = ctx.alloc().heapBuffer(); + this.lz4Factory = lz4Factory; + this.ctx = ctx; + } + + @Override + public void writeULeb128(int value) { + ByteBufUtils.writeULeb128(value, tmpStorage); + } + + @Override + public void writeByte(int value) { + tmpStorage.writeByte(value); + } + + @Override + public void writeIntLE(int value) { + tmpStorage.writeIntLE(value); + } + + @Override + public void finish() { + ByteBuf compressed = null; + try { + compressed = getCompressedBuffer(tmpStorage); + byte[] compressedBytes = compressed.array(); + long[] cityHash = ClickHouseCityHash.cityHash128(compressedBytes, 0, compressed.readableBytes()); + sink.writeLongLE(cityHash[0]); + sink.writeLongLE(cityHash[1]); + sink.writeBytes(compressed); + } finally { + tmpStorage.release(); + if (compressed != null) { + compressed.release(); + } + } + } + + private ByteBuf getCompressedBuffer(ByteBuf from) { + LZ4Compressor compressor = lz4Factory.fastCompressor(); + int uncompressedLen = from.readableBytes(); + int maxCompressedLen = compressor.maxCompressedLength(uncompressedLen); + ByteBuf tmp = ctx.alloc().heapBuffer(maxCompressedLen + HEADER_SIZE); + tmp.writeByte(COMPRESSION_METHOD_LZ4); + int compressedLen = compressor.compress(from.array(), 0, uncompressedLen, tmp.array(), HEADER_SIZE); + int compressedBlockLen = HEADER_SIZE + compressedLen; + tmp.writeIntLE(compressedBlockLen); + tmp.writeIntLE(uncompressedLen); + tmp.writerIndex(compressedBlockLen); + return tmp; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java new file mode 100644 index 0000000000..c07825e22c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -0,0 +1,159 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Factory; +import net.jpountz.lz4.LZ4FastDecompressor; +import ru.yandex.clickhouse.util.ClickHouseCityHash; + +import java.util.Arrays; + +public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSource.class); + + //cityhash size + compression method byte + sizeWithHeader + decompressed size + public static final int MIN_BLOCK_PREFIX = 16 + 1 + 4 + 4; + + private final LZ4Factory lz4Factory; + private final ByteBuf decompressedData; + private long[] serverCityHash; + private Long sizeWithHeader; + private Long compressedSize; + private Long uncompressedSize; + private Integer checkSummedReaderIndex; + + public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { + this.lz4Factory = lz4Factory; + this.decompressedData = alloc.buffer(); + } + + @Override + public void moreData(ByteBuf buf, ByteBufAllocator alloc) { + if (serverCityHash == null && buf.readableBytes() >= MIN_BLOCK_PREFIX) { + serverCityHash = new long[2]; + dumpHeader(buf); + LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + serverCityHash[0] = buf.readLongLE(); + serverCityHash[1] = buf.readLongLE(); + checkSummedReaderIndex = buf.readerIndex(); + int compressionMethod = buf.readUnsignedByte(); + if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { + decompressedData.release(); + String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", + compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); + throw new IllegalStateException(msg); + } + sizeWithHeader = buf.readUnsignedIntLE(); + if (sizeWithHeader > Integer.MAX_VALUE) { + throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); + } + compressedSize = sizeWithHeader - 1 - 4; + uncompressedSize = buf.readUnsignedIntLE(); + if (uncompressedSize > Integer.MAX_VALUE) { + throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); + } + LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + } + if (compressedSize == null) { + return; + } + if (buf.readableBytes() < compressedSize) { + return; + } + long[] oursCityHash; + ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); + buf.readerIndex(checkSummedReaderIndex); + buf.readBytes(arrayBb); + oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size + arrayBb.readerIndex(1 + 4 + 4); + + + LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedSize.intValue() - 4)); + LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + (compressedSize.intValue() - 4)); + if (!Arrays.equals(serverCityHash, oursCityHash)) { + throw new IllegalStateException("CityHash mismatch; server's: " + + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + + Arrays.toString(Utils.hex(oursCityHash))); + } + byte[] uncompressedBytes = new byte[uncompressedSize.intValue()]; + LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); + //LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb)); + decompressor.decompress(arrayBb.array(), arrayBb.arrayOffset() + arrayBb.readerIndex(), uncompressedBytes, 0, uncompressedBytes.length); + LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); + //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); + decompressedData.writeBytes(uncompressedBytes); + serverCityHash = null; + sizeWithHeader = null; + compressedSize = null; + uncompressedSize = null; + checkSummedReaderIndex = null; + } + + private void dumpHeader(ByteBuf buf) { + String h1 = ByteBufUtil.hexDump(buf, buf.readerIndex(), 8); + String h2 = ByteBufUtil.hexDump(buf, buf.readerIndex() + 8, 8); + String method = ByteBufUtil.hexDump(buf, buf.readerIndex() + 16, 1); + String sizeWithHeader = ByteBufUtil.hexDump(buf, buf.readerIndex() + 17, 4); + String uncompressedSize = ByteBufUtil.hexDump(buf, buf.readerIndex() + 21, 4); + LOG.info(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + } + + @Override + public int readableBytes() { + return decompressedData.readableBytes(); + } + + @Override + public String readPascalString() { + return ByteBufUtils.readPascalString(decompressedData); + } + + @Override + public Integer readULeb128() { + return ByteBufUtils.readULeb128(decompressedData); + } + + @Override + public Boolean readBoolean() { + return decompressedData.readBoolean(); + } + + @Override + public Integer readIntLE() { + return decompressedData.readIntLE(); + } + + @Override + public ByteBuf readSlice(int nBytes) { + return decompressedData.readSlice(nBytes); + } + + @Override + public void readBytes(byte[] dst) { + decompressedData.readBytes(dst); + } + + @Override + public byte readByte() { + return decompressedData.readByte(); + } + + @Override + public long readLongLE() { + return decompressedData.readLongLE(); + } + + @Override + public short readShortLE() { + return decompressedData.readShortLE(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 75fa5aeae0..53a1389cc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,13 +1,15 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Factory; import java.util.Map; @@ -17,11 +19,14 @@ public class PacketReader { private final ClickhouseNativeDatabaseMetadata md; private final String fullClientName; private final Map properties; + private final LZ4Factory lz4Factory; + private ClickhouseStreamDataSource ds; private ServerPacketType packetType; private DatabaseMetadataReader metadataReader; private ClickhouseExceptionReader exceptionReader; + private String tempTableInfo; private ColumnOrientedBlockReader columnBlockReader; private BlockStreamProfileInfoReader blockStreamProfileReader; @@ -29,13 +34,14 @@ public class PacketReader { private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties) { + public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { this.md = md; this.fullClientName = fullClientName; this.properties = properties; + this.lz4Factory = lz4Factory; } - public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { if (packetType == null) { Integer packetTypeCode = ByteBufUtils.readULeb128(in); if (packetTypeCode == null) { @@ -61,14 +67,27 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { return md; } } else if (packetType == ServerPacketType.DATA) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return null; + } + } + } if (columnBlockReader == null) { + ds = dataSource(alloc); columnBlockReader = new ColumnOrientedBlockReader(md); } - ColumnOrientedBlock block = columnBlockReader.readFrom(in); + ds.moreData(in, alloc); + ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; + ds = null; + tempTableInfo = null; } return block; } else if (packetType == ServerPacketType.EXCEPTION) { @@ -114,6 +133,14 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { return null; } + private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc) { + if (lz4Factory == null) { + return new RawClickhouseStreamDataSource(); + } else { + return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); + } + } + public boolean isEndOfStream() { return endOfStream; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java new file mode 100644 index 0000000000..221d8f8297 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { + private final ByteBuf sink; + + public RawClickhouseStreamDataSink(ByteBuf sink) { + this.sink = sink; + } + + @Override + public void writeULeb128(int value) { + ByteBufUtils.writeULeb128(value, sink); + } + + @Override + public void writeByte(int value) { + sink.writeByte(value); + } + + @Override + public void writeIntLE(int value) { + sink.writeIntLE(value); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java new file mode 100644 index 0000000000..c376bc7e5e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -0,0 +1,66 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; + +public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private ByteBuf source; + + public RawClickhouseStreamDataSource() { + } + + @Override + public void moreData(ByteBuf source, ByteBufAllocator alloc) { + this.source = source; + } + + @Override + public int readableBytes() { + return source.readableBytes(); + } + + @Override + public String readPascalString() { + return ByteBufUtils.readPascalString(source); + } + + @Override + public Integer readULeb128() { + return ByteBufUtils.readULeb128(source); + } + + @Override + public Boolean readBoolean() { + return source.readBoolean(); + } + + @Override + public Integer readIntLE() { + return source.readIntLE(); + } + + @Override + public ByteBuf readSlice(int nBytes) { + return source.readSlice(nBytes); + } + + @Override + public void readBytes(byte[] dst) { + source.readBytes(dst); + } + + @Override + public byte readByte() { + return source.readByte(); + } + + @Override + public long readLongLE() { + return source.readLongLE(); + } + + @Override + public short readShortLE() { + return source.readShortLE(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index f35260f1e9..0667543ea0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -25,7 +25,6 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - LOG.info("generating row " + (rowNo + 1)); ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); ++rowNo; return row; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 6a400fd96d..10a33693c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -59,7 +59,19 @@ private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { ByteBufUtils.writePascalString(tableName, buf); } - block.serializeTo(buf); + ClickhouseStreamDataSink sink = null; + try { + sink = dataSink(buf); + block.serializeTo(sink); + } finally { + if (sink != null) { + sink.finish(); + } + } + } + + private ClickhouseStreamDataSink dataSink(ByteBuf buf) { + return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), encoder.chctx()); } private void sendQuery(String query, ByteBuf buf) { @@ -78,7 +90,8 @@ private void sendQuery(String query, ByteBuf buf) { ByteBufUtils.writePascalString("", buf); } ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); - ByteBufUtils.writeULeb128(Compression.DISABLED, buf); + int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; + ByteBufUtils.writeULeb128(compressionEnabled, buf); ByteBufUtils.writePascalString(query, buf); } @@ -116,9 +129,9 @@ private void writeSettings(Map settings, boolean settingsAsStrin void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode, readable bytes: " + in.readableBytes()); if (packetReader == null) { - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } - Object packet = packetReader.receivePacket(ctx, in); + Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; @@ -136,6 +149,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } else { String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); + if (packet instanceof Throwable) { + LOG.error("unknown packet type", (Throwable) packet); + } //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java new file mode 100644 index 0000000000..812111cb5f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java @@ -0,0 +1,11 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Utils { + public static String[] hex(long[] src) { + String[] result = new String[src.length]; + for (int i = 0; i < src.length; ++i) { + result[i] = "0x" + Long.toHexString(src[i]); + } + return result; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 774c5b5457..dbc788230b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,7 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + import java.util.BitSet; public abstract class ClickhouseColumn { @@ -15,7 +16,7 @@ protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDes this.nRows = nRows; } - public void readColumn(ByteBuf in){ + public void readColumn(ClickhouseStreamDataSource in){ readStatePrefix(in); readData(in); } @@ -24,10 +25,10 @@ public int nRows() { return nRows; } - protected void readStatePrefix(ByteBuf in) { + protected void readStatePrefix(ClickhouseStreamDataSource in) { } - protected void readData(ByteBuf in) { + protected void readData(ClickhouseStreamDataSource in) { if (columnDescriptor.isNullable() && nullsMap == null) { nullsMap = readNullsMap(in); if (nullsMap == null) { @@ -37,7 +38,7 @@ protected void readData(ByteBuf in) { readDataInternal(in); } - protected void readDataInternal(ByteBuf in) { + protected void readDataInternal(ClickhouseStreamDataSource in) { if (itemsArray == null) { itemsArray = readItems(in); if (itemsArray == null) { @@ -47,11 +48,11 @@ protected void readDataInternal(ByteBuf in) { afterReadItems(in); } - protected abstract Object readItems(ByteBuf in); - protected void afterReadItems(ByteBuf in) { + protected abstract Object readItems(ClickhouseStreamDataSource in); + protected void afterReadItems(ClickhouseStreamDataSource in) { } - protected BitSet readNullsMap(ByteBuf in) { + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); if (in.readableBytes() >= nBytes) { return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index dab15a7bc1..66a1acac32 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDe } @Override - protected Object[] readItems(ByteBuf in) { + protected Object[] readItems(ClickhouseStreamDataSource in) { while (elements.size() < nRows) { if (in.readableBytes() < columnDescriptor.getElementSize()) { return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 8792d4f6c0..faa1b1e89e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,8 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.util.ArrayList; import java.util.List; @@ -17,10 +17,10 @@ protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { } @Override - protected Object[] readItems(ByteBuf in) { + protected Object[] readItems(ClickhouseStreamDataSource in) { while (elements.size() < nRows) { if (curStrLength == null) { - curStrLength = ByteBufUtils.readULeb128(in); + curStrLength = in.readULeb128(); if (curStrLength == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index cc567f2ad5..7b776813f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; @@ -13,7 +13,7 @@ protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescri } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 9c8846bd07..90393cdf64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt16Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 2; @@ -11,7 +11,7 @@ public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { short[] data = new short[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index d4d5e32d26..1da0fdffbf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; @@ -11,7 +11,7 @@ public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { int[] data = new int[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 9bf4bf1c82..10ef443d25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; @@ -13,7 +13,7 @@ public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 10cfd90f2f..b77ec19f81 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; @@ -11,7 +11,7 @@ public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { byte[] data = new byte[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index a026c70717..5023b00edb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -28,16 +28,19 @@ public class ExtendedClickhouseTest { private ClickhouseNativeConnectOptions options; private Vertx vertx; + private String query; @Before public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); + /* ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") .execute(ctx.asyncAssertSuccess()); })); + */ } @After @@ -51,8 +54,9 @@ public void extendedQueryTest(TestContext ctx) { LongAdder adder = new LongAdder(); final long limit = 55; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + query = String.format("select name, value from (SELECT name, value from vertx_cl_test_table limit %s) t1 order by name desc", limit); conn - .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { + .prepare(query, ctx.asyncAssertSuccess(ps -> { RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); stream.exceptionHandler(err -> { LOG.error("exceptionHandler: ", err); @@ -64,7 +68,7 @@ public void extendedQueryTest(TestContext ctx) { }); stream.handler(row -> { adder.increment(); - LOG.info("name: " + row.getString("name") + "; value: " + row.getInteger("value")); + //LOG.info("name: " + row.getString("name") + "; value: " + row.getLong("value")); }); })); })); From 1b9050959871dcc603696cadf5bd89bc77050fde Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 7 Mar 2021 23:37:56 +0300 Subject: [PATCH 013/176] added DateTime/DateTime64 column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 4 + .../codec/Lz4ClickhouseStreamDataSource.java | 4 +- .../impl/codec/PacketReader.java | 162 +++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 35 +++- .../impl/codec/columns/DateTime64Column.java | 45 +++++ .../impl/codec/columns/DateTimeColumn.java | 35 ++++ .../impl/codec/columns/UInt64Column.java | 2 +- 7 files changed, 219 insertions(+), 68 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 2d6134b9c1..1de027bc26 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -87,6 +87,10 @@ public BigInteger getMaxValue() { return maxValue; } + public String getNativeType() { + return nativeType; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index c07825e22c..cfc4e2cd17 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -62,13 +62,14 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } - if (compressedSize == null) { + if (uncompressedSize == null) { return; } if (buf.readableBytes() < compressedSize) { return; } long[] oursCityHash; + //TODO: maybe skip allocation if buf.hasArray() == true ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb); @@ -91,6 +92,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); decompressedData.writeBytes(uncompressedBytes); + arrayBb.release(); serverCityHash = null; sizeWithHeader = null; compressedSize = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 53a1389cc6..271a4d2369 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -56,85 +56,119 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } if (packetType == ServerPacketType.HELLO) { - if (metadataReader == null) { - metadataReader = new DatabaseMetadataReader(fullClientName, properties); - } - ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); - if (md != null) { - LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); - metadataReader = null; - packetType = null; - return md; - } + return readServerHelloBlock(in); } else if (packetType == ServerPacketType.DATA) { - if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); - if (tempTableInfo == null) { - return null; - } - } - } - if (columnBlockReader == null) { - ds = dataSource(alloc); - columnBlockReader = new ColumnOrientedBlockReader(md); - } - ds.moreData(in, alloc); - ColumnOrientedBlock block = columnBlockReader.readFrom(ds); - if (block != null) { - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); - columnBlockReader = null; - packetType = null; - ds = null; - tempTableInfo = null; - } - return block; + return readDataBlock(alloc, in); } else if (packetType == ServerPacketType.EXCEPTION) { - if (exceptionReader == null) { - exceptionReader = new ClickhouseExceptionReader(); - } - ClickhouseServerException exc = exceptionReader.readFrom(in); - if (exc != null) { - LOG.info("decoded: EXCEPTION/ClickhouseServerException"); - exceptionReader = null; - packetType = null; - } - return exc; + return readExceptionBlock(in); } else if (packetType == ServerPacketType.PROGRESS) { - if (queryProgressInfoReader == null) { - queryProgressInfoReader = new QueryProgressInfoReader(md); - } - QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); - if (queryProgressInfo != null) { - LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); - queryProgressInfoReader = null; - packetType = null; - } - return queryProgressInfo; + return readProgressBlock(in); } else if (packetType == ServerPacketType.END_OF_STREAM) { LOG.info("decoded: END_OF_STREAM"); packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { - if (blockStreamProfileReader == null) { - blockStreamProfileReader = new BlockStreamProfileInfoReader(); - } - BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); - if (profileInfo != null) { - LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); - blockStreamProfileReader = null; - packetType = null; + return readProfileInfoBlock(in); + } else if (packetType == ServerPacketType.LOG) { + ColumnOrientedBlock block = readDataBlock(alloc, in, false); + if (block != null) { + traceServerLogs(block); } - return profileInfo; + return null; } else { throw new IllegalStateException("unknown packet type: " + packetType); } return null; } - private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc) { - if (lz4Factory == null) { + private void traceServerLogs(ColumnOrientedBlock block) { + LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + } + + private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { + if (metadataReader == null) { + metadataReader = new DatabaseMetadataReader(fullClientName, properties); + } + ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + if (md != null) { + LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + metadataReader = null; + packetType = null; + } + return md; + } + + private BlockStreamProfileInfo readProfileInfoBlock(ByteBuf in) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); + } + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + blockStreamProfileReader = null; + packetType = null; + } + return profileInfo; + } + + private QueryProgressInfo readProgressBlock(ByteBuf in) { + if (queryProgressInfoReader == null) { + queryProgressInfoReader = new QueryProgressInfoReader(md); + } + QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); + if (queryProgressInfo != null) { + LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + queryProgressInfoReader = null; + packetType = null; + } + return queryProgressInfo; + } + + private ClickhouseServerException readExceptionBlock(ByteBuf in) { + if (exceptionReader == null) { + exceptionReader = new ClickhouseExceptionReader(); + } + ClickhouseServerException exc = exceptionReader.readFrom(in); + if (exc != null) { + LOG.info("decoded: EXCEPTION/ClickhouseServerException"); + exceptionReader = null; + packetType = null; + } + return exc; + } + + private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in) { + return readDataBlock(alloc, in, true); + } + + private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, boolean preferCompressionIfEnabled) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return null; + } + } + } + if (columnBlockReader == null) { + ds = dataSource(alloc, preferCompressionIfEnabled); + columnBlockReader = new ColumnOrientedBlockReader(md); + } + ds.moreData(in, alloc); + ColumnOrientedBlock block = columnBlockReader.readFrom(ds); + if (block != null) { + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); + columnBlockReader = null; + packetType = null; + ds = null; + tempTableInfo = null; + } + return block; + } + + private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc, boolean preferCompressionIfEnabled) { + if (lz4Factory == null || !preferCompressionIfEnabled) { return new RawClickhouseStreamDataSource(); } else { return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index fb899fa23d..8dbed234cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -4,6 +4,7 @@ import java.math.BigInteger; import java.sql.JDBCType; +import java.time.ZoneId; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -18,6 +19,9 @@ public class ClickhouseColumns { public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); + private static final int DATETIME_COLUMN_WIDTH = DateTimeColumn.ELEMENT_SIZE; + private static final int DATETIME64_COLUMN_WIDTH = DateTime64Column.ELEMENT_SIZE; + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; boolean nullable = false; @@ -41,7 +45,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, - boolean nullable, boolean isArray, boolean isLowCardinality) { + boolean nullable, boolean isArray, + boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, @@ -67,6 +72,12 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int bytesLength = Integer.parseInt(lengthStr); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME_COLUMN_WIDTH, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -77,7 +88,7 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } JDBCType jdbcType = descr.jdbcType(); if (descr.isArray()) { - + throw new IllegalStateException("arrays are not supported"); } else { if (jdbcType == JDBCType.TINYINT) { return new UInt8Column(nRows, descr); @@ -97,6 +108,26 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else { return new FixedStringColumn(nRows, descr); } + } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { + ZoneId zoneId; + Integer precision = null; + String nativeType = descr.getNativeType(); + if (nativeType.endsWith(")")) { + int openBracePos = nativeType.indexOf("("); + String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); + if (descr.getElementSize() == DATETIME64_COLUMN_WIDTH) { + String[] modifiers = dateModifiers.split(","); + precision = Integer.parseInt(modifiers[0]); + zoneId = modifiers.length == 2 + ? ZoneId.of(modifiers[1]) + : ZoneId.systemDefault(); + } else { + zoneId = ZoneId.of(dateModifiers); + } + } else { + zoneId = ZoneId.systemDefault(); + } + return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java new file mode 100644 index 0000000000..52f0b95ef5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -0,0 +1,45 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.math.BigInteger; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +public class DateTime64Column extends ClickhouseColumn { + private static final Logger LOG = LoggerFactory.getLogger(DateTime64Column.class); + + public static final int ELEMENT_SIZE = 8; + + private final ZoneId zoneId; + private final BigInteger invTickSize; + + public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + ZonedDateTime[] data = new ZonedDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); + LOG.info("seconds: " + seconds + "; nanos: " + nanos); + if (nullsMap == null || !nullsMap.get(i)) { + ZonedDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId); + data[i] = dt; + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java new file mode 100644 index 0000000000..9bc75978fb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +public class DateTimeColumn extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + private final ZoneId zoneId; + + public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + ZonedDateTime[] data = new ZonedDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); + if (nullsMap == null || !nullsMap.get(i)) { + ZonedDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId); + data[i] = dt; + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 10ef443d25..65a7e52b3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -33,7 +33,7 @@ protected Object getElementInternal(int rowIdx) { return element; } - private static BigInteger unsignedBi(long l) { + static BigInteger unsignedBi(long l) { return new BigInteger(1, new byte[] { (byte) (l >>> 56 & 0xFF), (byte) (l >>> 48 & 0xFF), From b6403a3549b9c8bf72278cfdf058bad43970e71c Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 8 Mar 2021 01:40:06 +0300 Subject: [PATCH 014/176] added UUID column support Signed-off-by: vladimir --- .../clickhousenative/impl/Pair.java | 42 ------------------- .../impl/codec/columns/ClickhouseColumns.java | 5 +++ .../impl/codec/columns/DateTime64Column.java | 10 ++--- .../impl/codec/columns/DateTimeColumn.java | 6 +-- .../impl/codec/columns/UInt128Column.java | 2 +- .../impl/codec/columns/UUIDColumn.java | 28 +++++++++++++ 6 files changed, 40 insertions(+), 53 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java deleted file mode 100644 index 81160b4f1b..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl; - -import java.util.Objects; - -public class Pair { - private final K left; - private final V right; - - public Pair(K left, V right) { - this.left = left; - this.right = right; - } - - public K getLeft() { - return left; - } - - public V getRight() { - return right; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Pair pair = (Pair) o; - return Objects.equals(left, pair.left) && Objects.equals(right, pair.right); - } - - @Override - public int hashCode() { - return Objects.hash(left, right); - } - - @Override - public String toString() { - return "Pair{" + - "left=" + left + - ", right=" + right + - '}'; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8dbed234cc..5ab806042e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -78,6 +78,9 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("UUID")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -128,6 +131,8 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn zoneId = ZoneId.systemDefault(); } return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { + return new UUIDColumn(nRows, descr); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 52f0b95ef5..ec3a2c388e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -2,16 +2,13 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import java.math.BigInteger; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.ZonedDateTime; public class DateTime64Column extends ClickhouseColumn { - private static final Logger LOG = LoggerFactory.getLogger(DateTime64Column.class); public static final int ELEMENT_SIZE = 8; @@ -27,14 +24,13 @@ public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integ @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - ZonedDateTime[] data = new ZonedDateTime[nRows]; + OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); long seconds = bi.divide(invTickSize).longValueExact(); long nanos = bi.remainder(invTickSize).longValueExact(); - LOG.info("seconds: " + seconds + "; nanos: " + nanos); if (nullsMap == null || !nullsMap.get(i)) { - ZonedDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId); + OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 9bc75978fb..bea3c10be1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -4,8 +4,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.ZonedDateTime; public class DateTimeColumn extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; @@ -20,11 +20,11 @@ public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - ZonedDateTime[] data = new ZonedDateTime[nRows]; + OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); if (nullsMap == null || !nullsMap.get(i)) { - ZonedDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId); + OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 7b776813f9..1d9db0f478 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -26,7 +26,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } - private byte[] reverse(byte[] src) { + static byte[] reverse(byte[] src) { for (int i = 0, j = src.length - 1; i < j; ++i, --j) { byte tmp = src[i]; src[i] = src[j]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java new file mode 100644 index 0000000000..c06e25b656 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.UUID; + +public class UUIDColumn extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + + protected UUIDColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + UUID[] data = new UUID[nRows]; + for (int i = 0; i < nRows; ++i) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } + return data; + } + return null; + } +} From e36625f61e2a08f4fc36bff6fbb58fecb1195573 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 8 Mar 2021 14:26:11 +0300 Subject: [PATCH 015/176] added Decimal column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 21 +++++++ .../clickhousenative/impl/codec/Utils.java | 9 +++ .../impl/codec/columns/ClickhouseColumns.java | 60 ++++++++++++++----- .../impl/codec/columns/DateTime64Column.java | 1 - .../impl/codec/columns/Decimal128Column.java | 36 +++++++++++ .../impl/codec/columns/Decimal256Column.java | 37 ++++++++++++ .../impl/codec/columns/Decimal32Column.java | 34 +++++++++++ .../impl/codec/columns/Decimal64Column.java | 33 ++++++++++ .../impl/codec/columns/UInt128Column.java | 17 ++---- 9 files changed, 220 insertions(+), 28 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 1de027bc26..26d1fee93e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -20,10 +20,21 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final BigInteger minValue; private final BigInteger maxValue; + private final Integer precision; + private final Integer scale; + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { + this(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + Integer precision, Integer scale) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -35,6 +46,8 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.lowCardinality = lowCardinality; this.minValue = bi(minValue); this.maxValue = bi(maxValue); + this.precision = precision; + this.scale = scale; } private BigInteger bi(Number src) { @@ -91,6 +104,14 @@ public String getNativeType() { return nativeType; } + public Integer getPrecision() { + return precision; + } + + public Integer getScale() { + return scale; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java index 812111cb5f..c1ddf363a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java @@ -8,4 +8,13 @@ public static String[] hex(long[] src) { } return result; } + + public static byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 5ab806042e..d2a1f3e3fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -19,8 +19,8 @@ public class ClickhouseColumns { public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); - private static final int DATETIME_COLUMN_WIDTH = DateTimeColumn.ELEMENT_SIZE; - private static final int DATETIME64_COLUMN_WIDTH = DateTime64Column.ELEMENT_SIZE; + public static final String DECIMAL_PREFIX = "Decimal("; + public static final int DECIMAL_PREFIX_LENGTH = DECIMAL_PREFIX.length(); public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; @@ -49,20 +49,20 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32Column.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, @@ -73,18 +73,37 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME_COLUMN_WIDTH, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumn.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); + } else if (spec.startsWith(DECIMAL_PREFIX)) { + String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); + String[] modifiersTokens = decimalModifiers.split(","); + int precision = Integer.parseInt(modifiersTokens[0].trim()); + int scale = Integer.parseInt(modifiersTokens[1].trim()); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), + JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } + private static int decimalSize(int precision) { + if (precision <= Decimal32Column.MAX_PRECISION) { + return Decimal32Column.ELEMENT_SIZE; + } else if (precision <= Decimal64Column.MAX_PRECISION) { + return Decimal64Column.ELEMENT_SIZE; + } else if (precision <= Decimal128Column.MAX_PRECISION) { + return Decimal128Column.ELEMENT_SIZE; + } else { + return Decimal256Column.ELEMENT_SIZE; + } + } + public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); @@ -100,9 +119,9 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else if (jdbcType == JDBCType.INTEGER) { return new UInt32Column(nRows, descr); } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == 8) { + if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == 16) { + } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { return new UInt128Column(nRows, descr); } } else if (jdbcType == JDBCType.VARCHAR) { @@ -118,11 +137,11 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DATETIME64_COLUMN_WIDTH) { + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); - precision = Integer.parseInt(modifiers[0]); + precision = Integer.parseInt(modifiers[0].trim()); zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1]) + ? ZoneId.of(modifiers[1].trim()) : ZoneId.systemDefault(); } else { zoneId = ZoneId.of(dateModifiers); @@ -131,6 +150,17 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn zoneId = ZoneId.systemDefault(); } return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.DECIMAL) { + //TODO smagellan: merge into one statement after introducing column readers + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { + return new Decimal32Column(nRows, descr); + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { + return new Decimal64Column(nRows, descr); + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { + return new Decimal128Column(nRows, descr); + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { + return new Decimal256Column(nRows, descr); + } } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { return new UUIDColumn(nRows, descr); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index ec3a2c388e..7aa798e0aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -9,7 +9,6 @@ import java.time.ZoneId; public class DateTime64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; private final ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java new file mode 100644 index 0000000000..719f231061 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java new file mode 100644 index 0000000000..c0ec433e62 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//Looks like support is experimental at the moment +public class Decimal256Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java new file mode 100644 index 0000000000..1fbc34d44f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -0,0 +1,34 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//TODO smagellan: maybe introduce separate universal column reader/column +public class Decimal32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + int item = in.readIntLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java new file mode 100644 index 0000000000..99cb4790f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + long item = in.readLongLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 1d9db0f478..8e62765edf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -2,9 +2,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import java.math.BigInteger; +//experimental support at the moment public class UInt128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; @@ -16,25 +18,16 @@ protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescri protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; + byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - byte[] tmp = new byte[ELEMENT_SIZE]; - in.readBytes(tmp); - data[i] = new BigInteger(reverse(tmp)); + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); } return data; } return null; } - static byte[] reverse(byte[] src) { - for (int i = 0, j = src.length - 1; i < j; ++i, --j) { - byte tmp = src[i]; - src[i] = src[j]; - src[j] = tmp; - } - return src; - } - @Override protected Object getElementInternal(int rowIdx) { return ((BigInteger[]) this.itemsArray)[rowIdx]; From 88e3b2c594fa0d3d1e5aca14ba76cd64b6411661 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 9 Mar 2021 22:11:56 +0300 Subject: [PATCH 016/176] added TABLE_COLUMNS packet-type support Signed-off-by: vladimir --- .../clickhousenative/impl/BlockInfo.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 1 + .../codec/Lz4ClickhouseStreamDataSource.java | 7 +++- .../impl/codec/MultistringMessageReader.java | 36 +++++++++++++++++++ .../impl/codec/PacketReader.java | 30 ++++++++++++++++ .../codec/RawClickhouseStreamDataSource.java | 8 +++++ .../impl/codec/columns/Decimal128Column.java | 1 + .../impl/codec/columns/Decimal32Column.java | 1 - 8 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index c626d899e2..1e9f631acf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -48,7 +48,7 @@ public void readFrom(ClickhouseStreamDataSource in) { } } - LOG.info("fieldNum: " + fieldNum); + LOG.info("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); if (fieldNum == 0) { complete = true; return; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index a9ae8ed5d8..b4b84516de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -15,4 +15,5 @@ public interface ClickhouseStreamDataSource { byte readByte(); long readLongLE(); short readShortLE(); + String hexdump(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index cfc4e2cd17..80d236bfab 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -65,7 +65,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (uncompressedSize == null) { return; } - if (buf.readableBytes() < compressedSize) { + if (buf.readableBytes() < compressedSize - 4) { return; } long[] oursCityHash; @@ -158,4 +158,9 @@ public long readLongLE() { public short readShortLE() { return decompressedData.readShortLE(); } + + @Override + public String hexdump() { + return ByteBufUtil.hexDump(decompressedData); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java new file mode 100644 index 0000000000..26a5123ac3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +import java.util.ArrayList; +import java.util.List; + +public class MultistringMessageReader { + private final List strings; + private Integer stringsExpected; + + public MultistringMessageReader() { + strings = new ArrayList<>(); + } + + public List readFrom(ByteBuf in, ServerPacketType packetType) { + if (stringsExpected == null) { + stringsExpected = stringsInMessage(packetType); + } + String ln; + while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in)) != null) { + strings.add(ln); + } + if (strings.size() == stringsExpected) { + return strings; + } + return null; + } + + private int stringsInMessage(ServerPacketType type) { + if (type == ServerPacketType.TABLE_COLUMNS) { + return 2; + } + return 0; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 271a4d2369..21435e72be 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -11,6 +11,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; +import java.util.List; import java.util.Map; public class PacketReader { @@ -31,6 +32,9 @@ public class PacketReader { private BlockStreamProfileInfoReader blockStreamProfileReader; private QueryProgressInfoReader queryProgressInfoReader; + private MultistringMessageReader multistringReader; + private List multistringMessage; + private PacketReader tableColumnsPacketReader; private boolean endOfStream; @@ -75,6 +79,8 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { traceServerLogs(block); } return null; + } else if (packetType == ServerPacketType.TABLE_COLUMNS) { + return receiveMultistringMessage(alloc, in, packetType); } else { throw new IllegalStateException("unknown packet type: " + packetType); } @@ -85,6 +91,30 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } + private List receiveMultistringMessage(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + if (multistringMessage == null) { + if (multistringReader == null) { + multistringReader = new MultistringMessageReader(); + } + multistringMessage = multistringReader.readFrom(in, type); + } + if (multistringMessage == null) { + return null; + } + if (tableColumnsPacketReader == null) { + tableColumnsPacketReader = new PacketReader(md, fullClientName, properties, lz4Factory); + } + ColumnOrientedBlock block = tableColumnsPacketReader.readDataBlock(alloc, in, true); + if (block != null) { + LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + multistringReader = null; + packetType = null; + tableColumnsPacketReader = null; + multistringMessage = null; + } + return multistringMessage; + } + private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { if (metadataReader == null) { metadataReader = new DatabaseMetadataReader(fullClientName, properties); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index c376bc7e5e..48846b95e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -2,6 +2,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { private ByteBuf source; @@ -63,4 +64,11 @@ public long readLongLE() { public short readShortLE() { return source.readShortLE(); } + + @Override + public String hexdump() { + return source != null + ? "[" + ByteBufUtil.hexDump(source, 0, source.writerIndex()) + "][" + ByteBufUtil.hexDump(source) + "]" + : null; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 719f231061..f79e4a6ef3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -9,6 +9,7 @@ import java.math.MathContext; import java.math.RoundingMode; +//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class Decimal128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 1fbc34d44f..2722d3b46a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -8,7 +8,6 @@ import java.math.MathContext; import java.math.RoundingMode; -//TODO smagellan: maybe introduce separate universal column reader/column public class Decimal32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; public static final int MAX_PRECISION = 9; From 217be04bfef6b4a946d19acf173aacebed1ea5a5 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 10 Mar 2021 00:40:36 +0300 Subject: [PATCH 017/176] added Replay test Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 7 +- .../codec/ClickhouseStreamDataSource.java | 2 + .../codec/Lz4ClickhouseStreamDataSource.java | 21 ++-- .../impl/codec/PacketReader.java | 5 +- .../src/test/java/io/vertx/ReplayTest.java | 68 ++++++++++++ .../PacketReaderReplayTest.java | 105 ++++++++++++++++++ .../src/test/resources/insert_prepare.yaml | 28 +++++ .../with_max_block_size_and_2_datablocks.yaml | 45 ++++++++ 8 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index fec1a8e5b4..1fc77e8634 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -78,12 +78,7 @@ com.fasterxml.jackson.dataformat jackson-dataformat-yaml - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - 2.12.2 + test diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index b4b84516de..5fcd69ae2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -16,4 +16,6 @@ public interface ClickhouseStreamDataSource { long readLongLE(); short readShortLE(); String hexdump(); + default void finish(){ + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 80d236bfab..ee29f6736f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -22,7 +22,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private final ByteBuf decompressedData; private long[] serverCityHash; private Long sizeWithHeader; - private Long compressedSize; + private Long compressedAndSizeSize; private Long uncompressedSize; private Integer checkSummedReaderIndex; @@ -54,18 +54,20 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (sizeWithHeader > Integer.MAX_VALUE) { throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); } - compressedSize = sizeWithHeader - 1 - 4; + compressedAndSizeSize = sizeWithHeader - 1 - 4; uncompressedSize = buf.readUnsignedIntLE(); if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); } LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } if (uncompressedSize == null) { return; } - if (buf.readableBytes() < compressedSize - 4) { + //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) + int compressedDataSize = compressedAndSizeSize.intValue() - 4; + if (buf.readableBytes() < compressedDataSize) { return; } long[] oursCityHash; @@ -78,8 +80,8 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.readerIndex(1 + 4 + 4); - LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedSize.intValue() - 4)); - LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + (compressedSize.intValue() - 4)); + LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedDataSize)); + LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); if (!Arrays.equals(serverCityHash, oursCityHash)) { throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + @@ -95,7 +97,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.release(); serverCityHash = null; sizeWithHeader = null; - compressedSize = null; + compressedAndSizeSize = null; uncompressedSize = null; checkSummedReaderIndex = null; } @@ -163,4 +165,9 @@ public short readShortLE() { public String hexdump() { return ByteBufUtil.hexDump(decompressedData); } + + @Override + public void finish() { + decompressedData.release(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 21435e72be..08ac968216 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -80,7 +80,7 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } return null; } else if (packetType == ServerPacketType.TABLE_COLUMNS) { - return receiveMultistringMessage(alloc, in, packetType); + return receiveTableColumns(alloc, in, packetType); } else { throw new IllegalStateException("unknown packet type: " + packetType); } @@ -91,7 +91,7 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } - private List receiveMultistringMessage(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { multistringReader = new MultistringMessageReader(); @@ -191,6 +191,7 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; + ds.finish(); ds = null; tempTableInfo = null; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java new file mode 100644 index 0000000000..f3d1e02aa3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java @@ -0,0 +1,68 @@ +package io.vertx; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.util.ResourceLeakDetector; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import net.jpountz.lz4.LZ4Factory; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ReplayTest { + public static void main(String[] args) throws IOException { + ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); + + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + //File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml"); + File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml"); + Map map = + mapper.readValue(file, Map.class); + List queryAnswers = map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + byte[][] arrays = asPrimitiveByteArray(queryAnswers); + ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); + ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]).writerIndex(0); + fragmentedByteBuf.readBytes(continuousBuf); + fragmentedByteBuf.readerIndex(0); + + Map props = new HashMap<>(); + props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); + + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + String fullName = "Clickhouse jython-driver"; + LZ4Factory lz4Factory = LZ4Factory.safeInstance(); + + //1st packet: server hello + PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, continuousBuf); + + do { + rdr = new PacketReader(md, fullName, props, lz4Factory); + Object packet = rdr.receivePacket(allocator, continuousBuf); + } while (!rdr.isEndOfStream() && continuousBuf.readableBytes() > 0); + } + + private static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java new file mode 100644 index 0000000000..e242dc0e18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -0,0 +1,105 @@ +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import net.jpountz.lz4.LZ4Factory; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + +@RunWith(Parameterized.class) +public class PacketReaderReplayTest { + private static final Map PROPS = Collections.unmodifiableMap(buildProperties()); + private static final LZ4Factory LZ4_FACTORY = LZ4Factory.safeInstance(); + + private final ByteBuf buf; + + public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf) { + this.buf = buf; + } + + @Parameterized.Parameters(name = "{0}({1})") + public static Iterable dataForTest() throws IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + List result = new ArrayList<>(); + + int continuousOffset = 8; + for (String replayFile : Arrays.asList("/insert_prepare.yaml", "/with_max_block_size_and_2_datablocks.yaml")) { + try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { + Map map = mapper.readValue(is, Map.class); + + List queryAnswers = map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + byte[][] arrays = asPrimitiveByteArray(queryAnswers); + ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); + ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]) + .writerIndex(0); + fragmentedByteBuf.readBytes(continuousBuf); + fragmentedByteBuf.readerIndex(0); + ByteBuf continuousWithOffsetBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes() + continuousOffset], + continuousOffset, fragmentedByteBuf.readableBytes()) + .writerIndex(0); + fragmentedByteBuf.readBytes(continuousWithOffsetBuf); + fragmentedByteBuf.readerIndex(0); + + + result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf}); + result.add(new Object[]{replayFile, "continuous", continuousBuf}); + result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf}); + } + } + return result; + } + + @After + public void cleanup() { + buf.release(); + } + + @Test + public void doReplayTest() { + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + String fullName = "Clickhouse jython-driver"; + + //1st packet: server hello + PacketReader rdr = new PacketReader(null, fullName, PROPS, LZ4_FACTORY); + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); + + do { + rdr = new PacketReader(md, fullName, PROPS, LZ4_FACTORY); + Object packet = rdr.receivePacket(allocator, buf); + } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); + } + + private static Map buildProperties() { + Map props = new HashMap<>(); + props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); + return props; + } + + private static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml b/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml new file mode 100644 index 0000000000..64b86c99a6 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml @@ -0,0 +1,28 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQKvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UF +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAS5JTlNFUlQgSU5UTyBpbnNlcnRfc2Vs + ZWN0X3Rlc3R0YWJsZSAoKikgVkFMVUVTAgCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv// + //8AAAA= +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWXDvkdgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMp5jCAAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDIz + NmMzNzVmLTQxODMtNDdkNC04ODQ0LTE2YjkyYzc1ZWQ2MQl0aHJlYWRfaWQGVUludDY0kQQAAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmde + KGZyb20gMTI3LjAuMC4xOjM2MjAyLCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgSU5TRVJUIElO + VE8gaW5zZXJ0X3NlbGVjdF90ZXN0dGFibGUgKCopIFZBTFVFUw== +# Packet 12 +peer1_2: !!binary | + CwBCY29sdW1ucyBmb3JtYXQgdmVyc2lvbjogMQozIGNvbHVtbnM6CmBhYCBJbnQ4CmBiYCBTdHJp + bmcKYGNgIEludDgK +# Packet 14 +peer1_3: !!binary | + AQBIKPIcufqlLRMJXTEAsN65giwAAAAhAAAA8BIBAAL/////AAMAAWEESW50OAFiBlN0cmluZwFj + BEludDg= diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml new file mode 100644 index 0000000000..d57e166d6e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml @@ -0,0 +1,45 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQKvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UF +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg5tYXhfYmxvY2tfc2l6ZQECNTAAAAIBZHNlbGVjdCBuYW1lLCB2YWx1ZSBmcm9tIChT + RUxFQ1QgbmFtZSwgdmFsdWUgZnJvbSB2ZXJ0eF9jbF90ZXN0X3RhYmxlIGxpbWl0IDU1KSB0MSBv + cmRlciBieSBuYW1lIGRlc2MCAKeDrGzVXHp8taxGvduG4hSCFAAAAAoAAACgAQAC/////wAAAA== +# Packet 10 +peer1_1: !!binary | + AQBicwHkjGdcDo5MWkTMRbtOgi4AAAAjAAAA8BQBAAL/////AAIABG5hbWUGU3RyaW5nBXZhbHVl + BlVJbnQzMg== +# Packet 12 +peer1_2: !!binary | + AQCx4PZsr1XBX5U/lPIe9471grQBAACoAQAA8P+aAQAC/////wACMgRuYW1lBlN0cmluZwJ7aQR7 + RnVLBXl7SUA1AXkFeHV5bGgEeEAmbwJzKwJweQFrAmdjA2ZmLAVmI3BiSgFlAWIEYSdQYAJgYgVd + YCtycwVdOjpgLwNaIWkBWgVYRDBaegNXQ0gCVEoCVDICT2sBTwVLY0ZzJAFGBEVVSVoBRQRDckp3 + BUB2cGFTBT5JQkhFAT4BPQQ8aTw/BTtZI1ZZAzlZVgU5N2hxYQE5ATcDM21uBDNORG4DMER2Ay0y + dgEpAidHBCE7aFEAAAV2YWx1ZQZVSW50MzIZau9oH+r3XisCpaD436HtlAmcwpeNsTJr6e1xMFSZ + 7F9egG+ffWSQxNMEOu+NXx47vlJ1AILiTQuVGhuBd0PHYDAjkUxsHDg8IrICpyFLWQ7DTwMYcYFn + 1KFkIHb0q7TIqEEIu1lq/reMAjPrm0d4sigZonzGGasj4Xf8KhgYv/t3resP2ROWE+GUFdtdWUt9 + 5pK8C4fy31H1nvq8YLa8ajedGLw8hP6Nti/Xct1fsJLUdWBG92LSJwsjYHY71dVqQkJqmXsI4w== +# Packet 14 +peer1_3: !!binary | + AQAJ2NHGgowQkuLjsPN8N5logkcAAAA8AAAA8AgBAAL/////AAIFBG5hbWUGU3RyaW5nAAEA8BIF + dmFsdWUGVUludDMybZltXecjidDGXat5idKGXty+Sl8= +# Packet 16 +peer1_4: !!binary | + BjcCgKIBAWQB +# Packet 18 +peer1_5: !!binary | + A8gBrRgAAAA= +# Packet 20 +peer1_6: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + BQ== From 837bb652e9256c6aaebf19d80ee22e936fba5c90 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 10 Mar 2021 23:36:34 +0300 Subject: [PATCH 018/176] added Enum column support Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 1 + .../impl/codec/columns/ClickhouseColumns.java | 74 ++++++++++++++++++- .../impl/codec/columns/Enum16Column.java | 21 ++++++ .../impl/codec/columns/Enum8Column.java | 21 ++++++ .../codec/columns/ClickhouseColumnsTest.java | 51 +++++++++++++ 5 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 10a33693c8..d65be3763d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -131,6 +131,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } + //TODO smagellan: handle parse Exceptions, if any Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index d2a1f3e3fe..fe7509b09d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -5,6 +5,8 @@ import java.math.BigInteger; import java.sql.JDBCType; import java.time.ZoneId; +import java.util.HashMap; +import java.util.Map; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -22,6 +24,9 @@ public class ClickhouseColumns { public static final String DECIMAL_PREFIX = "Decimal("; public static final int DECIMAL_PREFIX_LENGTH = DECIMAL_PREFIX.length(); + public static final String ENUM_PREFIX = "Enum"; + public static final int ENUM_PREFIX_LENGTH = ENUM_PREFIX.length(); + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; boolean nullable = false; @@ -88,6 +93,11 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int scale = Integer.parseInt(modifiersTokens[1].trim()); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); + } else if (spec.startsWith(ENUM_PREFIX)) { + int openBracketPos = spec.indexOf('(', ENUM_PREFIX_LENGTH); + int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -161,10 +171,70 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(nRows, descr); } - } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { - return new UUIDColumn(nRows, descr); + } else if (jdbcType == JDBCType.OTHER) { + if (descr.getNativeType().equals("UUID")) { + return new UUIDColumn(nRows, descr); + } else if (descr.getNativeType().startsWith(ENUM_PREFIX)) { + Map enumVals = parseEnumVals(descr.getNativeType()); + if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { + return new Enum8Column(nRows, descr, enumVals); + } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { + return new Enum16Column(nRows, descr, enumVals); + } + } } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } + + static Map parseEnumVals(String nativeType) { + boolean isByte = nativeType.startsWith("Enum8("); + int openBracketPos = nativeType.indexOf('('); + Map result = new HashMap<>(); + int lastQuotePos = -1; + boolean gotEq = false; + String enumElementName = null; + int startEnumValPos = -1; + for (int i = openBracketPos; i < nativeType.length(); ++i) { + char ch = nativeType.charAt(i); + if (ch == '\'') { + if (lastQuotePos == -1) { + lastQuotePos = i; + } else { + enumElementName = nativeType.substring(lastQuotePos + 1, i); + lastQuotePos = -1; + } + } else if (ch == '=') { + gotEq = true; + } else if (gotEq) { + if (Character.isDigit(ch)) { + if (startEnumValPos == -1) { + startEnumValPos = i; + } else if (!Character.isDigit(nativeType.charAt(i + 1))) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } else if (startEnumValPos != -1) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } + } + return result; + } + + private static Number byteOrShort(int number, boolean isByte) { + if (isByte) { + return (byte) number; + } + return (short) number; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java new file mode 100644 index 0000000000..d10873fb59 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum16Column extends UInt16Column { + public static final int ELEMENT_SIZE = 2; + private final Map enumVals; + + public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx) { + Short key = (Short) super.getElementInternal(rowIdx); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java new file mode 100644 index 0000000000..f10147ac93 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum8Column extends UInt8Column { + public static final int ELEMENT_SIZE = 1; + private final Map enumVals; + + public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx) { + Byte key = (Byte) super.getElementInternal(rowIdx); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java new file mode 100644 index 0000000000..d4e4ea11bf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java @@ -0,0 +1,51 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + + +@RunWith(Parameterized.class) +public class ClickhouseColumnsTest { + private final String enumDefinition; + private final java.util.function.Function converter; + + public ClickhouseColumnsTest(String enumType, String enumDefinition, Function converter) { + this.enumDefinition = enumDefinition; + this.converter = converter; + } + + @Parameterized.Parameters(name = "{0}") + public static Iterable dataForTest() { + java.util.function.Function byteConverter = Integer::byteValue; + java.util.function.Function shortConverter = Integer::shortValue; + return Arrays.asList(new Object[][]{ + {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", byteConverter}, + {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", shortConverter} + }); + } + + private T key(Integer k) { + return converter.apply(k); + } + + @Test + public void testParseEnumVals() { + Map vals = ClickhouseColumns.parseEnumVals(enumDefinition); + Map expected = new HashMap<>(); + expected.put(key(1), "aa4"); + expected.put(key(22), "1b3b2"); + expected.put(key(24), "1b3b3"); + expected.put(key(25), "1b3b4"); + expected.put(key(26), "1b3b5"); + expected.put(key(27), "1b3b6"); + expected.put(key(28), "1b3b7"); + Assert.assertEquals(expected, vals); + } +} From c4a4c66bee4c91fe60f2edc234e6c2abf9b80bb0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 13 Mar 2021 00:39:23 +0300 Subject: [PATCH 019/176] added LowCardinality column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 5 + .../impl/codec/columns/ClickhouseColumn.java | 4 - .../impl/codec/columns/ClickhouseColumns.java | 11 +- .../codec/columns/LowCardinalityColumn.java | 108 ++++++++++++++++++ .../src/test/java/io/vertx/ReplayTest.java | 68 ----------- .../PacketReaderReplayTest.java | 35 ++++-- ...l => insert_prepare_with_compression.yaml} | 0 ...able_low_cardinality_with_compression.yaml | 63 ++++++++++ ...e_low_cardinality_without_compression.yaml | 60 ++++++++++ ...ze_and_2_datablocks_with_compression.yaml} | 0 10 files changed, 267 insertions(+), 87 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java rename vertx-clickhouse-native-client/src/test/resources/{insert_prepare.yaml => insert_prepare_with_compression.yaml} (100%) create mode 100644 vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml rename vertx-clickhouse-native-client/src/test/resources/{with_max_block_size_and_2_datablocks.yaml => with_max_block_size_and_2_datablocks_with_compression.yaml} (100%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 26d1fee93e..f3d314f072 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -112,6 +112,11 @@ public Integer getScale() { return scale; } + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { + return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale); + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index dbc788230b..1132377424 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -83,8 +83,4 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } - - public ClickhouseNativeColumnDescriptor getColumnDescriptor() { - return columnDescriptor; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index fe7509b09d..0e00e67a09 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -15,7 +15,7 @@ public class ClickhouseColumns { public static final String ARRAY_PREFIX = "Array("; public static final int ARRAY_PREFIX_LENGTH = ARRAY_PREFIX.length(); - public static final String LOW_CARDINALITY_PREFIX = "LowCardinality"; + public static final String LOW_CARDINALITY_PREFIX = "LowCardinality("; public static final int LOW_CARDINALITY_PREFIX_LENGTH = LOW_CARDINALITY_PREFIX.length(); public static final String FIXED_STRING_PREFIX = "FixedString("; @@ -40,7 +40,6 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); isLowCardinality = true; - throw new IllegalStateException("low cardinality columns are not supported"); } if (spec.startsWith(NULLABLE_PREFIX)) { spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); @@ -118,6 +117,10 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } + if (descr.isLowCardinality()) { + ClickhouseNativeColumnDescriptor nestedDescr = descr.copyWithModifiers(false, false); + return new LowCardinalityColumn(nRows, descr, nestedDescr); + } JDBCType jdbcType = descr.jdbcType(); if (descr.isArray()) { throw new IllegalStateException("arrays are not supported"); @@ -187,8 +190,10 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } + + //TODO: maybe switch to antl4 static Map parseEnumVals(String nativeType) { - boolean isByte = nativeType.startsWith("Enum8("); + final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); Map result = new HashMap<>(); int lastQuotePos = -1; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java new file mode 100644 index 0000000000..fd6d4c2fde --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -0,0 +1,108 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class LowCardinalityColumn extends ClickhouseColumn { + private final ClickhouseNativeColumnDescriptor indexDescr; + private ClickhouseColumn indexColumn; + private Long serType; + private Long indexSize; + private Long nKeys; + private Long keysSerializationVersion; + + private ClickhouseColumn keysColumn; + + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexDescr) { + super(nRows, descr); + this.indexDescr = indexDescr; + } + + @Override + protected void readStatePrefix(ClickhouseStreamDataSource in) { + //KeysSerializationVersion + if (keysSerializationVersion == null) { + if (in.readableBytes() >= 4) { + keysSerializationVersion = in.readLongLE(); + if (keysSerializationVersion != 1) { + throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); + } + } + } + } + + @Override + protected void readData(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + return; + } + if (in.readableBytes() < 8 + 8) { + return; + } + if (indexSize == null) { + serType = in.readLongLE(); + indexSize = in.readLongLE(); + } + if (indexSize > Integer.MAX_VALUE) { + throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); + } + if (indexColumn == null) { + indexColumn = ClickhouseColumns.columnForSpec(indexDescr.name(), indexDescr, indexSize.intValue()); + } + if (indexColumn.isPartial()) { + indexColumn.readColumn(in); + if (indexColumn.isPartial()) { + return; + } + } + if (nKeys == null) { + if (in.readableBytes() < 8) { + return; + } + nKeys = in.readLongLE(); + } + int keyType = (int)(serType & 0xf); + if (keysColumn == null) { + keysColumn = uintColumn(keyType); + } + keysColumn.readColumn(in); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + return null; + } + + @Override + public boolean isPartial() { + return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); + } + + @Override + public Object getElement(int rowIdx) { + int key = ((Number)keysColumn.getElement(rowIdx)).intValue(); + if (columnDescriptor.isNullable() && key == 0) { + return null; + } + return indexColumn.getElementInternal(key); + } + + private ClickhouseColumn uintColumn(int code) { + ClickhouseNativeColumnDescriptor tmp; + String name = columnDescriptor.name(); + //TODO smagellan: introduce immutable column readers, reuse cached instances + if (code == 0) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + } else if (code == 1) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + } else if (code == 2) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + } else if (code == 3) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + } else { + throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); + } + return ClickhouseColumns.columnForSpec(name, tmp, nRows); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java deleted file mode 100644 index f3d1e02aa3..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.vertx; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.PooledByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.util.ResourceLeakDetector; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; -import net.jpountz.lz4.LZ4Factory; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class ReplayTest { - public static void main(String[] args) throws IOException { - ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); - - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - mapper.findAndRegisterModules(); - //File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml"); - File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml"); - Map map = - mapper.readValue(file, Map.class); - List queryAnswers = map.entrySet() - .stream() - .filter(packet -> !packet.getKey().startsWith("peer0_")) - .map(Map.Entry::getValue) - .collect(Collectors.toList()); - byte[][] arrays = asPrimitiveByteArray(queryAnswers); - ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); - ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]).writerIndex(0); - fragmentedByteBuf.readBytes(continuousBuf); - fragmentedByteBuf.readerIndex(0); - - Map props = new HashMap<>(); - props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); - props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); - props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); - - PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - String fullName = "Clickhouse jython-driver"; - LZ4Factory lz4Factory = LZ4Factory.safeInstance(); - - //1st packet: server hello - PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); - ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, continuousBuf); - - do { - rdr = new PacketReader(md, fullName, props, lz4Factory); - Object packet = rdr.receivePacket(allocator, continuousBuf); - } while (!rdr.isEndOfStream() && continuousBuf.readableBytes() > 0); - } - - private static byte[][] asPrimitiveByteArray(List src) { - byte[][] ret = new byte[src.size()][]; - for (int i = 0; i < src.size(); ++i) { - ret[i] = src.get(i); - } - return ret; - } -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index e242dc0e18..bceea58939 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -21,13 +21,14 @@ @RunWith(Parameterized.class) public class PacketReaderReplayTest { - private static final Map PROPS = Collections.unmodifiableMap(buildProperties()); - private static final LZ4Factory LZ4_FACTORY = LZ4Factory.safeInstance(); - + private final Map props; private final ByteBuf buf; + private final LZ4Factory lz4Factory; - public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf) { + public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf, Map props, LZ4Factory lz4Factory) { this.buf = buf; + this.props = props; + this.lz4Factory = lz4Factory; } @Parameterized.Parameters(name = "{0}({1})") @@ -37,7 +38,12 @@ public static Iterable dataForTest() throws IOException { List result = new ArrayList<>(); int continuousOffset = 8; - for (String replayFile : Arrays.asList("/insert_prepare.yaml", "/with_max_block_size_and_2_datablocks.yaml")) { + for (String replayFile : Arrays.asList("/insert_prepare_with_compression.yaml", + "/with_max_block_size_and_2_datablocks_with_compression.yaml", + "/nullable_low_cardinality_with_compression.yaml", + "/nullable_low_cardinality_without_compression.yaml" + )) { + boolean compression = replayFile.contains("with_compression"); try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); @@ -59,9 +65,11 @@ public static Iterable dataForTest() throws IOException { fragmentedByteBuf.readerIndex(0); - result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf}); - result.add(new Object[]{replayFile, "continuous", continuousBuf}); - result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf}); + Map p = buildProperties(compression); + LZ4Factory f = compression ? LZ4Factory.safeInstance() : null; + result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf, p, f}); + result.add(new Object[]{replayFile, "continuous", continuousBuf, p, f}); + result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf, p, f}); } } return result; @@ -78,19 +86,22 @@ public void doReplayTest() { String fullName = "Clickhouse jython-driver"; //1st packet: server hello - PacketReader rdr = new PacketReader(null, fullName, PROPS, LZ4_FACTORY); + PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); do { - rdr = new PacketReader(md, fullName, PROPS, LZ4_FACTORY); + rdr = new PacketReader(md, fullName, props, lz4Factory); Object packet = rdr.receivePacket(allocator, buf); + System.err.println("packet: " + packet); } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); } - private static Map buildProperties() { + private static Map buildProperties(boolean withCompression) { Map props = new HashMap<>(); props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); - props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + if (withCompression) { + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + } props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); return props; } diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml b/vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml rename to vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml new file mode 100644 index 0000000000..3d33cf8447 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml @@ -0,0 +1,63 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAagBc2VsZWN0IENBU1QoJ2FhJywgJ0xv + d0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2FhJyBhcyBjb2xfdmFs + IFVOSU9OIEFMTCAgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0 + cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFsAgCng6xs1Vx6fLWsRr3bhuIUghQAAAAK + AAAAoAEAAv////8AAAA= +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWXYyktgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMtyXCQAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDQ3 + MDBhMDMxLTQwOWItNGQ3Mi05ZGNjLWFiYmViMmVjYzQ0YQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmfX + AShmcm9tIDEyNy4wLjAuMTo1NDIzMiwgdXNpbmcgcHJvZHVjdGlvbiBwYXJzZXIpIHNlbGVjdCBD + QVNUKCdhYScsICdMb3dDYXJkaW5hbGl0eShOdWxsYWJsZShTdHJpbmcpKScpIGFzIG5hbWUsICdh + YScgYXMgY29sX3ZhbCBVTklPTiBBTEwgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5 + KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFs +# Packet 12 +peer1_2: !!binary | + AQDgC4IWJtBHB59qUDBOO5/RgkoAAAA/AAAA8DABAAL/////AAIABG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkHY29sX3ZhbAZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQBXaThdn+ITMOD5/5OIpQG1gmUAAABoAAAA8yMBAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkBAAEAEgYIABIDBwBkAAAAAmFhHQDwBAIHY29sX3ZhbAZTdHJp + bmcCYWE= +# Packet 16 +peer1_4: !!binary | + AQCuFGMBo2LZ43un9vPLkDJpgmEAAABlAAAA8yMBAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkBAAEAEgYIABICBwA1AAAAGgDwAwdjb2xfdmFsBlN0cmluZwJi + Yg== +# Packet 18 +peer1_5: !!binary | + BgICoRUAAAE= +# Packet 20 +peer1_6: !!binary | + AwICAAAA +# Packet 22 +peer1_7: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 24 +peer1_8: !!binary | + AwAAAAAA +# Packet 26 +peer1_9: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWXYyktg2MpLYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzI3ngkAUp4JAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDQ3MDBhMDMxLTQwOWItNGQ3Mi05ZGNjLWFiYmViMmVjYzQ0YSQ0NzAwYTAz + MS00MDliLTRkNzItOWRjYy1hYmJlYjJlY2M0NGEJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdGUmVhZCAyIHJvd3MsIDIuMDAgQiBpbiAwLjAwMTU3MTQwMyBzZWMu + LCAxMjcyIHJvd3Mvc2VjLiwgMS4yNCBLaUIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1 + ZXJ5KTogMC4wMCBCLg== +# Packet 28 +peer1_10: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml new file mode 100644 index 0000000000..e1e621cdef --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml @@ -0,0 +1,60 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAKgBc2VsZWN0IENBU1QoJ2FhJywgJ0xv + d0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2FhJyBhcyBjb2xfdmFs + IFVOSU9OIEFMTCAgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0 + cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFsAgABAAL/////AAAA +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWWbyktgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMqjvAgAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDdm + NGRkMTVmLTNhMjctNDgwYS04MTY2LTEzZWI1YzkzMmQzOQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmfX + AShmcm9tIDEyNy4wLjAuMTo1NDIxNiwgdXNpbmcgcHJvZHVjdGlvbiBwYXJzZXIpIHNlbGVjdCBD + QVNUKCdhYScsICdMb3dDYXJkaW5hbGl0eShOdWxsYWJsZShTdHJpbmcpKScpIGFzIG5hbWUsICdh + YScgYXMgY29sX3ZhbCBVTklPTiBBTEwgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5 + KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFs +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIABG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkHY29sX3Zh + bAZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkBAAAAAAAA + AAAGAAAAAAAAAwAAAAAAAAAAAAJhYQEAAAAAAAAAAgdjb2xfdmFsBlN0cmluZwJhYQ== +# Packet 16 +peer1_4: !!binary | + AQABAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkBAAAAAAAA + AAAGAAAAAAAAAgAAAAAAAAAAAAEAAAAAAAAAAAdjb2xfdmFsBlN0cmluZwJiYg== +# Packet 18 +peer1_5: !!binary | + BgICoRUAAAE= +# Packet 20 +peer1_6: !!binary | + AwICAAAA +# Packet 22 +peer1_7: !!binary | + AQABAAL/////AAAA +# Packet 24 +peer1_8: !!binary | + AwAAAAAA +# Packet 26 +peer1_9: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWWbyktgm8pLYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzLT9AIA6vQCAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDdmNGRkMTVmLTNhMjctNDgwYS04MTY2LTEzZWI1YzkzMmQzOSQ3ZjRkZDE1 + Zi0zYTI3LTQ4MGEtODE2Ni0xM2ViNWM5MzJkMzkJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdGUmVhZCAyIHJvd3MsIDIuMDAgQiBpbiAwLjAwMTI2NDk1NCBzZWMu + LCAxNTgxIHJvd3Mvc2VjLiwgMS41NCBLaUIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1 + ZXJ5KTogMC4wMCBCLg== +# Packet 28 +peer1_10: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml rename to vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml From d345fa53fa8498ee1bb237dbddffe8f01aad93df Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 14 Mar 2021 02:10:22 +0300 Subject: [PATCH 020/176] Array support [WIP] Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 59 +++++-- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 118 ++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 16 +- .../impl/codec/columns/ClickhouseColumns.java | 145 +++++++++--------- .../codec/columns/LowCardinalityColumn.java | 15 +- .../impl/codec/columns/PairedIterator.java | 48 ++++++ .../impl/codec/columns/Triplet.java | 25 +++ .../PacketReaderReplayTest.java | 16 +- ...f_nullable_string_without_compression.yaml | 54 +++++++ ...elect_empty_array_without_compression.yaml | 51 ++++++ 11 files changed, 450 insertions(+), 99 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index f3d314f072..29a5a27f3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -10,7 +10,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final String name; private final String unparsedNativeType; - private final String nativeType; + private final String nestedType; private final JDBCType jdbcType; private final int elementSize; private final boolean isArray; @@ -23,21 +23,42 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + private final ClickhouseNativeColumnDescriptor nested; + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { - this(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null); + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, null, null, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + ClickhouseNativeColumnDescriptor nested) { + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, null, null, nested); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale) { + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, precision, scale, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + Integer precision, Integer scale, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; - this.nativeType = nativeType; + this.nestedType = nestedType; this.isArray = isArray; this.elementSize = elementSize; this.jdbcType = jdbcType; @@ -48,6 +69,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; + this.nested = nested; } private BigInteger bi(Number src) { @@ -100,8 +122,12 @@ public BigInteger getMaxValue() { return maxValue; } - public String getNativeType() { - return nativeType; + public String getNestedType() { + return nestedType; + } + + public ClickhouseNativeColumnDescriptor getNestedDescr() { + return nested; } public Integer getPrecision() { @@ -112,9 +138,22 @@ public Integer getScale() { return scale; } + public ClickhouseNativeColumnDescriptor copyAsNestedArray() { + return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, + JDBCType.ARRAY, false, false, false, null, null, this); + } + + public ClickhouseNativeColumnDescriptor copyAsNonArray() { + return copyWithModifiers(false, lowCardinality, nullable); + } + + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { + return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, nested); + } + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { - return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale); + return copyWithModifiers(isArray, newLowCardinality, newNullable); } @Override @@ -122,7 +161,7 @@ public String toString() { return "ClickhouseNativeColumnDescriptor{" + "name='" + name + '\'' + ", unparsedNativeType='" + unparsedNativeType + '\'' + - ", nativeType='" + nativeType + '\'' + + ", nativeType='" + nestedType + '\'' + ", isArray=" + isArray + ", jdbcType=" + jdbcType + ", elementSize=" + elementSize + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index cfdc92e00e..13572442e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(colName, columnDescriptor, nRows); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java new file mode 100644 index 0000000000..1bf18205e3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -0,0 +1,118 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ArrayColumn extends ClickhouseColumn { + public static final Object[] EMPTY_ARRAY = new Object[0]; + + private Deque, Integer>> graphLevelDeque; + private List> slicesSeries; + private List slices; + private Integer curDepth; + private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private ClickhouseColumn curNestedColumn; + private Integer nItems; + + public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + super(nRows, descr.copyAsNestedArray()); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (graphLevelDeque == null) { + graphLevelDeque = new ArrayDeque<>(); + graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + slicesSeries = new ArrayList<>(); + slices = new ArrayList<>(); + curDepth = 0; + curNestedColumnDescr = columnDescriptor.getNestedDescr(); + nItems = 0; + } + + if (!graphLevelDeque.isEmpty()) { + readSlices(in); + } + Object[] data; + if (nItems != 0 && nItems > 0) { + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + } else { + assert nItems == curNestedColumn.nRows; + } + data = curNestedColumn.readItemsObjects(in); + } else { + data = EMPTY_ARRAY; + } + return resliceIntoArray(data); + } + + private Object[] resliceIntoArray(Object[] data) { + Object[] intermData = data; + for (int i = slicesSeries.size() - 1; i >= 0; --i) { + List slices = slicesSeries.get(i); + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = new Object[slices.size() - 1]; + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliseSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliseSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliseSz); + newDataList[tmpSliceIdx] = resliced; + ++tmpSliceIdx; + } + intermData = newDataList; + } + return intermData; + } + + private void readSlices(ClickhouseStreamDataSource in) { + while (!graphLevelDeque.isEmpty()) { + Triplet, Integer> sliceState = graphLevelDeque.remove(); + curNestedColumnDescr = sliceState.left().getNestedDescr(); + if (curDepth != sliceState.right().intValue()) { + curDepth = sliceState.right(); + slicesSeries.add(slices); + + //The last element in slice is index(number) of the last + //element in current level. On the last iteration this + //represents number of elements in fully flattened array. + nItems = slices.get(slices.size() - 1); + if (curNestedColumnDescr.isNullable()) { + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + } + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } + slices = new ArrayList<>(); + } + if (curNestedColumnDescr.isArray()) { + slices.add(0); + int prev = 0; + for (int size : sliceState.middle()) { + int nestedSizeCount = size - prev; + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + } + nestedSizes.add((int)sz); + } + slices.addAll(nestedSizes); + prev = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + } + } + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1132377424..4e89e744e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -48,14 +48,24 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } + protected Object[] readItemsObjects(ClickhouseStreamDataSource in) { + return (Object[]) readItems(in); + } + protected abstract Object readItems(ClickhouseStreamDataSource in); protected void afterReadItems(ClickhouseStreamDataSource in) { } protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); - if (in.readableBytes() >= nBytes) { - return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + if (in.readableBytes() >= nRows) { + BitSet bSet = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + byte b = in.readByte(); + if (b != 0) { + bSet.set(i); + } + } + return bSet; } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 0e00e67a09..11492be340 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -29,23 +29,23 @@ public class ClickhouseColumns { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; - boolean nullable = false; - boolean isArray = false; - boolean isLowCardinality = false; if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); - isArray = true; - throw new IllegalStateException("arrays are not supported"); + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, + JDBCType.ARRAY, false, false, false, null, null, nested); } + boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); isLowCardinality = true; } + boolean nullable = false; if (spec.startsWith(NULLABLE_PREFIX)) { spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); nullable = true; } - return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, isArray, isLowCardinality); + return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, @@ -97,6 +97,9 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Nothing".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, + JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -113,77 +116,72 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { - if (descr == null) { - throw new IllegalArgumentException("no parsed spec for column name: " + name); + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows) { + if (descr.isArray()) { + return new ArrayColumn(nRows, descr); } if (descr.isLowCardinality()) { - ClickhouseNativeColumnDescriptor nestedDescr = descr.copyWithModifiers(false, false); - return new LowCardinalityColumn(nRows, descr, nestedDescr); + return new LowCardinalityColumn(nRows, descr); } JDBCType jdbcType = descr.jdbcType(); - if (descr.isArray()) { - throw new IllegalStateException("arrays are not supported"); - } else { - if (jdbcType == JDBCType.TINYINT) { - return new UInt8Column(nRows, descr); - } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nRows, descr); - } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nRows, descr); - } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { - return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { - return new UInt128Column(nRows, descr); - } - } else if (jdbcType == JDBCType.VARCHAR) { - if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr); - } else { - return new FixedStringColumn(nRows, descr); - } - } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { - ZoneId zoneId; - Integer precision = null; - String nativeType = descr.getNativeType(); - if (nativeType.endsWith(")")) { - int openBracePos = nativeType.indexOf("("); - String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { - String[] modifiers = dateModifiers.split(","); - precision = Integer.parseInt(modifiers[0].trim()); - zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1].trim()) - : ZoneId.systemDefault(); - } else { - zoneId = ZoneId.of(dateModifiers); - } + if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { + return new UInt8Column(nRows, descr); + } else if (jdbcType == JDBCType.SMALLINT) { + return new UInt16Column(nRows, descr); + } else if (jdbcType == JDBCType.INTEGER) { + return new UInt32Column(nRows, descr); + } else if (jdbcType == JDBCType.BIGINT) { + if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { + return new UInt64Column(nRows, descr); + } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { + return new UInt128Column(nRows, descr); + } + } else if (jdbcType == JDBCType.VARCHAR) { + if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + return new StringColumn(nRows, descr); + } else { + return new FixedStringColumn(nRows, descr); + } + } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { + ZoneId zoneId; + Integer precision = null; + String nativeType = descr.getNestedType(); + if (nativeType.endsWith(")")) { + int openBracePos = nativeType.indexOf("("); + String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { + String[] modifiers = dateModifiers.split(","); + precision = Integer.parseInt(modifiers[0].trim()); + zoneId = modifiers.length == 2 + ? ZoneId.of(modifiers[1].trim()) + : ZoneId.systemDefault(); } else { - zoneId = ZoneId.systemDefault(); + zoneId = ZoneId.of(dateModifiers); } - return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); - } else if (jdbcType == JDBCType.DECIMAL) { - //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { - return new Decimal32Column(nRows, descr); - } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { - return new Decimal64Column(nRows, descr); - } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { - return new Decimal128Column(nRows, descr); - } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { - return new Decimal256Column(nRows, descr); - } - } else if (jdbcType == JDBCType.OTHER) { - if (descr.getNativeType().equals("UUID")) { - return new UUIDColumn(nRows, descr); - } else if (descr.getNativeType().startsWith(ENUM_PREFIX)) { - Map enumVals = parseEnumVals(descr.getNativeType()); - if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { - return new Enum8Column(nRows, descr, enumVals); - } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { - return new Enum16Column(nRows, descr, enumVals); - } + } else { + zoneId = ZoneId.systemDefault(); + } + return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.DECIMAL) { + //TODO smagellan: merge into one statement after introducing column readers + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { + return new Decimal32Column(nRows, descr); + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { + return new Decimal64Column(nRows, descr); + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { + return new Decimal128Column(nRows, descr); + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { + return new Decimal256Column(nRows, descr); + } + } else if (jdbcType == JDBCType.OTHER) { + if (descr.getNestedType().equals("UUID")) { + return new UUIDColumn(nRows, descr); + } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { + Map enumVals = parseEnumVals(descr.getNestedType()); + if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { + return new Enum8Column(nRows, descr, enumVals); + } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { + return new Enum16Column(nRows, descr, enumVals); } } } @@ -242,4 +240,9 @@ private static Number byteOrShort(int number, boolean isByte) { } return (short) number; } + + public static void main(String[] args) { + ClickhouseNativeColumnDescriptor t = columnDescriptorForSpec("Array(Array(LowCardinality(Nullable(String))))", "fake"); + System.err.println(t); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index fd6d4c2fde..25af66699b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -14,14 +14,13 @@ public class LowCardinalityColumn extends ClickhouseColumn { private ClickhouseColumn keysColumn; - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexDescr) { + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { super(nRows, descr); - this.indexDescr = indexDescr; + this.indexDescr = descr.copyWithModifiers(false, false); } @Override protected void readStatePrefix(ClickhouseStreamDataSource in) { - //KeysSerializationVersion if (keysSerializationVersion == null) { if (in.readableBytes() >= 4) { keysSerializationVersion = in.readLongLE(); @@ -37,10 +36,10 @@ protected void readData(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { return; } - if (in.readableBytes() < 8 + 8) { - return; - } if (indexSize == null) { + if (in.readableBytes() < 8 + 8) { + return; + } serType = in.readLongLE(); indexSize = in.readLongLE(); } @@ -48,7 +47,7 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr.name(), indexDescr, indexSize.intValue()); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue()); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -103,6 +102,6 @@ private ClickhouseColumn uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(name, tmp, nRows); + return ClickhouseColumns.columnForSpec(tmp, nRows); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java new file mode 100644 index 0000000000..f00c3f5dbf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class PairedIterator implements Iterator> { + private final Iterator wrapped1; + private final Iterator wrapped2; + + private PairedIterator(Iterator wrapped1, Iterator wrapped2) { + this.wrapped1 = wrapped1; + this.wrapped2 = wrapped2; + } + + @Override + public boolean hasNext() { + return wrapped1.hasNext() && wrapped2.hasNext(); + } + + @Override + public Map.Entry next() { + T key = wrapped1.next(); + T val = wrapped2.next(); + return new AbstractMap.SimpleEntry<>(key, val); + } + + public static Iterator> of(List src) { + if (src.size() <= 1) { + return Collections.emptyIterator(); + } + + Iterator iter2 = src.iterator(); + iter2.next(); + return new PairedIterator<>(src.iterator(), iter2); + } + + public static void main(String[] args) { + Iterator> iter = PairedIterator.of(Arrays.asList("A", "B", "C")); + while (iter.hasNext()) { + Map.Entry n = iter.next(); + System.err.println(n.getKey() + "; " + n.getValue()); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java new file mode 100644 index 0000000000..6a53721df7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -0,0 +1,25 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class Triplet { + private final L left; + private final M middle; + private final R right; + + public Triplet(L left, M middle, R right) { + this.left = left; + this.middle = middle; + this.right = right; + } + + public L left() { + return left; + } + + public M middle() { + return middle; + } + + public R right() { + return right; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index bceea58939..5f9f907405 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -37,12 +37,16 @@ public static Iterable dataForTest() throws IOException { mapper.findAndRegisterModules(); List result = new ArrayList<>(); - int continuousOffset = 8; - for (String replayFile : Arrays.asList("/insert_prepare_with_compression.yaml", - "/with_max_block_size_and_2_datablocks_with_compression.yaml", - "/nullable_low_cardinality_with_compression.yaml", - "/nullable_low_cardinality_without_compression.yaml" - )) { + final int continuousOffset = 8; + List replayFiles = Arrays.asList( + "/insert_prepare_with_compression.yaml", + "/with_max_block_size_and_2_datablocks_with_compression.yaml", + "/nullable_low_cardinality_with_compression.yaml", + "/nullable_low_cardinality_without_compression.yaml", + "/select_array_of_nullable_string_without_compression.yaml", + "/select_empty_array_without_compression.yaml" + ); + for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); diff --git a/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml new file mode 100644 index 0000000000..dc4e98db59 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml @@ -0,0 +1,54 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAE1TRUxFQ1QgYXJyYXkoYXJyYXkoJ0En + LCAnQicpLCBhcnJheSgnQycsIE5VTEwpKSBBUyBSRVNPVVJDRSwgJ2FhJyBBUyBzdHJfY29sMgIA + AQAC/////wAAAA== +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWWHD01gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMhrUCwAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJGJl + YjVhM2MzLTFmYjYtNDRjMS04OTg1LTZhNTBmYWU5NGE5Ygl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmd9 + KGZyb20gMTI3LjAuMC4xOjQ1MzkyLCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUIGFy + cmF5KGFycmF5KCdBJywgJ0InKSwgYXJyYXkoJ0MnLCBOVUxMKSkgQVMgUkVTT1VSQ0UsICdhYScg + QVMgc3RyX2NvbDI= +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIACFJFU09VUkNFHkFycmF5KEFycmF5KE51bGxhYmxlKFN0cmluZykpKQhzdHJf + Y29sMgZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBCFJFU09VUkNFHkFycmF5KEFycmF5KE51bGxhYmxlKFN0cmluZykpKQIAAAAA + AAAAAgAAAAAAAAAEAAAAAAAAAAAAAAEBQQFCAUMACHN0cl9jb2wyBlN0cmluZwJhYQ== +# Packet 16 +peer1_4: !!binary | + BgEBkCMAAAE= +# Packet 18 +peer1_5: !!binary | + AwEBAAAA +# Packet 20 +peer1_6: !!binary | + AQABAAL/////AAAA +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWWHD01ghw9NYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzJF3AsAZNwLAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJGJlYjVhM2MzLTFmYjYtNDRjMS04OTg1LTZhNTBmYWU5NGE5YiRiZWI1YTNj + My0xZmI2LTQ0YzEtODk4NS02YTUwZmFlOTRhOWIJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdDUmVhZCAxIHJvd3MsIDEuMDAgQiBpbiAwLjAwMjA0MzMgc2VjLiwg + NDg5IHJvd3Mvc2VjLiwgNDg5LjQwIEIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1ZXJ5 + KTogMC4wMCBCLg== +# Packet 26 +peer1_9: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml new file mode 100644 index 0000000000..623565af0d --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml @@ -0,0 +1,51 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAChTRUxFQ1QgYXJyYXkoKSBBUyBuYW1l + LCAncjEnIGFzIGNvbF9uYW1lAgABAAL/////AAAA +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWVbQE1gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMpfaCwAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDNm + MzNlYmI0LWJkYTItNDcwNy04YjhhLTgwMzFiNTBmMzg0YQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmdY + KGZyb20gMTI3LjAuMC4xOjM3ODk4LCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUIGFy + cmF5KCkgQVMgbmFtZSwgJ3IxJyBhcyBjb2xfbmFtZQ== +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIABG5hbWUOQXJyYXkoTm90aGluZykIY29sX25hbWUGU3RyaW5n +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBBG5hbWUOQXJyYXkoTm90aGluZykAAAAAAAAAAAhjb2xfbmFtZQZTdHJpbmcC + cjE= +# Packet 16 +peer1_4: !!binary | + BgEB0EAAAAE= +# Packet 18 +peer1_5: !!binary | + AwEBAAAA +# Packet 20 +peer1_6: !!binary | + AQABAAL/////AAAA +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVbQE1gW0BNYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzIe4AsASuALAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDNmMzNlYmI0LWJkYTItNDcwNy04YjhhLTgwMzFiNTBmMzg0YSQzZjMzZWJi + NC1iZGEyLTQ3MDctOGI4YS04MDMxYjUwZjM4NGEJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdFUmVhZCAxIHJvd3MsIDEuMDAgQiBpbiAwLjAwMTM1ODQwMSBzZWMu + LCA3MzYgcm93cy9zZWMuLCA3MzYuMTYgQi9zZWMuJlBlYWsgbWVtb3J5IHVzYWdlIChmb3IgcXVl + cnkpOiAwLjAwIEIu +# Packet 26 +peer1_9: !!binary | + BQ== From 0d48b63656c1d9eef452ff32f85a4ec23beeae45 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 14 Mar 2021 17:23:16 +0300 Subject: [PATCH 021/176] skip bytes if element is NULL Signed-off-by: vladimir --- .../codec/ClickhouseStreamDataSource.java | 1 + .../codec/Lz4ClickhouseStreamDataSource.java | 5 ++++ .../codec/RawClickhouseStreamDataSource.java | 5 ++++ .../impl/codec/columns/ArrayColumn.java | 25 +++++++++---------- .../impl/codec/columns/DateTime64Column.java | 8 +++--- .../impl/codec/columns/DateTimeColumn.java | 4 ++- .../impl/codec/columns/Decimal128Column.java | 10 +++++--- .../impl/codec/columns/Decimal256Column.java | 10 +++++--- .../impl/codec/columns/Decimal32Column.java | 8 ++++-- .../impl/codec/columns/Decimal64Column.java | 8 ++++-- .../impl/codec/columns/FixedStringColumn.java | 13 +++++++--- .../codec/columns/LowCardinalityColumn.java | 9 ++++++- .../impl/codec/columns/StringColumn.java | 11 +++++--- .../impl/codec/columns/UInt128Column.java | 8 ++++-- .../impl/codec/columns/UInt16Column.java | 6 ++++- .../impl/codec/columns/UInt32Column.java | 6 ++++- .../impl/codec/columns/UInt64Column.java | 6 ++++- .../impl/codec/columns/UInt8Column.java | 6 ++++- .../impl/codec/columns/UUIDColumn.java | 10 +++++--- 19 files changed, 116 insertions(+), 43 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 5fcd69ae2e..5ef9c9c6c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -6,6 +6,7 @@ public interface ClickhouseStreamDataSource { void moreData(ByteBuf buf, ByteBufAllocator ctx); int readableBytes(); + void skipBytes(int length); String readPascalString(); Integer readULeb128(); Boolean readBoolean(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index ee29f6736f..4f8bb1e840 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -116,6 +116,11 @@ public int readableBytes() { return decompressedData.readableBytes(); } + @Override + public void skipBytes(int length) { + decompressedData.skipBytes(length); + } + @Override public String readPascalString() { return ByteBufUtils.readPascalString(decompressedData); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 48846b95e3..30eb05042e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -20,6 +20,11 @@ public int readableBytes() { return source.readableBytes(); } + @Override + public void skipBytes(int length) { + source.skipBytes(length); + } + @Override public String readPascalString() { return ByteBufUtils.readPascalString(source); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 1bf18205e3..7864003099 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -12,7 +12,7 @@ import java.util.Map; public class ArrayColumn extends ClickhouseColumn { - public static final Object[] EMPTY_ARRAY = new Object[0]; + private static final Object[] EMPTY_ARRAY = new Object[0]; private Deque, Integer>> graphLevelDeque; private List> slicesSeries; @@ -37,10 +37,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } - - if (!graphLevelDeque.isEmpty()) { - readSlices(in); - } + readSlices(in); Object[] data; if (nItems != 0 && nItems > 0) { if (curNestedColumn == null) { @@ -48,11 +45,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { } else { assert nItems == curNestedColumn.nRows; } - data = curNestedColumn.readItemsObjects(in); + curNestedColumn.itemsArray = curNestedColumn.readItemsObjects(in); } else { data = EMPTY_ARRAY; } - return resliceIntoArray(data); + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } private Object[] resliceIntoArray(Object[] data) { @@ -64,9 +61,9 @@ private Object[] resliceIntoArray(Object[] data) { int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); - int newSliseSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliseSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliseSz); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliceSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); newDataList[tmpSliceIdx] = resliced; ++tmpSliceIdx; } @@ -76,11 +73,13 @@ private Object[] resliceIntoArray(Object[] data) { } private void readSlices(ClickhouseStreamDataSource in) { + //TODO smagellan: simplify the loop while (!graphLevelDeque.isEmpty()) { Triplet, Integer> sliceState = graphLevelDeque.remove(); curNestedColumnDescr = sliceState.left().getNestedDescr(); - if (curDepth != sliceState.right().intValue()) { - curDepth = sliceState.right(); + Integer newDepth = sliceState.right(); + if (curDepth != newDepth.intValue()) { + curDepth = newDepth; slicesSeries.add(slices); //The last element in slice is index(number) of the last @@ -106,7 +105,7 @@ private void readSlices(ClickhouseStreamDataSource in) { if (sz > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); } - nestedSizes.add((int)sz); + nestedSizes.add((int) sz); } slices.addAll(nestedSizes); prev = size; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 7aa798e0aa..70516acb46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -25,12 +25,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { - BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); - long seconds = bi.divide(invTickSize).longValueExact(); - long nanos = bi.remainder(invTickSize).longValueExact(); if (nullsMap == null || !nullsMap.get(i)) { + BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index bea3c10be1..b28c66f70a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -22,10 +22,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { - long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); if (nullsMap == null || !nullsMap.get(i)) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index f79e4a6ef3..dec17fcdf6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -26,9 +26,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index c0ec433e62..4d926d168f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -26,9 +26,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 2722d3b46a..eb1884f66e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -23,8 +23,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigDecimal[] data = new BigDecimal[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { - int item = in.readIntLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + int item = in.readIntLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 99cb4790f1..548448edc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -23,8 +23,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigDecimal[] data = new BigDecimal[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { - long item = in.readLongLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + long item = in.readLongLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 66a1acac32..cd780add19 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -16,12 +16,19 @@ protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDe @Override protected Object[] readItems(ClickhouseStreamDataSource in) { + int elementSize = columnDescriptor.getElementSize(); while (elements.size() < nRows) { - if (in.readableBytes() < columnDescriptor.getElementSize()) { + if (in.readableBytes() < elementSize) { return null; } - byte[] stringBytes = new byte[columnDescriptor.getElementSize()]; - in.readBytes(stringBytes); + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[elementSize]; + in.readBytes(stringBytes); + } else { + in.skipBytes(elementSize); + stringBytes = null; + } elements.add(stringBytes); } Object[] ret = elements.toArray(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 25af66699b..19ad9c79f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -3,6 +3,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.util.BitSet; + public class LowCardinalityColumn extends ClickhouseColumn { private final ClickhouseNativeColumnDescriptor indexDescr; @@ -31,6 +33,11 @@ protected void readStatePrefix(ClickhouseStreamDataSource in) { } } + @Override + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + return null; + } + @Override protected void readData(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { @@ -90,7 +97,7 @@ public Object getElement(int rowIdx) { private ClickhouseColumn uintColumn(int code) { ClickhouseNativeColumnDescriptor tmp; String name = columnDescriptor.name(); - //TODO smagellan: introduce immutable column readers, reuse cached instances + //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances if (code == 0) { tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); } else if (code == 1) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index faa1b1e89e..15da7bd2aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,6 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; @@ -28,8 +27,14 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } - byte[] stringBytes = new byte[curStrLength]; - in.readBytes(stringBytes); + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + } else { + stringBytes = null; + in.skipBytes(curStrLength); + } elements.add(stringBytes); curStrLength = null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 8e62765edf..2ef59fec5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -20,8 +20,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigInteger[] data = new BigInteger[nRows]; byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 90393cdf64..ebe15289cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { short[] data = new short[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readShortLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readShortLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 1da0fdffbf..3b0d1bd2c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { int[] data = new int[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readIntLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readIntLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 65a7e52b3a..cca8b08d67 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -17,7 +17,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readLongLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readLongLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index b77ec19f81..9cf1d92bc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { byte[] data = new byte[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readByte(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readByte(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index c06e25b656..d812b91702 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -17,9 +17,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { UUID[] data = new UUID[nRows]; for (int i = 0; i < nRows; ++i) { - long mostSigBits = in.readLongLE(); - long leastSigBits = in.readLongLE(); - data[i] = new UUID(mostSigBits, leastSigBits); + if (nullsMap == null || !nullsMap.get(i)) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } From b898cf96f08ef8a925d280dfa5096ea9d94e1411 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 21:17:22 +0300 Subject: [PATCH 022/176] Added Date,Float32,Float64 columns; added ClickhouseNativeBinaryDataTypeDecodeTest Signed-off-by: vladimir --- .../clickhousenative/impl/BaseBlock.java | 2 - .../impl/ClickhouseNativeRow.java | 11 +- .../codec/ClickhouseStreamDataSource.java | 10 +- .../impl/codec/ExtendedQueryCommandCodec.java | 14 ++- .../codec/Lz4ClickhouseStreamDataSource.java | 14 ++- .../codec/RawClickhouseStreamDataSource.java | 14 ++- .../impl/codec/SimpleQueryCommandCodec.java | 2 + .../impl/codec/columns/ArrayColumn.java | 11 +- .../impl/codec/columns/ClickhouseColumn.java | 21 +++- .../impl/codec/columns/ClickhouseColumns.java | 15 +++ .../impl/codec/columns/ColumnSpec.java | 16 --- .../impl/codec/columns/DateColumn.java | 19 +++ .../impl/codec/columns/Decimal128Column.java | 5 +- .../impl/codec/columns/Decimal256Column.java | 5 +- .../impl/codec/columns/Decimal32Column.java | 5 +- .../impl/codec/columns/Decimal64Column.java | 5 +- .../impl/codec/columns/Float32Column.java | 29 +++++ .../impl/codec/columns/Float64Column.java | 29 +++++ .../impl/codec/columns/UInt16Column.java | 5 + .../impl/codec/columns/UInt32Column.java | 5 + .../impl/codec/columns/UInt64Column.java | 5 + .../impl/codec/columns/UInt8Column.java | 5 + ...ckhouseNativeBinaryDataTypeDecodeTest.java | 116 ++++++++++++++++++ .../tck/ClientConfig.java | 36 ++++++ .../src/test/resources/init.sql | 42 +++++++ .../tck/BinaryDataTypeDecodeTestBase.java | 4 +- 26 files changed, 393 insertions(+), 52 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/init.sql diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 5f25466814..a6712e8105 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -2,9 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ColumnSpec; -import java.util.Collection; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index 526445601c..8be95d677d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -6,6 +6,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.sql.JDBCType; import java.util.List; public class ClickhouseNativeRow implements Row { @@ -34,7 +35,13 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { List data = block.getData(); - return data.get(columnIndex).getElement(rowNo); + ClickhouseColumn column = data.get(columnIndex); + Object columnData = column.getElement(rowNo); + if (columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { + return new String((byte[]) columnData, stringCharset); + } else { + return columnData; + } } @Override @@ -60,7 +67,7 @@ public Tuple addValue(Object value) { @Override public int size() { - return block.numRows(); + return block.numColumns(); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 5ef9c9c6c2..dfb768e1b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -9,13 +9,15 @@ public interface ClickhouseStreamDataSource { void skipBytes(int length); String readPascalString(); Integer readULeb128(); - Boolean readBoolean(); - Integer readIntLE(); + boolean readBoolean(); + int readIntLE(); + long readLongLE(); + short readShortLE(); + float readFloatLE(); + double readDoubleLE(); ByteBuf readSlice(int nBytes); void readBytes(byte[] dst); byte readByte(); - long readLongLE(); - short readShortLE(); String hexdump(); default void finish(){ } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index eab456fc70..eb769ab140 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -15,7 +15,7 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn, true); + super(cmd, conn, cmd.fetch() > 0); } @Override @@ -34,12 +34,14 @@ protected Map settings() { String fetchSize = Integer.toString(ecmd().fetch()); Map defaultSettings = super.settings(); String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); - if (!Objects.equals(defaultFetchSize, fetchSize)) { - if (LOG.isWarnEnabled() && defaultFetchSize != null) { - LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + if (!"0".equals(fetchSize)) { + if (!Objects.equals(defaultFetchSize, fetchSize)) { + if (LOG.isWarnEnabled() && defaultFetchSize != null) { + LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + } + defaultSettings = new HashMap<>(defaultSettings); + defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); } - defaultSettings = new HashMap<>(defaultSettings); - defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); } return defaultSettings; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 4f8bb1e840..1177e27388 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -132,12 +132,12 @@ public Integer readULeb128() { } @Override - public Boolean readBoolean() { + public boolean readBoolean() { return decompressedData.readBoolean(); } @Override - public Integer readIntLE() { + public int readIntLE() { return decompressedData.readIntLE(); } @@ -166,6 +166,16 @@ public short readShortLE() { return decompressedData.readShortLE(); } + @Override + public float readFloatLE() { + return decompressedData.readFloatLE(); + } + + @Override + public double readDoubleLE() { + return decompressedData.readDoubleLE(); + } + @Override public String hexdump() { return ByteBufUtil.hexDump(decompressedData); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 30eb05042e..e9cd54fdfc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -36,12 +36,12 @@ public Integer readULeb128() { } @Override - public Boolean readBoolean() { + public boolean readBoolean() { return source.readBoolean(); } @Override - public Integer readIntLE() { + public int readIntLE() { return source.readIntLE(); } @@ -70,6 +70,16 @@ public short readShortLE() { return source.readShortLE(); } + @Override + public float readFloatLE() { + return source.readFloatLE(); + } + + @Override + public double readDoubleLE() { + return source.readDoubleLE(); + } + @Override public String hexdump() { return source != null diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index d65be3763d..196844d19f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -75,6 +75,7 @@ private ClickhouseStreamDataSink dataSink(ByteBuf buf) { } private void sendQuery(String query, ByteBuf buf) { + LOG.info("running query: " + query); ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); //query id ByteBufUtils.writePascalString("", buf); @@ -148,6 +149,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { + //TODO smagellan: handle connection errors (e.g. table does not exist, wrong password, no column with given name, etc) String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 7864003099..2bb9d9adba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -38,18 +38,16 @@ protected Object readItems(ClickhouseStreamDataSource in) { nItems = 0; } readSlices(in); - Object[] data; - if (nItems != 0 && nItems > 0) { + if (nItems > 0) { if (curNestedColumn == null) { curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); } else { assert nItems == curNestedColumn.nRows; } - curNestedColumn.itemsArray = curNestedColumn.readItemsObjects(in); - } else { - data = EMPTY_ARRAY; + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in); + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + return resliceIntoArray(EMPTY_ARRAY); } private Object[] resliceIntoArray(Object[] data) { @@ -74,6 +72,7 @@ private Object[] resliceIntoArray(Object[] data) { private void readSlices(ClickhouseStreamDataSource in) { //TODO smagellan: simplify the loop + //TODO smagellan: handle fragmented reads while (!graphLevelDeque.isEmpty()) { Triplet, Integer> sliceState = graphLevelDeque.remove(); curNestedColumnDescr = sliceState.left().getNestedDescr(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 4e89e744e1..e9f8555bd1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -16,6 +16,10 @@ protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDes this.nRows = nRows; } + public ClickhouseNativeColumnDescriptor columnDescriptor() { + return columnDescriptor; + } + public void readColumn(ClickhouseStreamDataSource in){ readStatePrefix(in); readData(in); @@ -48,8 +52,21 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsObjects(ClickhouseStreamDataSource in) { - return (Object[]) readItems(in); + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in) { + itemsArray = readItems(in); + return asObjectsArray(); + } + + protected Object[] asObjectsArray() { + return (Object[]) itemsArray; + } + + protected Object[] asObjectsArrayWithGetElement() { + Object[] ret = new Object[nRows]; + for (int i = 0; i < nRows; ++i) { + ret[i] = getElement(i); + } + return ret; } protected abstract Object readItems(ClickhouseStreamDataSource in); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 11492be340..e05b677814 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -100,6 +100,15 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if ("Nothing".equals(spec)) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Float32".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32Column.ELEMENT_SIZE, + JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Float64".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64Column.ELEMENT_SIZE, + JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Date".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, + JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -173,6 +182,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(nRows, descr); } + } else if (jdbcType == JDBCType.REAL) { + return new Float32Column(nRows, descr); + } else if (jdbcType == JDBCType.DOUBLE) { + return new Float64Column(nRows, descr); + } else if (jdbcType == JDBCType.DATE) { + return new DateColumn(nRows, descr); } else if (jdbcType == JDBCType.OTHER) { if (descr.getNestedType().equals("UUID")) { return new UUIDColumn(nRows, descr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java deleted file mode 100644 index a1c22beea0..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -public enum ColumnSpec { - UInt32(4), - String(null); - - private final Integer elementSize; - - ColumnSpec(Integer elementSize) { - this.elementSize = elementSize; - } - - public Integer elSize() { - return elementSize; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java new file mode 100644 index 0000000000..60c5104a18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -0,0 +1,19 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.LocalDate; + +public class DateColumn extends UInt16Column { + public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + + public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx) { + Integer offset = (Integer) super.getElementInternal(rowIdx); + return MIN_DATE.plusDays(offset); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index dec17fcdf6..29776ae004 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -3,6 +3,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -22,14 +23,14 @@ protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 4d926d168f..8efda94298 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -3,6 +3,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -22,14 +23,14 @@ protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index eb1884f66e..5201c6642b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -20,12 +21,12 @@ protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { int item = in.readIntLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 548448edc7..52516e330c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -20,12 +21,12 @@ protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { long item = in.readLongLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java new file mode 100644 index 0000000000..f8d0451ae7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + protected Float32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + float[] data = new float[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readFloatLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java new file mode 100644 index 0000000000..76d0b31343 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + + protected Float64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + double[] data = new double[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readDoubleLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index ebe15289cc..586e21a9f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 3b0d1bd2c3..ce5383ff7f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index cca8b08d67..313fb8fbaf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -37,6 +37,11 @@ protected Object getElementInternal(int rowIdx) { return element; } + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } + static BigInteger unsignedBi(long l) { return new BigInteger(1, new byte[] { (byte) (l >>> 56 & 0xFF), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 9cf1d92bc7..02893d1fcd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java new file mode 100644 index 0000000000..e88cfce956 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -0,0 +1,116 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.tck.BinaryDataTypeDecodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.sql.JDBCType; +import java.time.LocalDate; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + public ClickhouseNativeBinaryDataTypeDecodeTest() { + NUMERIC_TYPE = JDBCType.DECIMAL; + } + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Test + public void testBoolean(TestContext ctx) { + testDecodeGeneric(ctx, "test_boolean", Byte.class, JDBCType.TINYINT, (byte) 1); + } + + @Test + public void testSelectAll(TestContext ctx) { + //no time support + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery("SELECT " + + "test_int_2," + + "test_int_4," + + "test_int_8," + + "test_float_4," + + "test_float_8," + + "test_numeric," + + "test_decimal," + + "test_boolean," + + "test_char," + + "test_varchar," + + "test_date " + + "from basicdatatype where id = 1").execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(11, row.size()); + ctx.assertEquals((short) 32767, row.getShort(0)); + ctx.assertEquals(Short.valueOf((short) 32767), row.getShort("test_int_2")); + ctx.assertEquals(2147483647, row.getInteger(1)); + ctx.assertEquals(2147483647, row.getInteger("test_int_4")); + ctx.assertEquals(9223372036854775807L, row.getLong(2)); + ctx.assertEquals(9223372036854775807L, row.getLong("test_int_8")); + ctx.assertEquals(3.40282E38F, row.getFloat(3)); + ctx.assertEquals(3.40282E38F, row.getFloat("test_float_4")); + ctx.assertEquals(1.7976931348623157E308, row.getDouble(4)); + ctx.assertEquals(1.7976931348623157E308, row.getDouble("test_float_8")); + ctx.assertEquals(Numeric.create(999.99), row.get(Numeric.class, 5)); + ctx.assertEquals(Numeric.create(999.99), row.getValue("test_numeric")); + ctx.assertEquals(Numeric.create(12345), row.get(Numeric.class, 6)); + ctx.assertEquals(Numeric.create(12345), row.getValue("test_decimal")); + ctx.assertEquals((byte)1, row.getValue(7)); + ctx.assertEquals((byte)1, row.getValue("test_boolean")); + ctx.assertEquals("testchar", row.getString(8)); + ctx.assertEquals("testchar", row.getString("test_char")); + ctx.assertEquals("testvarchar", row.getString(9)); + ctx.assertEquals("testvarchar", row.getString("test_varchar")); + ctx.assertEquals(LocalDate.parse("2019-01-01"), row.getValue(10)); + ctx.assertEquals(LocalDate.parse("2019-01-01"), row.getValue("test_date")); + conn.close(); + })); + })); + } + + @Test + public void testNullValues(TestContext ctx) { + //no time support + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery("SELECT " + + "test_int_2," + + "test_int_4," + + "test_int_8," + + "test_float_4," + + "test_float_8," + + "test_numeric," + + "test_decimal," + + "test_boolean," + + "test_char," + + "test_varchar," + + "test_date " + + "from basicdatatype where id = 3").execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(11, row.size()); + for (int i = 0; i < 11; i++) { + ctx.assertNull(row.getValue(i)); + } + conn.close(); + })); + })); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //No time support + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java new file mode 100644 index 0000000000..ccbb73b10d --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -0,0 +1,36 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Vertx; +import io.vertx.sqlclient.SqlClient; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.Connector; + +public enum ClientConfig { + CONNECT() { + @Override + Connector connect(Vertx vertx, SqlConnectOptions options) { + return new Connector() { + @Override + public void connect(Handler> handler) { + ClickhouseNativeConnection.connect(vertx, new ClickhouseNativeConnectOptions(options.toJson()), ar -> { + if (ar.succeeded()) { + handler.handle(Future.succeededFuture(ar.result())); + } else { + handler.handle(Future.failedFuture(ar.cause())); + } + }); + } + @Override + public void close() { + } + }; + } + }; + + abstract Connector connect(Vertx vertx, SqlConnectOptions options); +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql new file mode 100644 index 0000000000..b9f03e748a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -0,0 +1,42 @@ + +# USE testschema; +# datatype testing table +-- basic data type table -- +-- used by TCK +DROP TABLE IF EXISTS basicdatatype; +CREATE TABLE basicdatatype +( + id Int16, + test_int_2 Nullable(Int16), + test_int_4 Nullable(Int32), + test_int_8 Nullable(Int64), + test_float_4 Nullable(FLOAT), + test_float_8 Nullable(DOUBLE), + test_numeric Nullable(DECIMAL64(2)), + test_decimal Nullable(DECIMAL64(0)), + test_boolean Nullable(BOOLEAN), + test_char Nullable(FixedString(8)), + test_varchar Nullable(String(20)), + test_date Nullable(DATE) +) engine = MergeTree() + ORDER BY (id); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, + test_date) +VALUES (1, 32767, 2147483647, 9223372036854775807, + 3.40282E38, 1.7976931348623157E308, 999.99, 12345, + 1, 'testchar', 'testvarchar', + '2019-01-01'); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, + test_date) +VALUES (2, 32767, 2147483647, 9223372036854775807, + 3.40282E38, 1.7976931348623157E308, 999.99, 12345, + 1, 'testchar', 'testvarchar', + '2019-01-01'); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, test_date) +VALUES (3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java index 02b1d26b22..c8f626047a 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java @@ -184,8 +184,8 @@ public void testSelectAll(TestContext ctx) { ctx.assertEquals(LocalTime.parse("18:45:02"), row.getValue("test_time")); conn.close(); })); - })); - } + })); + } @Test public void testToJsonObject(TestContext ctx) { From 0004994305c815517a624ce81233c0ac2a88cf34 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 22:44:03 +0300 Subject: [PATCH 023/176] added ClickhouseNativeCollectorTest Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 4 ---- .../tck/ClickhouseNativeCollectorTest.java | 18 ++++++++++++++++ .../src/test/resources/init.sql | 21 +++++++++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 196844d19f..6b12c5336a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -175,13 +175,9 @@ private void notifyOperationUpdate(boolean hasMoreResults) { if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); - if (failure != null) { - failure = new RuntimeException(failure); - } T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java new file mode 100644 index 0000000000..8b38533fbd --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -0,0 +1,18 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.CollectorTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeCollectorTest extends CollectorTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index b9f03e748a..680c881d90 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -10,8 +10,8 @@ CREATE TABLE basicdatatype test_int_2 Nullable(Int16), test_int_4 Nullable(Int32), test_int_8 Nullable(Int64), - test_float_4 Nullable(FLOAT), - test_float_8 Nullable(DOUBLE), + test_float_4 Nullable(Float32), + test_float_8 Nullable(Float64), test_numeric Nullable(DECIMAL64(2)), test_decimal Nullable(DECIMAL64(0)), test_boolean Nullable(BOOLEAN), @@ -40,3 +40,20 @@ INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_float_4, test_float_8, test_numeric, test_decimal, test_boolean, test_char, test_varchar, test_date) VALUES (3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- Collector API testing -- +-- used by TCK +DROP TABLE IF EXISTS collector_test; +CREATE TABLE collector_test +( + id Int16, + test_int_2 Int16, + test_int_4 Int32, + test_int_8 Int64, + test_float Float32, + test_double Float64, + test_varchar VARCHAR(20) +) engine = MergeTree() + ORDER BY (id); +INSERT INTO collector_test VALUES (1, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'HELLO,WORLD'); +INSERT INTO collector_test VALUES (2, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'hello,world'); From 331072a9ba2631294bff92f01c3544bfb3ad0494 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 23:48:08 +0300 Subject: [PATCH 024/176] added ClickhouseNativeConnectionTest Signed-off-by: vladimir --- .../ClickhouseNativeDatabaseMetadata.java | 8 ++-- .../impl/codec/ClickhouseNativeEncoder.java | 4 ++ .../codec/CloseConnectionCommandCodec.java | 7 +++- .../impl/codec/SimpleQueryCommandCodec.java | 18 +++++++-- .../tck/ClickhouseNativeConnectionTest.java | 34 +++++++++++++++++ .../src/test/resources/init.sql | 37 ++++++++++++++++++- 6 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 6e6e089c5d..7c85d9c632 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -34,22 +34,22 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, @Override public String productName() { - return null; + return productName; } @Override public String fullVersion() { - return null; + return fullVersion; } @Override public int majorVersion() { - return 0; + return major; } @Override public int minorVersion() { - return 0; + return minor; } public int getRevision() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 57251dd31d..db836de263 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,11 +4,14 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); private final ArrayDeque> inflight; private final ClickhouseNativeSocketConnection conn; @@ -44,6 +47,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) } void write(CommandBase cmd) { + LOG.info("got command: " + cmd.getClass()); ClickhouseNativeCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { ClickhouseNativeCommandCodec c = inflight.poll(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index f7eebd8260..1d3b4f5da1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,7 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.socket.SocketChannel; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CloseConnectionCommand; @@ -21,6 +23,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { public void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("closing channel"); - encoder.chctx().channel().close(); + //encoder.chctx().channel().close(); + ChannelHandlerContext ctx = encoder.chctx(); + SocketChannel channel = (SocketChannel) ctx.channel(); + ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(v -> channel.shutdownOutput()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 6b12c5336a..e4ab0d4654 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -145,7 +145,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; rowResultDecoder.generateRows(block); if (requireUpdates && block.numRows() > 0) { - notifyOperationUpdate(true); + notifyOperationUpdate(true, null); } ++dataPacketNo; } else { @@ -153,12 +153,14 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { - LOG.error("unknown packet type", (Throwable) packet); + Throwable t = (Throwable) packet; + LOG.error("unknown packet type", t); + notifyOperationUpdate(false, t); } //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { - notifyOperationUpdate(false); + notifyOperationUpdate(false, null); packetReader = null; } } @@ -170,7 +172,7 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { return new ClickhouseNativeRowDesc(columnNames, columnTypes); } - private void notifyOperationUpdate(boolean hasMoreResults) { + private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); @@ -180,6 +182,14 @@ private void notifyOperationUpdate(boolean hasMoreResults) { rowResultDecoder.reset(); cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); } + if (t != null) { + if (failure == null) { + failure = t; + } else { + failure = new RuntimeException(failure); + failure.addSuppressed(t); + } + } CommandResponse response; if (failure == null) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java new file mode 100644 index 0000000000..19c9009c61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -0,0 +1,34 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.spi.DatabaseMetadata; +import io.vertx.sqlclient.tck.ConnectionTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeConnectionTest extends ConnectionTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + public void setUp() throws Exception { + super.setUp(); + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } + + @Override + public void tearDown(TestContext ctx) { + connector.close(); + super.tearDown(ctx); + } + + @Override + protected void validateDatabaseMetaData(TestContext ctx, DatabaseMetadata md) { + ctx.assertTrue(md.majorVersion() >= 20); + ctx.assertTrue(md.productName().toLowerCase().contains("ClickHouse".toLowerCase())); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 680c881d90..6bce8a30f3 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -1,6 +1,39 @@ +-- USE testschema; +-- datatype testing table + +-- immutable table for select query testing -- +-- used by TCK +DROP TABLE IF EXISTS immutable; +CREATE TABLE immutable +( + id Int32, + message varchar(2048) +) engine = MergeTree() + ORDER BY (id); + +INSERT INTO immutable (id, message) VALUES (1, 'fortune: No such file or directory'); +INSERT INTO immutable (id, message) VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.'); +INSERT INTO immutable (id, message) VALUES (3, 'After enough decimal places, nobody gives a damn.'); +INSERT INTO immutable (id, message) VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1'); +INSERT INTO immutable (id, message) VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.'); +INSERT INTO immutable (id, message) VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen'); +INSERT INTO immutable (id, message) VALUES (7, 'Any program that runs right is obsolete.'); +INSERT INTO immutable (id, message) VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth'); +INSERT INTO immutable (id, message) VALUES (9, 'Feature: A bug with seniority.'); +INSERT INTO immutable (id, message) VALUES (10, 'Computers make very fast, very accurate mistakes.'); +INSERT INTO immutable (id, message) VALUES (11, ''); +INSERT INTO immutable (id, message) VALUES (12, 'フレームワークのベンチマーク'); + +-- mutable for insert,update,delete query testing -- +-- used by TCK +DROP TABLE IF EXISTS mutable; +CREATE TABLE mutable +( + id Int32, + val varchar(2048) +) engine = MergeTree() + ORDER BY (id); -# USE testschema; -# datatype testing table -- basic data type table -- -- used by TCK DROP TABLE IF EXISTS basicdatatype; From 010cfe23b86954d8d8e878bce02b5f5b8aed98d7 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 16 Mar 2021 18:37:54 +0300 Subject: [PATCH 025/176] added ClickhouseNativeConnectionAutoRetryTest Signed-off-by: vladimir --- .../impl/codec/ClickhouseNativeCodec.java | 23 ++++++++++- ...ickhouseNativeConnectionAutoRetryTest.java | 38 +++++++++++++++++++ .../tck/ClientConfig.java | 25 ++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index c594165bb0..ea1fd6deee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -3,10 +3,14 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.CommandResponse; import java.util.ArrayDeque; +import java.util.Iterator; public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); @@ -22,8 +26,23 @@ public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - //TODO smagellan: maybe remove method - LOG.error("caught exception", cause); + fail(ctx, cause); super.exceptionCaught(ctx, cause); } + + private void fail(ChannelHandlerContext ctx, Throwable cause) { + for (Iterator> it = inflight.iterator(); it.hasNext();) { + ClickhouseNativeCommandCodec codec = it.next(); + it.remove(); + CommandResponse failure = CommandResponse.failure(cause); + failure.cmd = (CommandBase) codec.cmd; + ctx.fireChannelRead(failure); + } + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + fail(ctx, new NoStackTraceThrowable("Fail to read any response from the server, the underlying connection might get lost unexpectedly.")); + super.channelInactive(ctx); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java new file mode 100644 index 0000000000..c639df7e31 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -0,0 +1,38 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.ConnectionAutoRetryTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + public void setUp() throws Exception { + super.setUp(); + options = rule.options(); + } + + @Override + public void tearDown(TestContext ctx) { + connectionConnector.close(); + poolConnector.close(); + super.tearDown(ctx); + } + + @Override + protected void initialConnector(int proxyPort) { + SqlConnectOptions proxyOptions = new ClickhouseNativeConnectOptions(options); + proxyOptions.setPort(proxyPort); + proxyOptions.setHost("localhost"); + connectionConnector = ClientConfig.CONNECT.connect(vertx, proxyOptions); + poolConnector = ClientConfig.POOLED.connect(vertx, proxyOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index ccbb73b10d..280a9b2bb5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -2,10 +2,12 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; +import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlClient; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.Connector; @@ -30,6 +32,29 @@ public void close() { } }; } + }, + + POOLED() { + @Override + Connector connect(Vertx vertx, SqlConnectOptions options) { + ClickhouseNativePool pool = ClickhouseNativePool.pool(vertx, new ClickhouseNativeConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); + return new Connector() { + @Override + public void connect(Handler> handler) { + pool.getConnection(ar -> { + if (ar.succeeded()) { + handler.handle(Future.succeededFuture(ar.result())); + } else { + handler.handle(Future.failedFuture(ar.cause())); + } + }); + } + @Override + public void close() { + pool.close(); + } + }; + } }; abstract Connector connect(Vertx vertx, SqlConnectOptions options); From 98aaaa43e3cbf781b5c52dc6a9207928e9229346 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 16 Mar 2021 23:14:27 +0300 Subject: [PATCH 026/176] added ClickhouseNativeBinaryDataTypeEncodeTest and ClickhouseNativeDriverTest; added SqlClientExamples to make gen utilities happy Signed-off-by: vladimir --- ...ickhouseNativeConnectOptionsConverter.java | 32 +++ .../main/java/examples/SqlClientExamples.java | 272 ++++++++++++++++++ ...ickhouseNativeConnectOptionsConverter.java | 15 - .../impl/codec/ExtendedQueryCommandCodec.java | 51 ++++ .../impl/codec/SimpleQueryCommandCodec.java | 6 +- .../clickhousenative/package-info.java | 4 + ...ckhouseNativeBinaryDataTypeEncodeTest.java | 149 ++++++++++ .../tck/ClickhouseNativeDriverTest.java | 21 ++ 8 files changed, 534 insertions(+), 16 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java new file mode 100644 index 0000000000..1c910b6ffd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative; + +import io.vertx.core.json.JsonObject; +import io.vertx.core.json.JsonArray; +import io.vertx.core.json.impl.JsonUtil; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +/** + * Converter and mapper for {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions} original class using Vert.x codegen. + */ +public class ClickhouseNativeConnectOptionsConverter { + + + public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + for (java.util.Map.Entry member : json) { + switch (member.getKey()) { + case "pipeliningLimit": + break; + } + } + } + + public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + toJson(obj, json.getMap()); + } + + public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + json.put("pipeliningLimit", obj.getPipeliningLimit()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java new file mode 100644 index 0000000000..6674bc7948 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -0,0 +1,272 @@ +package examples; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.core.Vertx; +import io.vertx.core.tracing.TracingPolicy; +import io.vertx.docgen.Source; +import io.vertx.sqlclient.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Source +//TODO smagellan: inspect examples +public class SqlClientExamples { + public void queries01(SqlClient client) { + client + .query("SELECT * FROM users WHERE id='julien'") + .execute(ar -> { + if (ar.succeeded()) { + RowSet result = ar.result(); + System.out.println("Got " + result.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + + public void queries02(SqlClient client) { + client + .preparedQuery("SELECT * FROM users WHERE id=?") + .execute(Tuple.of("julien"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println("Got " + rows.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries03(SqlClient client) { + client + .preparedQuery("SELECT first_name, last_name FROM users") + .execute(ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + for (Row row : rows) { + System.out.println("User " + row.getString(0) + " " + row.getString(1)); + } + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries04(SqlClient client) { + client + .preparedQuery("INSERT INTO users (first_name, last_name) VALUES (?, ?)") + .execute(Tuple.of("Julien", "Viet"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println(rows.rowCount()); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries05(Row row) { + System.out.println("User " + row.getString(0) + " " + row.getString(1)); + } + + public void queries06(Row row) { + System.out.println("User " + row.getString("first_name") + " " + row.getString("last_name")); + } + + public void queries07(Row row) { + + String firstName = row.getString("first_name"); + Boolean male = row.getBoolean("male"); + Integer age = row.getInteger("age"); + + // ... + + } + + public void queries08(SqlClient client) { + + // Add commands to the batch + List batch = new ArrayList<>(); + batch.add(Tuple.of("julien", "Julien Viet")); + batch.add(Tuple.of("emad", "Emad Alblueshi")); + + // Execute the prepared batch + client + .preparedQuery("INSERT INTO USERS (id, name) VALUES (?, ?)") + .executeBatch(batch, res -> { + if (res.succeeded()) { + + // Process rows + RowSet rows = res.result(); + } else { + System.out.println("Batch failed " + res.cause()); + } + }); + } + + public void queries09(SqlClient client, SqlConnectOptions connectOptions) { + + // Enable prepare statements caching + connectOptions.setCachePreparedStatements(true); + client + .preparedQuery("SELECT * FROM users WHERE id = ?") + .execute(Tuple.of("julien"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println("Got " + rows.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries10(SqlConnection sqlConnection) { + sqlConnection + .prepare("SELECT * FROM users WHERE id = ?", ar -> { + if (ar.succeeded()) { + PreparedStatement preparedStatement = ar.result(); + preparedStatement.query() + .execute(Tuple.of("julien"), ar2 -> { + if (ar2.succeeded()) { + RowSet rows = ar2.result(); + System.out.println("Got " + rows.size() + " rows "); + preparedStatement.close(); + } else { + System.out.println("Failure: " + ar2.cause().getMessage()); + } + }); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void usingConnections01(Vertx vertx, Pool pool) { + + pool + .getConnection() + .compose(connection -> + connection + .preparedQuery("INSERT INTO Users (first_name,last_name) VALUES (?, ?)") + .executeBatch(Arrays.asList( + Tuple.of("Julien", "Viet"), + Tuple.of("Emad", "Alblueshi") + )) + .compose(res -> connection + // Do something with rows + .query("SELECT COUNT(*) FROM Users") + .execute() + .map(rows -> rows.iterator().next().getInteger(0))) + // Return the connection to the pool + .eventually(v -> connection.close()) + ).onSuccess(count -> { + System.out.println("Insert users, now the number of users is " + count); + }); + } + + public void usingConnections02(SqlConnection connection) { + connection + .prepare("SELECT * FROM users WHERE first_name LIKE ?") + .compose(pq -> + pq.query() + .execute(Tuple.of("Julien")) + .eventually(v -> pq.close()) + ).onSuccess(rows -> { + // All rows + }); + } + + public void usingConnections03(Pool pool) { + pool.withConnection(connection -> + connection + .preparedQuery("INSERT INTO Users (first_name,last_name) VALUES (?, ?)") + .executeBatch(Arrays.asList( + Tuple.of("Julien", "Viet"), + Tuple.of("Emad", "Alblueshi") + )) + .compose(res -> connection + // Do something with rows + .query("SELECT COUNT(*) FROM Users") + .execute() + .map(rows -> rows.iterator().next().getInteger(0))) + ).onSuccess(count -> { + System.out.println("Insert users, now the number of users is " + count); + }); + } + + public void transaction01(Pool pool) { + //transactions are not supported + } + + public void transaction02(Transaction tx) { + //transactions are not supported + } + + public void transaction03(Pool pool) { + //transactions are not supported + } + + public void usingCursors01(SqlConnection connection) { + connection.prepare("SELECT * FROM users WHERE age > ?", ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + + // Create a cursor + Cursor cursor = pq.cursor(Tuple.of(18)); + + // Read 50 rows + cursor.read(50, ar2 -> { + if (ar2.succeeded()) { + RowSet rows = ar2.result(); + + // Check for more ? + if (cursor.hasMore()) { + // Repeat the process... + } else { + // No more rows - close the cursor + cursor.close(); + } + } + }); + } + }); + } + + public void usingCursors02(Cursor cursor) { + cursor.read(50, ar2 -> { + if (ar2.succeeded()) { + // Close the cursor + cursor.close(); + } + }); + } + + public void usingCursors03(SqlConnection connection) { + connection.prepare("SELECT * FROM users WHERE age > ?", ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + + // Fetch 50 rows at a time + RowStream stream = pq.createStream(50, Tuple.of(18)); + + // Use the stream + stream.exceptionHandler(err -> { + System.out.println("Error: " + err.getMessage()); + }); + stream.endHandler(v -> { + System.out.println("End of stream"); + }); + stream.handler(row -> { + System.out.println("User: " + row.getString("last_name")); + }); + } + }); + } + + public void tracing01(ClickhouseNativeConnectOptions options) { + options.setTracingPolicy(TracingPolicy.ALWAYS); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java deleted file mode 100644 index e085fa9144..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.vertx.clickhouse.clickhousenative; - -import io.vertx.core.json.JsonObject; - -public class ClickhouseNativeConnectOptionsConverter { - public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { - } - - public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { - toJson(obj, json.getMap()); - } - - public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index eb769ab140..b244a514b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -3,8 +3,10 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; +import java.time.temporal.TemporalAccessor; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -18,6 +20,55 @@ public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSo super(cmd, conn, cmd.fetch() > 0); } + @Override + protected String sql() { + ExtendedQueryCommand ecmd = ecmd(); + return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); + } + + private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { + StringBuilder bldr = new StringBuilder(); + if (paramsList.size() == 0) { + return parametrizedSql; + } + int prevIdx = 0; + int newIdx; + while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { + if (newIdx - 1 == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { + int paramIdxStartPos = newIdx + 1; + int paramIdxEndPos = paramIdxStartPos; + while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { + ++paramIdxEndPos; + } + if (paramIdxStartPos == paramIdxEndPos) { + throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); + } + int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; + Object paramValue = paramsList.getValue(paramIndex); + bldr.append(parametrizedSql, prevIdx, newIdx); + Class paramClass = paramValue == null ? null : paramValue.getClass(); + if (paramClass != null) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || TemporalAccessor.class.isAssignableFrom(paramClass)) { + bldr.append('\'').append(paramValue).append('\''); + } else if (paramClass == Double.class) { + //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure + bldr.append(String.format("CAST('%s', 'Float64')", ((Double)paramValue).toString())); + } else if (paramClass == Float.class) { + bldr.append(String.format("CAST('%s', 'Float32')", ((Float)paramValue).toString())); + } else { + bldr.append(paramValue); + } + } else { + bldr.append(paramValue); + } + newIdx = paramIdxEndPos; + } + prevIdx = newIdx; + } + bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); + return bldr.toString(); + } + @Override void encode(ClickhouseNativeEncoder encoder) { String ourCursorId = ecmd().cursorId(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index e4ab0d4654..83ca3e66bc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -39,12 +39,16 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); if (!isSuspended()) { ByteBuf buf = allocateBuffer(); - sendQuery(cmd.sql(), buf); + sendQuery(sql(), buf); sendExternalTables(buf, Collections.emptyList()); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); } } + protected String sql() { + return cmd.sql(); + } + private void sendExternalTables(ByteBuf buf, Collection blocks) { ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java new file mode 100644 index 0000000000..fe9ea8e26d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -0,0 +1,4 @@ +@ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") +package io.vertx.clickhouse.clickhousenative; + +import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java new file mode 100644 index 0000000000..6e52c76c12 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -0,0 +1,149 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.tck.BinaryDataTypeEncodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.function.BiFunction; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeBinaryDataTypeEncodeTest.class); + + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //time is not supported + } + + @Test + public void testBoolean(TestContext ctx) { + testEncodeGeneric(ctx, "test_boolean", Byte.class, null, (byte)0); + } + + @Test + public void testDouble(TestContext ctx) { + //Double.MIN_VALUE is too small here + testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); + } + + @Test + public void testNullValues(TestContext ctx) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE" + + " test_int_2 = ", + ", test_int_4 = ", + ", test_int_8 = ", + ", test_float_4 = ", + ", test_float_8 = ", + ", test_numeric = ", + ", test_decimal = ", + ", test_boolean = ", + ", test_char = ", + ", test_varchar = ", + ", test_date = ", + " WHERE id = 2")) + .execute(Tuple.tuple() + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null), + ctx.asyncAssertSuccess(updateResult -> { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + LOG.error(e); + } + conn + .preparedQuery("SELECT * FROM basicdatatype WHERE id = 2") + .execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(12, row.size()); + ctx.assertEquals(2, row.getInteger(0)); + for (int i = 1; i < 12; i++) { + ctx.assertNull(row.getValue(i)); + } + conn.close(); + })); + })); + })); + } + + @Override + protected void testEncodeGeneric(TestContext ctx, + String columnName, + Class clazz, + BiFunction getter, + T expected) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) + .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + LOG.error(e); + } + conn + .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") + .execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(1, row.size()); + ctx.assertEquals(expected, row.getValue(0)); + ctx.assertEquals(expected, row.getValue(columnName)); + if (getter != null) { + ctx.assertEquals(expected, getter.apply(row, columnName)); + } +// ctx.assertEquals(expected, row.get(clazz, 0)); +// ColumnChecker.checkColumn(0, columnName) +// .returns(Tuple::getValue, Row::getValue, expected) +// .returns(byIndexGetter, byNameGetter, expected) +// .forRow(row); + conn.close(); + })); + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java new file mode 100644 index 0000000000..45d123485b --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -0,0 +1,21 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.DriverTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeDriverTest extends DriverTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected SqlConnectOptions defaultOptions() { + return rule.options(); + } + +} From ec3da622ad6d98004ad8615b9ce9f4812144772b Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 17 Mar 2021 22:20:18 +0300 Subject: [PATCH 027/176] reworked ArrayColumn to recode elements if needed Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../ClickhouseNativeDatabaseMetadata.java | 9 ++- .../impl/ClickhouseNativeRow.java | 32 ++++++-- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 12 ++- .../impl/codec/ExtendedQueryCommandCodec.java | 9 ++- .../impl/codec/RowResultDecoder.java | 7 +- .../impl/codec/SimpleQueryCommandCodec.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 73 ++++++++++++++++++- .../impl/codec/columns/ClickhouseColumn.java | 21 +++--- .../impl/codec/columns/ClickhouseColumns.java | 13 ++-- .../impl/codec/columns/DateColumn.java | 4 +- .../impl/codec/columns/Enum16Column.java | 4 +- .../impl/codec/columns/Enum8Column.java | 4 +- .../impl/codec/columns/FixedStringColumn.java | 15 +++- .../codec/columns/LowCardinalityColumn.java | 32 +++++--- .../impl/codec/columns/StringColumn.java | 14 +++- .../impl/codec/columns/UInt128Column.java | 2 +- .../impl/codec/columns/UInt16Column.java | 6 +- .../impl/codec/columns/UInt32Column.java | 6 +- .../impl/codec/columns/UInt64Column.java | 6 +- .../impl/codec/columns/UInt8Column.java | 6 +- .../BasicClickhouseTest.java | 42 +++++++++++ .../ExtendedClickhouseTest.java | 7 -- .../src/test/resources/init.sql | 8 ++ 25 files changed, 260 insertions(+), 79 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 958faa3cc8..66de120c6f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -33,6 +33,7 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; + public static final String OPTION_STRING_CHARSET = "string_charset"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; @@ -41,5 +42,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR))); + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 7c85d9c632..760d36a491 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -2,6 +2,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; +import java.nio.charset.Charset; import java.time.ZoneId; import java.util.Map; @@ -15,11 +16,12 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String displayName; private final ZoneId timezone; private final String fullClientName; + private final Charset stringCharset; private final Map properties; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties) { + Map properties, Charset stringCharset) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -30,6 +32,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.timezone = timezone; this.fullClientName = fullClientName; this.properties = properties; + this.stringCharset = stringCharset; } @Override @@ -76,6 +79,10 @@ public Map getProperties() { return properties; } + public Charset getStringCharset() { + return stringCharset; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index 8be95d677d..e1352122ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -5,7 +5,6 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.sql.JDBCType; import java.util.List; @@ -15,11 +14,11 @@ public class ClickhouseNativeRow implements Row { private final ClickhouseNativeRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block) { + public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; - this.stringCharset = StandardCharsets.UTF_8; + this.stringCharset = md.getStringCharset(); } @Override @@ -34,14 +33,31 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { + return getValue(columnIndex, String.class); + } + + private Object getValue(int columnIndex, Class desired) { List data = block.getData(); ClickhouseColumn column = data.get(columnIndex); - Object columnData = column.getElement(rowNo); - if (columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { - return new String((byte[]) columnData, stringCharset); - } else { - return columnData; + Object columnData = column.getElement(rowNo, desired); + return columnData; + //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { + // return new String((byte[]) columnData, stringCharset); + //} else { + // return columnData; + //} + } + + @Override + public T get(Class type, int position) { + if (type == null) { + throw new IllegalArgumentException("Accessor type can not be null"); + } + Object value = getValue(position, type); + if (value != null && type.isAssignableFrom(value.getClass())) { + return type.cast(value); } + return null; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 13572442e6..55f9cd10f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows, md); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index e1575ed546..0e9f10ee68 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -4,6 +4,7 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import java.nio.charset.Charset; import java.time.ZoneId; import java.util.Map; @@ -76,6 +77,15 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset()); + } + + private Charset charset() { + String desiredCharset = properties.get(ClickhouseConstants.OPTION_STRING_CHARSET); + if (desiredCharset == null || "system_default".equals(desiredCharset)) { + return Charset.defaultCharset(); + } else { + return Charset.forName(desiredCharset); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index b244a514b6..4a4cc577ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -6,7 +6,7 @@ import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; -import java.time.temporal.TemporalAccessor; +import java.time.temporal.Temporal; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -26,6 +26,7 @@ protected String sql() { return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); } + //TODO: maybe switch to antlr4 private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { StringBuilder bldr = new StringBuilder(); if (paramsList.size() == 0) { @@ -48,13 +49,13 @@ private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple p bldr.append(parametrizedSql, prevIdx, newIdx); Class paramClass = paramValue == null ? null : paramValue.getClass(); if (paramClass != null) { - if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || TemporalAccessor.class.isAssignableFrom(paramClass)) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { bldr.append('\'').append(paramValue).append('\''); } else if (paramClass == Double.class) { //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure - bldr.append(String.format("CAST('%s', 'Float64')", ((Double)paramValue).toString())); + bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); } else if (paramClass == Float.class) { - bldr.append(String.format("CAST('%s', 'Float32')", ((Float)paramValue).toString())); + bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); } else { bldr.append(paramValue); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 0667543ea0..07f779e09e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; @@ -15,17 +16,19 @@ class RowResultDecoder extends RowDecoder { private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseNativeDatabaseMetadata md; private ColumnOrientedBlock block; private int rowNo; - protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc) { + protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc, ClickhouseNativeDatabaseMetadata md) { super(collector); this.rowDesc = rowDesc; + this.md = md; } @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); + ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block, md); ++rowNo; return row; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 83ca3e66bc..8cfefc75f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -144,7 +144,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; rowResultDecoder.generateRows(block); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 2bb9d9adba..cc20ad7c7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,8 +1,11 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; +import java.sql.JDBCType; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -14,6 +17,9 @@ public class ArrayColumn extends ClickhouseColumn { private static final Object[] EMPTY_ARRAY = new Object[0]; + private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + private Deque, Integer>> graphLevelDeque; private List> slicesSeries; private List slices; @@ -21,9 +27,30 @@ public class ArrayColumn extends ClickhouseColumn { private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumn curNestedColumn; private Integer nItems; + private boolean resliced; + private Object statePrefix; - public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); + this.md = md; + this.elementaryDescr = elementaryDescr(columnDescriptor); + } + + private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + ClickhouseColumn statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, 0, md); + if (statePrefix == null) { + statePrefix = statePrefixColumn.readStatePrefix(in); + } + return statePrefix; } @Override @@ -37,19 +64,57 @@ protected Object readItems(ClickhouseStreamDataSource in) { curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } + if (statePrefix == null) { + return null; + } readSlices(in); if (nItems > 0) { if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); } else { assert nItems == curNestedColumn.nRows; } - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in); + if (curNestedColumn.getClass() == LowCardinalityColumn.class) { + ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; + } + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (elementaryDescr.jdbcType() == JDBCType.VARCHAR + || curNestedColumn.getClass() == Enum8Column.class + || curNestedColumn.getClass() == Enum16Column.class) { + return curNestedColumn.itemsArray; + } + resliced = true; return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } + resliced = true; return resliceIntoArray(EMPTY_ARRAY); } + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object[] objectsArray = (Object[]) this.itemsArray; + Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + return reslicedRet[rowIdx]; + } + + private Object[] asDesiredType(Object[] src, Class desired) { + if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { + return stringifyByteArrays(src, md.getStringCharset()); + } + return src; + } + + private Object[] stringifyByteArrays(Object[] src, Charset charset) { + Object[] ret = new Object[src.length]; + for (int i = 0; i < src.length; ++i) { + Object element = src[i]; + if (element != null) { + ret[i] = new String((byte[]) element, charset); + } + } + return ret; + } + private Object[] resliceIntoArray(Object[] data) { Object[] intermData = data; for (int i = slicesSeries.size() - 1; i >= 0; --i) { @@ -87,7 +152,7 @@ private void readSlices(ClickhouseStreamDataSource in) { nItems = slices.get(slices.size() - 1); if (curNestedColumnDescr.isNullable()) { if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); } curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index e9f8555bd1..0eb1be915c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -6,6 +6,8 @@ import java.util.BitSet; public abstract class ClickhouseColumn { + private static final Object NOP_STATE = new Object(); + protected final int nRows; protected final ClickhouseNativeColumnDescriptor columnDescriptor; protected BitSet nullsMap; @@ -29,7 +31,8 @@ public int nRows() { return nRows; } - protected void readStatePrefix(ClickhouseStreamDataSource in) { + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + return NOP_STATE; } protected void readData(ClickhouseStreamDataSource in) { @@ -52,19 +55,19 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in) { + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { itemsArray = readItems(in); - return asObjectsArray(); + return asObjectsArray(desired); } - protected Object[] asObjectsArray() { + protected Object[] asObjectsArray(Class desired) { return (Object[]) itemsArray; } - protected Object[] asObjectsArrayWithGetElement() { + protected Object[] asObjectsArrayWithGetElement(Class desired) { Object[] ret = new Object[nRows]; for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i); + ret[i] = getElement(i, desired); } return ret; } @@ -95,14 +98,14 @@ public Object getItemsArray() { return itemsArray; } - public Object getElement(int rowIdx) { + public Object getElement(int rowIdx, Class desired) { if (nullsMap != null && nullsMap.get(rowIdx)) { return null; } - return getElementInternal(rowIdx); + return getElementInternal(rowIdx, desired); } - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { return java.lang.reflect.Array.get(itemsArray, rowIdx); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index e05b677814..ac86c3d08c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import java.math.BigInteger; @@ -125,12 +126,12 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows) { + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { - return new ArrayColumn(nRows, descr); + return new ArrayColumn(nRows, descr, md); } if (descr.isLowCardinality()) { - return new LowCardinalityColumn(nRows, descr); + return new LowCardinalityColumn(nRows, descr, md); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { @@ -147,9 +148,9 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr); + return new StringColumn(nRows, descr, md); } else { - return new FixedStringColumn(nRows, descr); + return new FixedStringColumn(nRows, descr, md); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; @@ -204,7 +205,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } - //TODO: maybe switch to antl4 + //TODO: maybe switch to antlr4 static Map parseEnumVals(String nativeType) { final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 60c5104a18..eed4530d4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -12,8 +12,8 @@ public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) } @Override - protected Object getElementInternal(int rowIdx) { - Integer offset = (Integer) super.getElementInternal(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Integer offset = (Integer) super.getElementInternal(rowIdx, desired); return MIN_DATE.plusDays(offset); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index d10873fb59..466498a7b2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -14,8 +14,8 @@ public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map desired) { + Short key = (Short) super.getElementInternal(rowIdx, desired); return enumVals.get(key); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index f10147ac93..8d2d355457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -14,8 +14,8 @@ public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map desired) { + Byte key = (Byte) super.getElementInternal(rowIdx, desired); return enumVals.get(key); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index cd780add19..0998feb594 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,17 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { + private final Charset charset; + private List elements; - protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); } @Override @@ -37,7 +42,11 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { - return getObjectsArrayElement(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 19ad9c79f0..cfaafaa2b9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; @@ -7,30 +8,34 @@ public class LowCardinalityColumn extends ClickhouseColumn { + public static final long SUPPORTED_SERIALIZATION_VERSION = 1; private final ClickhouseNativeColumnDescriptor indexDescr; + private final ClickhouseNativeDatabaseMetadata md; private ClickhouseColumn indexColumn; private Long serType; private Long indexSize; private Long nKeys; - private Long keysSerializationVersion; + Long keysSerializationVersion; private ClickhouseColumn keysColumn; - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); this.indexDescr = descr.copyWithModifiers(false, false); + this.md = md; } @Override - protected void readStatePrefix(ClickhouseStreamDataSource in) { + protected Object readStatePrefix(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { if (in.readableBytes() >= 4) { keysSerializationVersion = in.readLongLE(); - if (keysSerializationVersion != 1) { + if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); } } } + return keysSerializationVersion; } @Override @@ -54,7 +59,7 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue()); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue(), md); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -75,23 +80,32 @@ protected void readData(ClickhouseStreamDataSource in) { keysColumn.readColumn(in); } + //called by Array column @Override protected Object readItems(ClickhouseStreamDataSource in) { + if (isPartial()) { + readData(in); + } return null; } + @Override + protected Object[] asObjectsArray(Class desired) { + return super.asObjectsArrayWithGetElement(desired); + } + @Override public boolean isPartial() { return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); } @Override - public Object getElement(int rowIdx) { - int key = ((Number)keysColumn.getElement(rowIdx)).intValue(); + public Object getElement(int rowIdx, Class desired) { + int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); if (columnDescriptor.isNullable() && key == 0) { return null; } - return indexColumn.getElementInternal(key); + return indexColumn.getElementInternal(key, desired); } private ClickhouseColumn uintColumn(int code) { @@ -109,6 +123,6 @@ private ClickhouseColumn uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, nRows); + return ClickhouseColumns.columnForSpec(tmp, nRows, md); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 15da7bd2aa..a8dd0f55bd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,18 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class StringColumn extends ClickhouseColumn { private Integer curStrLength; private List elements; + private final Charset charset; - protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); } @Override @@ -44,7 +48,11 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { - return getObjectsArrayElement(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 2ef59fec5f..6b575eb78d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -33,7 +33,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { return ((BigInteger[]) this.itemsArray)[rowIdx]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 586e21a9f6..e065f2cc31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { short element = ((short[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return Short.toUnsignedInt(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index ce5383ff7f..0c417f93a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { int element = ((int[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return Integer.toUnsignedLong(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 313fb8fbaf..ad2492e985 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -29,7 +29,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return unsignedBi(element); @@ -38,8 +38,8 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } static BigInteger unsignedBi(long l) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 02893d1fcd..5c2ac6041c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { byte element = ((byte[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return (short)Byte.toUnsignedInt(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 7862f44e7a..ac393f1001 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -18,6 +18,8 @@ import org.junit.runner.RunWith; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -98,6 +100,31 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator { + conn.query("select array() as empty_array, array(array(), array(NULL), array(1, NULL, 2), array(321)) as non_empty_array," + + "CAST(array(array(), array(NULL), array('a', NULL, 'b'), array('c')), 'Array(Array(LowCardinality(Nullable(String))))') as low_cardinality_array").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + Row row = res1.iterator().next(); + Object[] expected = new Object[0]; + Object[] actual = (Object[])row.getValue(0); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + + expected = new Object[][]{{}, {null}, {1, null, 2}, {321}}; + actual = (Object[])row.getValue(1); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + + expected = new Object[][]{{}, {null}, {"a", null, "b"}, {"c"}}; + actual = (Object[])row.getValue(2); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + conn.close(); + }) + ); + })); + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { @@ -109,4 +136,19 @@ public void baseQueryTest(TestContext ctx) { ); })); } + + @Test + public void blobTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("select 'abcd'").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + Row row = res1.iterator().next(); + byte[] bytes = row.get(byte[].class, 0); + ctx.assertEquals("abcd", new String(bytes, StandardCharsets.UTF_8)); + conn.close(); + }) + ); + })); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 5023b00edb..ac100a4556 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -34,13 +34,6 @@ public class ExtendedClickhouseTest { public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); - /* - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn - .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") - .execute(ctx.asyncAssertSuccess()); - })); - */ } @After diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 6bce8a30f3..752ab455f9 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -90,3 +90,11 @@ CREATE TABLE collector_test ORDER BY (id); INSERT INTO collector_test VALUES (1, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'HELLO,WORLD'); INSERT INTO collector_test VALUES (2, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'hello,world'); + +DROP TABLE IF EXISTS vertx_cl_test_table; +CREATE TABLE vertx_cl_test_table +( + `name` String, + `value` UInt32 +) +ENGINE = GenerateRandom(1, 5, 3); From 940df684237a6d6e78e16ff7e5b3544e8addf1ad Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 17 Mar 2021 23:54:14 +0300 Subject: [PATCH 028/176] reworked ArrayColumn to handle partial reads Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumn.java | 101 +++++++++++------- .../impl/codec/columns/ClickhouseColumn.java | 2 +- 2 files changed, 62 insertions(+), 41 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index cc20ad7c7c..e38e8a5ef2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -22,13 +22,17 @@ public class ArrayColumn extends ClickhouseColumn { private Deque, Integer>> graphLevelDeque; private List> slicesSeries; - private List slices; + private List curSlice; private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumn curNestedColumn; private Integer nItems; private boolean resliced; private Object statePrefix; + private boolean hasFirstSlice; + private int sliceIdxAtCurrentDepth; + private int prevSliceSizeAtCurrentDepth = 0; + private Triplet, Integer> slicesAtCurrentDepth; public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); @@ -59,7 +63,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { graphLevelDeque = new ArrayDeque<>(); graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); slicesSeries = new ArrayList<>(); - slices = new ArrayList<>(); + curSlice = new ArrayList<>(); curDepth = 0; curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; @@ -68,16 +72,23 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } readSlices(in); + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); + } + if (curNestedColumnDescr.isNullable()) { + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } if (nItems > 0) { - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } else { - assert nItems == curNestedColumn.nRows; - } + assert nItems == curNestedColumn.nRows; if (curNestedColumn.getClass() == LowCardinalityColumn.class) { ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; } - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + return null; + } + } if (elementaryDescr.jdbcType() == JDBCType.VARCHAR || curNestedColumn.getClass() == Enum8Column.class || curNestedColumn.getClass() == Enum16Column.class) { @@ -136,46 +147,56 @@ private Object[] resliceIntoArray(Object[] data) { } private void readSlices(ClickhouseStreamDataSource in) { - //TODO smagellan: simplify the loop - //TODO smagellan: handle fragmented reads - while (!graphLevelDeque.isEmpty()) { - Triplet, Integer> sliceState = graphLevelDeque.remove(); - curNestedColumnDescr = sliceState.left().getNestedDescr(); - Integer newDepth = sliceState.right(); - if (curDepth != newDepth.intValue()) { - curDepth = newDepth; - slicesSeries.add(slices); + if (!hasFirstSlice) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + } + + while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { + if (sliceIdxAtCurrentDepth == 0) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + + curDepth = slicesAtCurrentDepth.right(); + slicesSeries.add(curSlice); //The last element in slice is index(number) of the last //element in current level. On the last iteration this //represents number of elements in fully flattened array. - nItems = slices.get(slices.size() - 1); - if (curNestedColumnDescr.isNullable()) { - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); - } - slices = new ArrayList<>(); + nItems = curSlice.get(curSlice.size() - 1); + curSlice = new ArrayList<>(); } if (curNestedColumnDescr.isArray()) { - slices.add(0); - int prev = 0; - for (int size : sliceState.middle()) { - int nestedSizeCount = size - prev; - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); - } - nestedSizes.add((int) sz); - } - slices.addAll(nestedSizes); - prev = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + readSlice(in, slicesAtCurrentDepth); + } + } + } + + private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { + if (sliceIdxAtCurrentDepth == 0) { + curSlice.add(0); + } + for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { + int size = sliceState.middle().get(sliceIdxAtCurrentDepth); + int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; + if (in.readableBytes() < nestedSizeCount * 8) { + return false; + } + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); } + nestedSizes.add((int) sz); } + curSlice.addAll(nestedSizes); + prevSliceSizeAtCurrentDepth = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); } + sliceIdxAtCurrentDepth = 0; + prevSliceSizeAtCurrentDepth = 0; + return true; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 0eb1be915c..ae128c482d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -91,7 +91,7 @@ protected BitSet readNullsMap(ClickhouseStreamDataSource in) { } public boolean isPartial() { - return itemsArray == null; + return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); } public Object getItemsArray() { From f1c615d7d1721089bed8d8eb0654efe8c2cd653a Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Mar 2021 12:27:26 +0300 Subject: [PATCH 029/176] initial batch insert support Signed-off-by: vladimir --- .../impl/ClickhouseNativeRowDesc.java | 3 + .../impl/RowOrientedBlock.java | 45 +++++-- .../impl/codec/ClickhouseNativeEncoder.java | 32 ++++- .../ClickhouseNativePreparedStatement.java | 19 ++- .../impl/codec/ClickhouseStreamDataSink.java | 3 + .../impl/codec/ExtendedQueryCommandCodec.java | 89 +++++++------- .../codec/Lz4ClickhouseStreamDataSink.java | 15 +++ .../impl/codec/PacketForge.java | 111 ++++++++++++++++++ .../impl/codec/PacketReader.java | 7 +- .../impl/codec/PrepareStatementCodec.java | 49 +++++++- .../impl/codec/QueryParsers.java | 97 +++++++++++++++ .../codec/RawClickhouseStreamDataSink.java | 15 +++ .../impl/codec/SimpleQueryCommandCodec.java | 110 +++++------------ .../impl/codec/TableColumns.java | 23 ++++ .../impl/codec/columns/ClickhouseColumn.java | 44 +++++++ .../impl/codec/columns/StringColumn.java | 13 ++ .../impl/codec/columns/UInt32Column.java | 13 ++ .../impl/codec/columns/UInt8Column.java | 14 +++ ...ckhouseNativeBinaryDataTypeEncodeTest.java | 18 +-- .../ClickhouseNativePreparedBatchTest.java | 58 +++++++++ .../clickhousenativeclient/tck/Sleep.java | 14 +++ .../sqlclient/tck/PreparedBatchTestBase.java | 10 +- 22 files changed, 635 insertions(+), 167 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index 3db511730d..65ba59dfca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -3,9 +3,12 @@ import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; +import java.util.Collections; import java.util.List; public class ClickhouseNativeRowDesc extends RowDesc { + public static final ClickhouseNativeRowDesc EMPTY = new ClickhouseNativeRowDesc(Collections.emptyList(), Collections.emptyList()); + public ClickhouseNativeRowDesc(List columnNames) { super(columnNames); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 7658fe1676..5b0d2cb803 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -4,25 +4,50 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.RowDesc; import java.util.List; -import java.util.Map; -public class RowOrientedBlock extends BaseBlock { +public class RowOrientedBlock { + private final RowDesc rowDesc; + private final List data; + private final BlockInfo blockInfo; + private final ClickhouseNativeDatabaseMetadata md; - public RowOrientedBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { - super(columnsWithTypes, data, blockInfo, md); + public RowOrientedBlock(RowDesc rowDesc, + List data, ClickhouseNativeDatabaseMetadata md) { + this.rowDesc = rowDesc; + this.data = data; + this.blockInfo = new BlockInfo(); + this.md = md; } - public void serializeTo(ClickhouseStreamDataSink sink) { - if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { - getBlockInfo().serializeTo(sink); + public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + blockInfo.serializeTo(sink); } //n_columns - sink.writeULeb128(0); + sink.writeULeb128(nColumns()); //n_rows - sink.writeULeb128(0); + int nRows = toRow - fromRow; + sink.writeULeb128(nRows); //TODO smagellan + for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { + ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseColumn column = ClickhouseColumns.columnForSpec(descr, nRows, md); + sink.writePascalString(descr.name()); + sink.writePascalString(descr.getUnparsedNativeType()); + column.serializeColumn(sink, columnIndex, data, fromRow, toRow); + } + } + + public int nColumns() { + return rowDesc.columnDescriptor().size(); + } + + public int totalRows() { + return data.size(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index db836de263..5a1228bd3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -66,12 +66,38 @@ void write(CommandBase cmd) { } else if (cmd instanceof CloseConnectionCommand) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { - return new PrepareStatementCodec((PrepareStatementCommand) cmd); + PrepareStatementCommand ps = (PrepareStatementCommand) cmd; + QueryParsers.QueryType queryType = QueryParsers.queryType(ps.sql()); + return new PrepareStatementCodec(ps, queryType); } else if (cmd instanceof ExtendedQueryCommand) { - return new ExtendedQueryCommandCodec<>((ExtendedQueryCommand)cmd, conn); + ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; + QueryParsers.QueryType queryType; + if (ecmd.preparedStatement() != null) { + queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); + } else { + queryType = QueryParsers.queryType(ecmd.sql()); + } + if (queryType != null && queryType != QueryParsers.QueryType.INSERT && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); + deliverError(cmd, ex); + throw ex; + } + return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } - throw new UnsupportedOperationException(cmd.getClass().getName()); + RuntimeException ex = new UnsupportedOperationException(cmd.getClass().getName()); + deliverError(cmd, ex); + throw ex; + } + + private void deliverError(CommandBase cmd, RuntimeException ex) { + if (cmd instanceof QueryCommandBase) { + QueryCommandBase ecmd = (QueryCommandBase)cmd; + ecmd.resultHandler().handleResult(0, 0, null, null, ex); + } + CommandResponse resp = CommandResponse.failure(ex); + resp.cmd = cmd; + chctx.fireChannelRead(resp); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index fedc263648..5032c9b101 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -10,21 +10,26 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; + private final QueryParsers.QueryType queryType; + private final boolean sentQuery; - public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc) { + public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, + QueryParsers.QueryType queryType, boolean sentQuery) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; + this.queryType = queryType; + this.sentQuery = sentQuery; } @Override public ParamDesc paramDesc() { - return null; + return paramDesc; } @Override public RowDesc rowDesc() { - return null; + return rowDesc; } @Override @@ -36,4 +41,12 @@ public String sql() { public String prepare(TupleInternal values) { return null; } + + public QueryParsers.QueryType queryType() { + return queryType; + } + + public boolean isSentQuery() { + return sentQuery; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 846b62bd76..3c8a2358fa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -4,6 +4,9 @@ public interface ClickhouseStreamDataSink { void writeULeb128(int value); void writeByte(int value); void writeIntLE(int value); + void writeBytes(byte[] value); + void writeBoolean(boolean value); + void writePascalString(String value); default void finish() { } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 4a4cc577ce..ac4d81e2d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,13 +1,20 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; -import java.time.temporal.Temporal; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -16,69 +23,53 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn, cmd.fetch() > 0); + public ExtendedQueryCommandCodec(QueryParsers.QueryType queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); - } - - //TODO: maybe switch to antlr4 - private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { - StringBuilder bldr = new StringBuilder(); - if (paramsList.size() == 0) { - return parametrizedSql; - } - int prevIdx = 0; - int newIdx; - while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { - if (newIdx - 1 == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { - int paramIdxStartPos = newIdx + 1; - int paramIdxEndPos = paramIdxStartPos; - while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { - ++paramIdxEndPos; - } - if (paramIdxStartPos == paramIdxEndPos) { - throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); - } - int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; - Object paramValue = paramsList.getValue(paramIndex); - bldr.append(parametrizedSql, prevIdx, newIdx); - Class paramClass = paramValue == null ? null : paramValue.getClass(); - if (paramClass != null) { - if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { - bldr.append('\'').append(paramValue).append('\''); - } else if (paramClass == Double.class) { - //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure - bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); - } else if (paramClass == Float.class) { - bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); - } else { - bldr.append(paramValue); - } - } else { - bldr.append(paramValue); - } - newIdx = paramIdxEndPos; - } - prevIdx = newIdx; + if (queryType != QueryParsers.QueryType.INSERT || !ecmd.isBatch()) { + return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } - bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); - return bldr.toString(); + //TODO smagellan: handle insert at query prepare stage (PrepareStatementCodec) + return ecmd.sql(); } @Override void encode(ClickhouseNativeEncoder encoder) { - String ourCursorId = ecmd().cursorId(); + ExtendedQueryCommand ecmd = ecmd(); + String ourCursorId = ecmd.cursorId(); + //TODO smagellan: introduce lock() method if (conn.getPendingCursorId() == null) { conn.setPendingCursorId(ourCursorId); } else { conn.throwExceptionIfBusy(ourCursorId); } - super.encode(encoder); + PreparedStatement ps = ecmd.preparedStatement(); + if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { + this.encoder = encoder; + ByteBuf buf = allocateBuffer(); + try { + ChannelHandlerContext chctx = encoder.chctx(); + PacketForge forge = new PacketForge(encoder.getConn(), chctx); + ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + List paramsList = ecmd.paramsList(); + if (paramsList != null && !paramsList.isEmpty()) { + RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), paramsList, md); + forge.sendColumns(block, buf, null); + } + forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); + chctx.writeAndFlush(buf, chctx.voidPromise()); + LOG.info("sent columns"); + } catch (Throwable t) { + buf.release(); + throw t; + } + } else { + super.encode(encoder); + } } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index b5116113b7..5de074526f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -42,6 +42,21 @@ public void writeIntLE(int value) { tmpStorage.writeIntLE(value); } + @Override + public void writeBytes(byte[] value) { + tmpStorage.writeBytes(value); + } + + @Override + public void writeBoolean(boolean value) { + tmpStorage.writeBoolean(value); + } + + @Override + public void writePascalString(String str) { + ByteBufUtils.writePascalString(str, tmpStorage); + } + @Override public void finish() { ByteBuf compressed = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java new file mode 100644 index 0000000000..573fd0b150 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -0,0 +1,111 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +public class PacketForge { + private static final Logger LOG = LoggerFactory.getLogger(PacketForge.class); + private final ClickhouseNativeSocketConnection conn; + private final ChannelHandlerContext chctx; + + public PacketForge(ClickhouseNativeSocketConnection conn, ChannelHandlerContext chctx) { + this.conn = conn; + this.chctx = chctx; + } + + public void sendQuery(String query, ByteBuf buf) { + LOG.info("running query: " + query); + ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); + //query id + ByteBufUtils.writePascalString("", buf); + ClickhouseNativeDatabaseMetadata meta = conn.getDatabaseMetaData(); + int serverRevision = meta.getRevision(); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + ClientInfo clInfo = new ClientInfo(meta); + clInfo.serializeTo(buf); + } + boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; + writeSettings(settings(), settingsAsStrings, true, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { + ByteBufUtils.writePascalString("", buf); + } + ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); + int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; + ByteBufUtils.writeULeb128(compressionEnabled, buf); + ByteBufUtils.writePascalString(query, buf); + } + + public void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + if (settingsAsStrings) { + for (Map.Entry entry : settings.entrySet()) { + if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + LOG.info("writing query setting: " + entry); + ByteBufUtils.writePascalString(entry.getKey(), buf); + buf.writeBoolean(settingsAreImportant); + ByteBufUtils.writePascalString(entry.getValue(), buf); + } + } + } else { + //TODO smagellan + throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); + } + //end of settings + ByteBufUtils.writePascalString("", buf); + } + + public void sendExternalTables(ByteBuf buf, Collection blocks) { + ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); + for (RowOrientedBlock block : blocks) { + //TODO smagellan + sendData(buf, block, null); + } + sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); + } + + public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { + sendData(buf, block, tableName, 0, block.totalRows()); + } + + public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName, int fromRow, int toRow) { + ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); + if (conn.getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + ByteBufUtils.writePascalString(tableName, buf); + } + ClickhouseStreamDataSink sink = null; + try { + sink = dataSink(buf); + block.serializeAsBlock(sink, fromRow, toRow); + } finally { + if (sink != null) { + sink.finish(); + } + } + } + + private ClickhouseStreamDataSink dataSink(ByteBuf buf) { + return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), chctx); + } + + protected Map settings() { + return conn.getDatabaseMetaData().getProperties(); + } + + public void sendColumns(RowOrientedBlock block, ByteBuf buf, Integer maxInsertBlockSize) { + int nRows = block.totalRows(); + int blockSize = maxInsertBlockSize == null ? nRows : maxInsertBlockSize; + int fromRow = 0; + while (fromRow < nRows) { + int toRow = Math.min(nRows, fromRow + blockSize); + sendData(buf, block, "", fromRow, toRow); + fromRow = toRow; + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 08ac968216..0996b9e113 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -11,6 +11,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; +import java.util.AbstractMap; import java.util.List; import java.util.Map; @@ -91,7 +92,7 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } - private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { multistringReader = new MultistringMessageReader(); @@ -105,14 +106,16 @@ private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser tableColumnsPacketReader = new PacketReader(md, fullClientName, properties, lz4Factory); } ColumnOrientedBlock block = tableColumnsPacketReader.readDataBlock(alloc, in, true); + TableColumns ret = null; if (block != null) { + ret = new TableColumns(multistringMessage, block); LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); multistringReader = null; packetType = null; tableColumnsPacketReader = null; multistringMessage = null; } - return multistringMessage; + return ret; } private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index a24de144b9..0162ddf313 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -5,28 +5,71 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.Map; public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); + private final QueryParsers.QueryType queryType; - protected PrepareStatementCodec(PrepareStatementCommand cmd) { + private PacketReader packetReader; + + protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryParsers.QueryType queryType) { super(cmd); + this.queryType = queryType; } @Override void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("handle ready for query"); - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList())))); + String sql = cmd.sql(); + if (queryType == QueryParsers.QueryType.INSERT) { + int valuesIndex = sql.toLowerCase().lastIndexOf("values"); + String truncatedSql = sql.substring(0, valuesIndex + "values".length()); + ByteBuf buf = allocateBuffer(); + try { + PacketForge forge = new PacketForge(encoder.getConn(), encoder.chctx()); + forge.sendQuery(truncatedSql, buf); + forge.sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } catch (Throwable t) { + buf.release(); + throw t; + } + } else { + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), + new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false))); + } } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { + if (packetReader == null) { + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); + } + Object packet = packetReader.receivePacket(ctx.alloc(), in); + if (packet != null) { + packetReader = null; + if (packet.getClass() == TableColumns.class) { + TableColumns columns = (TableColumns)packet; + Map data = columns.columnDefinition().getColumnsWithTypes(); + + List columnNames = new ArrayList<>(data.keySet()); + List columnTypes = new ArrayList<>(data.values()); + ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true))); + } else if (packet instanceof Throwable) { + cmd.fail((Throwable) packet); + } + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java new file mode 100644 index 0000000000..5034ea4bb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -0,0 +1,97 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.Tuple; + +import java.time.temporal.Temporal; +import java.util.HashSet; +import java.util.Set; + +public class QueryParsers { + private static final String[] selectKeywords = new String[]{"SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"}; + private static final String INSERT_KEYWORD = "INSERT"; + private static final int INSERT_KEYWORD_LENGTH = INSERT_KEYWORD.length(); + + private static final String UPDATE_KEYWORD = "UPDATE"; + private static final int UPDATE_KEYWORD_LENGTH = UPDATE_KEYWORD.length(); + + //TODO: maybe switch to antlr4 + public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { + int prevIdx = 0; + int newIdx; + StringBuilder bldr = new StringBuilder(); + Set usedArgs = new HashSet<>(); + while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { + if (newIdx == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { + int paramIdxStartPos = newIdx + 1; + int paramIdxEndPos = paramIdxStartPos; + while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { + ++paramIdxEndPos; + } + if (paramIdxStartPos == paramIdxEndPos) { + throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); + } + int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; + if (paramsList == null || paramIndex >= paramsList.size()) { + throw new IllegalArgumentException("paramList is null or too small(" + (paramsList == null ? null : paramsList.size()) + + ") for arg with index " + paramIndex); + } + Object paramValue = paramsList.getValue(paramIndex); + bldr.append(parametrizedSql, prevIdx, newIdx); + Class paramClass = paramValue == null ? null : paramValue.getClass(); + if (paramClass != null) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { + bldr.append('\'').append(paramValue).append('\''); + } else if (paramClass == Double.class) { + //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure + bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); + } else if (paramClass == Float.class) { + bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); + } else { + bldr.append(paramValue); + } + } else { + bldr.append(paramValue); + } + usedArgs.add(paramIndex); + newIdx = paramIdxEndPos; + } + prevIdx = newIdx; + } + if (usedArgs.size() != paramsList.size()) { + throw new IllegalArgumentException("param count mismatch: query consumed " + + usedArgs.size() + ", but provided count is " + paramsList.size()); + } + bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); + return bldr.toString(); + } + + + public static QueryType queryType(String sql) { + for (int i = 0; i < sql.length(); i++) { + String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); + if ("--".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("\n", i)); + } else if ("/*".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("*/", i)); + } else if (Character.isLetter(sql.charAt(i))) { + String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); + for (String keyword : selectKeywords){ + if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { + return QueryType.SELECT; + } + } + if (trimmed.regionMatches(true, 0, INSERT_KEYWORD, 0, INSERT_KEYWORD_LENGTH)) { + return QueryType.INSERT; + } + if (trimmed.regionMatches(true, 0, UPDATE_KEYWORD, 0, UPDATE_KEYWORD_LENGTH)) { + return QueryType.UPDATE; + } + return null; + } + } + return null; + } + + enum QueryType { + SELECT, INSERT, UPDATE; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 221d8f8297..7f5a920e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -23,4 +23,19 @@ public void writeByte(int value) { public void writeIntLE(int value) { sink.writeIntLE(value); } + + @Override + public void writeBytes(byte[] value) { + sink.writeBytes(value); + } + + @Override + public void writeBoolean(boolean value) { + sink.writeBoolean(value); + } + + @Override + public void writePascalString(String str) { + ByteBufUtils.writePascalString(str, sink); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 8cfefc75f1..2410dd54b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -2,7 +2,6 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -11,26 +10,30 @@ import io.vertx.sqlclient.impl.command.QueryCommandBase; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - private final boolean requireUpdates; + private final boolean commandRequiresUpdatesDelivery; + protected final QueryParsers.QueryType queryType; + protected final int batchSize; + private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; protected final ClickhouseNativeSocketConnection conn; protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { - this(cmd, conn, false); + this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdates) { + protected SimpleQueryCommandCodec(QueryParsers.QueryType queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); + this.queryType = queryType; + this.batchSize = batchSize; this.conn = conn; - this.requireUpdates = requireUpdates; + this.commandRequiresUpdatesDelivery = requireUpdatesDelivery; } @Override @@ -39,9 +42,15 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); if (!isSuspended()) { ByteBuf buf = allocateBuffer(); - sendQuery(sql(), buf); - sendExternalTables(buf, Collections.emptyList()); - encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + try { + PacketForge forge = new PacketForge(conn, encoder.chctx()); + forge.sendQuery(sql(), buf); + forge.sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } catch (Throwable t) { + buf.release(); + throw t; + } } } @@ -49,57 +58,6 @@ protected String sql() { return cmd.sql(); } - private void sendExternalTables(ByteBuf buf, Collection blocks) { - ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); - for (RowOrientedBlock block : blocks) { - //TODO smagellan - sendData(buf, block, null); - } - sendData(buf, new RowOrientedBlock(null, null, new BlockInfo(), md), ""); - } - - private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { - ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); - if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - ByteBufUtils.writePascalString(tableName, buf); - } - ClickhouseStreamDataSink sink = null; - try { - sink = dataSink(buf); - block.serializeTo(sink); - } finally { - if (sink != null) { - sink.finish(); - } - } - } - - private ClickhouseStreamDataSink dataSink(ByteBuf buf) { - return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), encoder.chctx()); - } - - private void sendQuery(String query, ByteBuf buf) { - LOG.info("running query: " + query); - ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); - //query id - ByteBufUtils.writePascalString("", buf); - ClickhouseNativeDatabaseMetadata meta = encoder.getConn().getDatabaseMetaData(); - int serverRevision = meta.getRevision(); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { - ClientInfo clInfo = new ClientInfo(meta); - clInfo.serializeTo(buf); - } - boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; - writeSettings(settings(), settingsAsStrings, true, buf); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { - ByteBufUtils.writePascalString("", buf); - } - ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); - int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; - ByteBufUtils.writeULeb128(compressionEnabled, buf); - ByteBufUtils.writePascalString(query, buf); - } - protected Map settings() { return conn.getDatabaseMetaData().getProperties(); } @@ -112,24 +70,6 @@ protected void checkIfBusy() { conn.throwExceptionIfBusy(null); } - private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { - if (settingsAsStrings) { - for (Map.Entry entry : settings.entrySet()) { - if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { - LOG.info("writing query setting: " + entry); - ByteBufUtils.writePascalString(entry.getKey(), buf); - buf.writeBoolean(settingsAreImportant); - ByteBufUtils.writePascalString(entry.getValue(), buf); - } - } - } else { - //TODO smagellan - throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); - } - //end of settings - ByteBufUtils.writePascalString("", buf); - } - @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode, readable bytes: " + in.readableBytes()); @@ -148,7 +88,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } packetReader = null; rowResultDecoder.generateRows(block); - if (requireUpdates && block.numRows() > 0) { + if (commandRequiresUpdatesDelivery && block.numRows() > 0) { notifyOperationUpdate(true, null); } ++dataPacketNo; @@ -177,6 +117,10 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { } private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { + notifyOperationUpdate(0, hasMoreResults, t); + } + + private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); @@ -184,7 +128,13 @@ private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); + } else { + if (queryType == QueryParsers.QueryType.INSERT) { + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); + failure = rowResultDecoder.complete(); + cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); + } } if (t != null) { if (failure == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java new file mode 100644 index 0000000000..e5be96fa10 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; + +import java.util.List; + +public class TableColumns { + private final List msg; + private final ColumnOrientedBlock columnDefinition; + + public TableColumns(List msg, ColumnOrientedBlock columnDefinition) { + this.msg = msg; + this.columnDefinition = columnDefinition; + } + + public List msg() { + return msg; + } + + public ColumnOrientedBlock columnDefinition() { + return columnDefinition; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index ae128c482d..ddabf6689d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,9 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; import java.util.BitSet; +import java.util.List; public abstract class ClickhouseColumn { private static final Object NOP_STATE = new Object(); @@ -113,4 +116,45 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } + + public void serializeColumn(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + serializeStatePrefix(sink, columnIndex, data, fromRow, toRow); + serializeData(sink, columnIndex, data, fromRow, toRow); + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + } + + protected void serializeData(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + if (columnDescriptor.isNullable()) { + serializeNullsMap(sink, columnIndex, data, fromRow, toRow); + } + serializeDataInternal(sink, columnIndex, data, fromRow, toRow); + } + + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + sink.writeBoolean(val == null); + } + } + + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + if (val == null) { + serializeDataNull(sink); + } else { + serializeDataElement(sink, val); + } + } + } + + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + throw new IllegalStateException("not implemented"); + } + + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + throw new IllegalStateException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a8dd0f55bd..a860c5917d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; @@ -55,4 +56,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + sink.writeULeb128(bytes.length); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeULeb128(0); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 0c417f93a7..6c00e5ea79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt32Column extends ClickhouseColumn { @@ -39,4 +40,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + int b = number == null ? 0 : number.intValue(); + sink.writeIntLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 5c2ac6041c..5c6a23e07b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,8 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; @@ -39,4 +41,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + byte b = number == null ? 0 : number.byteValue(); + sink.writeByte(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeByte(0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 6e52c76c12..b9bcfd63b0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,8 +1,6 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; @@ -17,10 +15,6 @@ @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeBinaryDataTypeEncodeTest.class); - - //updates may be async even for non-replicated tables; - public static final int SLEEP_TIME = 100; @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -89,11 +83,7 @@ public void testNullValues(TestContext ctx) { .addValue(null) .addValue(null), ctx.asyncAssertSuccess(updateResult -> { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - LOG.error(e); - } + Sleep.sleepOrThrow(); conn .preparedQuery("SELECT * FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { @@ -120,11 +110,7 @@ protected void testEncodeGeneric(TestContext ctx, conn .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - LOG.error(e); - } + Sleep.sleepOrThrow(); conn .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java new file mode 100644 index 0000000000..8e452b2dcf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -0,0 +1,58 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.tck.PreparedBatchTestBase; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedBatchTest extends PreparedBatchTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Test + public void testBatchQuery(TestContext ctx) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + List batch = new ArrayList<>(); + batch.add(Tuple.of(1)); + batch.add(Tuple.of(3)); + batch.add(Tuple.of(5)); + //select multi-batches are not supported + conn.preparedQuery(statement("SELECT * FROM immutable WHERE id=", "")).executeBatch(batch, ctx.asyncAssertFailure()); + })); + } + + @Override + protected int expectedInsertBatchSize(List batch) { + return batch.size(); + } + + @Override + protected void maybeSleep() { + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java new file mode 100644 index 0000000000..7b5c5ef062 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java @@ -0,0 +1,14 @@ +package io.vertx.clickhousenativeclient.tck; + +class Sleep { + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + static void sleepOrThrow() { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java index 6c59da8cd6..4aaca3fc30 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java @@ -52,6 +52,13 @@ public void tearDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } + protected void maybeSleep() { + } + + protected int expectedInsertBatchSize(List batch) { + return 1; + } + @Test public void testInsert(TestContext ctx) { connector.connect(ctx.asyncAssertSuccess(conn -> { @@ -62,7 +69,8 @@ public void testInsert(TestContext ctx) { batch.add(Tuple.wrap(Arrays.asList(79994, "batch four"))); conn.preparedQuery(statement("INSERT INTO mutable (id, val) VALUES (", ", ", ")")).executeBatch(batch, ctx.asyncAssertSuccess(result -> { - ctx.assertEquals(1, result.rowCount()); + maybeSleep(); + ctx.assertEquals(expectedInsertBatchSize(batch), result.rowCount()); conn.preparedQuery(statement("SELECT * FROM mutable WHERE id=", "")).executeBatch(Collections.singletonList(Tuple.of(79991)), ctx.asyncAssertSuccess(ar1 -> { ctx.assertEquals(1, ar1.size()); Row one = ar1.iterator().next(); From 623cb2f42747636cbdb942eb23f38be53e19e172 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Mar 2021 17:10:42 +0300 Subject: [PATCH 030/176] splitted columns into readers and writers Signed-off-by: vladimir --- .../clickhousenative/impl/BaseBlock.java | 8 +- .../ClickhouseNativeDatabaseMetadata.java | 2 +- .../impl/ClickhouseNativeRow.java | 7 +- .../impl/ColumnOrientedBlock.java | 8 +- .../impl/RowOrientedBlock.java | 17 +- .../impl/codec/ClickhouseStreamDataSink.java | 6 + .../impl/codec/ColumnOrientedBlockReader.java | 8 +- .../codec/Lz4ClickhouseStreamDataSink.java | 30 +++ .../codec/Lz4ClickhouseStreamDataSource.java | 2 +- .../codec/RawClickhouseStreamDataSink.java | 30 +++ .../impl/codec/columns/ArrayColumn.java | 191 +---------------- .../impl/codec/columns/ArrayColumnReader.java | 202 ++++++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 152 +------------ .../codec/columns/ClickhouseColumnReader.java | 122 +++++++++++ .../codec/columns/ClickhouseColumnWriter.java | 70 ++++++ .../impl/codec/columns/ClickhouseColumns.java | 98 ++++----- .../impl/codec/columns/DateColumn.java | 19 +- .../impl/codec/columns/DateColumnReader.java | 19 ++ .../impl/codec/columns/DateTime64Column.java | 40 ++-- .../codec/columns/DateTime64ColumnReader.java | 42 ++++ .../impl/codec/columns/DateTimeColumn.java | 33 +-- .../codec/columns/DateTimeColumnReader.java | 37 ++++ .../impl/codec/columns/Decimal128Column.java | 40 +--- .../codec/columns/Decimal128ColumnReader.java | 42 ++++ .../impl/codec/columns/Decimal256Column.java | 40 +--- .../codec/columns/Decimal256ColumnReader.java | 42 ++++ .../impl/codec/columns/Decimal32Column.java | 36 +--- .../codec/columns/Decimal32ColumnReader.java | 38 ++++ .../impl/codec/columns/Decimal64Column.java | 36 +--- .../codec/columns/Decimal64ColumnReader.java | 38 ++++ .../impl/codec/columns/Enum16Column.java | 23 +- .../codec/columns/Enum16ColumnReader.java | 21 ++ .../impl/codec/columns/Enum8Column.java | 23 +- .../impl/codec/columns/Enum8ColumnReader.java | 21 ++ .../impl/codec/columns/FixedStringColumn.java | 45 +--- .../columns/FixedStringColumnReader.java | 52 +++++ .../columns/FixedStringColumnWriter.java | 33 +++ .../impl/codec/columns/Float32Column.java | 27 +-- .../codec/columns/Float32ColumnReader.java | 28 +++ .../codec/columns/Float32ColumnWriter.java | 24 +++ .../impl/codec/columns/Float64Column.java | 27 +-- .../codec/columns/Float64ColumnReader.java | 29 +++ .../codec/columns/Float64ColumnWriter.java | 25 +++ .../codec/columns/LowCardinalityColumn.java | 119 +---------- .../columns/LowCardinalityColumnReader.java | 127 +++++++++++ .../impl/codec/columns/StringColumn.java | 64 +----- .../codec/columns/StringColumnReader.java | 64 ++++++ .../codec/columns/StringColumnWriter.java | 28 +++ .../impl/codec/columns/UInt128Column.java | 33 +-- .../codec/columns/UInt128ColumnReader.java | 39 ++++ .../impl/codec/columns/UInt16Column.java | 38 +--- .../codec/columns/UInt16ColumnReader.java | 42 ++++ .../codec/columns/UInt16ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt32Column.java | 51 +---- .../codec/columns/UInt32ColumnReader.java | 50 +++++ .../codec/columns/UInt32ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt64Column.java | 51 +---- .../codec/columns/UInt64ColumnReader.java | 57 +++++ .../codec/columns/UInt64ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt8Column.java | 50 +---- .../impl/codec/columns/UInt8ColumnReader.java | 50 +++++ .../impl/codec/columns/UInt8ColumnWriter.java | 24 +++ .../impl/codec/columns/UUIDColumn.java | 30 +-- .../impl/codec/columns/UUIDColumnReader.java | 32 +++ ....java => ClickhouseColumnsTestReader.java} | 4 +- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 42 +--- .../tck/BinaryDataTypeEncodeTestBase.java | 12 +- 67 files changed, 1849 insertions(+), 1063 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{ClickhouseColumnsTest.java => ClickhouseColumnsTestReader.java} (90%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index a6712e8105..72c5f8a407 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,19 +1,19 @@ package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import java.util.List; import java.util.Map; public class BaseBlock { private final Map columnsWithTypes; - private final List data; + private final List data; private final BlockInfo blockInfo; private final ClickhouseNativeDatabaseMetadata md; public BaseBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; this.data = data; this.blockInfo = blockInfo; @@ -24,7 +24,7 @@ public Map getColumnsWithTypes() { return columnsWithTypes; } - public List getData() { + public List getData() { return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 760d36a491..45d1644c34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -67,7 +67,7 @@ public String getDisplayName() { return displayName; } - public ZoneId getTimezone() { + public ZoneId getZoneId() { return timezone; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index e1352122ee..a7074712c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -1,11 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.sql.JDBCType; import java.util.List; public class ClickhouseNativeRow implements Row { @@ -37,8 +36,8 @@ public Object getValue(int columnIndex) { } private Object getValue(int columnIndex, Class desired) { - List data = block.getData(); - ClickhouseColumn column = data.get(columnIndex); + List data = block.getData(); + ClickhouseColumnReader column = data.get(columnIndex); Object columnData = column.getElement(rowNo, desired); return columnData; //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 3bb756c68d..eb434e55ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import java.util.Collection; import java.util.List; @@ -10,18 +10,18 @@ public class ColumnOrientedBlock extends BaseBlock { public ColumnOrientedBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); } public int numColumns() { - Collection dt = getData(); + Collection dt = getData(); return dt == null ? 0 : dt.size(); } public int numRows() { if (numColumns() > 0) { - ClickhouseColumn firstColumn = getData().iterator().next(); + ClickhouseColumnReader firstColumn = getData().iterator().next(); return firstColumn.nRows(); } else { return 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 5b0d2cb803..58472bcc18 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -3,7 +3,7 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; @@ -15,6 +15,7 @@ public class RowOrientedBlock { private final List data; private final BlockInfo blockInfo; private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseColumnWriter[] writers; public RowOrientedBlock(RowDesc rowDesc, List data, ClickhouseNativeDatabaseMetadata md) { @@ -22,6 +23,17 @@ public RowOrientedBlock(RowDesc rowDesc, this.data = data; this.blockInfo = new BlockInfo(); this.md = md; + this.writers = buildWriters(); + } + + private ClickhouseColumnWriter[] buildWriters() { + ClickhouseColumnWriter[] ret = new ClickhouseColumnWriter[nColumns()]; + for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { + ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseColumnWriter writer = ClickhouseColumns.columnForSpec(descr, md).writer(data, columnIndex); + ret[columnIndex] = writer; + } + return ret; } public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toRow) { @@ -36,10 +48,9 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //TODO smagellan for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); - ClickhouseColumn column = ClickhouseColumns.columnForSpec(descr, nRows, md); sink.writePascalString(descr.name()); sink.writePascalString(descr.getUnparsedNativeType()); - column.serializeColumn(sink, columnIndex, data, fromRow, toRow); + writers[columnIndex].serializeColumn(sink, fromRow, toRow); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 3c8a2358fa..b7276845de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -3,10 +3,16 @@ public interface ClickhouseStreamDataSink { void writeULeb128(int value); void writeByte(int value); + void writeShortLE(int value); void writeIntLE(int value); + void writeLongLE(long value); + void writeFloatLE(float value); + void writeDoubleLE(double value); void writeBytes(byte[] value); void writeBoolean(boolean value); + void writeZero(int length); void writePascalString(String value); + void ensureWritable(int size); default void finish() { } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 55f9cd10f7..1c7178089e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -4,7 +4,7 @@ import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,11 +25,11 @@ public class ColumnOrientedBlockReader { private Integer nColumns; private Integer nRows; private Map colWithTypes; - private List data; + private List data; private String colName; private String colType; - private ClickhouseColumn columnData; + private ClickhouseColumnReader columnData; private ClickhouseNativeColumnDescriptor columnDescriptor; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows, md); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 5de074526f..187a2f1af8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -37,6 +37,26 @@ public void writeByte(int value) { tmpStorage.writeByte(value); } + @Override + public void writeShortLE(int value) { + tmpStorage.writeShortLE(value); + } + + @Override + public void writeLongLE(long value) { + tmpStorage.writeLongLE(value); + } + + @Override + public void writeFloatLE(float value) { + tmpStorage.writeFloatLE(value); + } + + @Override + public void writeDoubleLE(double value) { + tmpStorage.writeDoubleLE(value); + } + @Override public void writeIntLE(int value) { tmpStorage.writeIntLE(value); @@ -52,11 +72,21 @@ public void writeBoolean(boolean value) { tmpStorage.writeBoolean(value); } + @Override + public void writeZero(int length) { + tmpStorage.writeZero(length); + } + @Override public void writePascalString(String str) { ByteBufUtils.writePascalString(str, tmpStorage); } + @Override + public void ensureWritable(int size) { + tmpStorage.ensureWritable(size); + } + @Override public void finish() { ByteBuf compressed = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 1177e27388..6e23a60d3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -28,7 +28,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; - this.decompressedData = alloc.buffer(); + this.decompressedData = alloc.heapBuffer(); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 7f5a920e20..877a91824c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -19,6 +19,26 @@ public void writeByte(int value) { sink.writeByte(value); } + @Override + public void writeShortLE(int value) { + sink.writeShortLE(value); + } + + @Override + public void writeLongLE(long value) { + sink.writeLongLE(value); + } + + @Override + public void writeFloatLE(float value) { + sink.writeFloatLE(value); + } + + @Override + public void writeDoubleLE(double value) { + sink.writeDoubleLE(value); + } + @Override public void writeIntLE(int value) { sink.writeIntLE(value); @@ -34,8 +54,18 @@ public void writeBoolean(boolean value) { sink.writeBoolean(value); } + @Override + public void writeZero(int length) { + sink.writeZero(length); + } + @Override public void writePascalString(String str) { ByteBufUtils.writePascalString(str, sink); } + + @Override + public void ensureWritable(int size) { + sink.ensureWritable(size); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index e38e8a5ef2..6ca8475b71 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -2,201 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.sql.JDBCType; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.Iterator; import java.util.List; -import java.util.Map; public class ArrayColumn extends ClickhouseColumn { - private static final Object[] EMPTY_ARRAY = new Object[0]; - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; - - private Deque, Integer>> graphLevelDeque; - private List> slicesSeries; - private List curSlice; - private Integer curDepth; - private ClickhouseNativeColumnDescriptor curNestedColumnDescr; - private ClickhouseColumn curNestedColumn; - private Integer nItems; - private boolean resliced; - private Object statePrefix; - private boolean hasFirstSlice; - private int sliceIdxAtCurrentDepth; - private int prevSliceSizeAtCurrentDepth = 0; - private Triplet, Integer> slicesAtCurrentDepth; - - public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr.copyAsNestedArray()); + public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); this.md = md; - this.elementaryDescr = elementaryDescr(columnDescriptor); - } - - private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; } @Override - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - ClickhouseColumn statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, 0, md); - if (statePrefix == null) { - statePrefix = statePrefixColumn.readStatePrefix(in); - } - return statePrefix; + public ClickhouseColumnReader reader(int nRows) { + return new ArrayColumnReader(nRows, descriptor, md); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (graphLevelDeque == null) { - graphLevelDeque = new ArrayDeque<>(); - graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); - slicesSeries = new ArrayList<>(); - curSlice = new ArrayList<>(); - curDepth = 0; - curNestedColumnDescr = columnDescriptor.getNestedDescr(); - nItems = 0; - } - if (statePrefix == null) { - return null; - } - readSlices(in); - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } - if (curNestedColumnDescr.isNullable()) { - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); - } - if (nItems > 0) { - assert nItems == curNestedColumn.nRows; - if (curNestedColumn.getClass() == LowCardinalityColumn.class) { - ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; - } - if (curNestedColumn.isPartial()) { - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); - if (curNestedColumn.isPartial()) { - return null; - } - } - if (elementaryDescr.jdbcType() == JDBCType.VARCHAR - || curNestedColumn.getClass() == Enum8Column.class - || curNestedColumn.getClass() == Enum16Column.class) { - return curNestedColumn.itemsArray; - } - resliced = true; - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); - } - resliced = true; - return resliceIntoArray(EMPTY_ARRAY); - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object[] objectsArray = (Object[]) this.itemsArray; - Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); - return reslicedRet[rowIdx]; - } - - private Object[] asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { - return stringifyByteArrays(src, md.getStringCharset()); - } - return src; - } - - private Object[] stringifyByteArrays(Object[] src, Charset charset) { - Object[] ret = new Object[src.length]; - for (int i = 0; i < src.length; ++i) { - Object element = src[i]; - if (element != null) { - ret[i] = new String((byte[]) element, charset); - } - } - return ret; - } - - private Object[] resliceIntoArray(Object[] data) { - Object[] intermData = data; - for (int i = slicesSeries.size() - 1; i >= 0; --i) { - List slices = slicesSeries.get(i); - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = new Object[slices.size() - 1]; - int tmpSliceIdx = 0; - while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliceSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); - newDataList[tmpSliceIdx] = resliced; - ++tmpSliceIdx; - } - intermData = newDataList; - } - return intermData; - } - - private void readSlices(ClickhouseStreamDataSource in) { - if (!hasFirstSlice) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - hasFirstSlice = readSlice(in, slicesAtCurrentDepth); - } - - while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { - if (sliceIdxAtCurrentDepth == 0) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - - curDepth = slicesAtCurrentDepth.right(); - slicesSeries.add(curSlice); - - //The last element in slice is index(number) of the last - //element in current level. On the last iteration this - //represents number of elements in fully flattened array. - nItems = curSlice.get(curSlice.size() - 1); - curSlice = new ArrayList<>(); - } - if (curNestedColumnDescr.isArray()) { - readSlice(in, slicesAtCurrentDepth); - } - } - } - - private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { - if (sliceIdxAtCurrentDepth == 0) { - curSlice.add(0); - } - for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { - int size = sliceState.middle().get(sliceIdxAtCurrentDepth); - int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; - if (in.readableBytes() < nestedSizeCount * 8) { - return false; - } - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); - } - nestedSizes.add((int) sz); - } - curSlice.addAll(nestedSizes); - prevSliceSizeAtCurrentDepth = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); - } - sliceIdxAtCurrentDepth = 0; - prevSliceSizeAtCurrentDepth = 0; - return true; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java new file mode 100644 index 0000000000..53c8b9b53d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -0,0 +1,202 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.nio.charset.Charset; +import java.sql.JDBCType; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Object[] EMPTY_ARRAY = new Object[0]; + + private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + + private Deque, Integer>> graphLevelDeque; + private List> slicesSeries; + private List curSlice; + private Integer curDepth; + private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private ClickhouseColumnReader curNestedColumn; + private Integer nItems; + private boolean resliced; + private Object statePrefix; + private boolean hasFirstSlice; + private int sliceIdxAtCurrentDepth; + private int prevSliceSizeAtCurrentDepth = 0; + private Triplet, Integer> slicesAtCurrentDepth; + + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descr.copyAsNestedArray()); + this.md = md; + this.elementaryDescr = elementaryDescr(columnDescriptor); + } + + private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, md).reader(0); + if (statePrefix == null) { + statePrefix = statePrefixColumn.readStatePrefix(in); + } + return statePrefix; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (graphLevelDeque == null) { + graphLevelDeque = new ArrayDeque<>(); + graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + slicesSeries = new ArrayList<>(); + curSlice = new ArrayList<>(); + curDepth = 0; + curNestedColumnDescr = columnDescriptor.getNestedDescr(); + nItems = 0; + } + if (statePrefix == null) { + return null; + } + readSlices(in); + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md).reader(nItems); + } + if (curNestedColumnDescr.isNullable()) { + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } + if (nItems > 0) { + assert nItems == curNestedColumn.nRows; + if (curNestedColumn.getClass() == LowCardinalityColumnReader.class) { + ((LowCardinalityColumnReader)curNestedColumn).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + } + if (curNestedColumn.isPartial()) { + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + return null; + } + } + if (elementaryDescr.jdbcType() == JDBCType.VARCHAR + || curNestedColumn.getClass() == Enum8ColumnReader.class + || curNestedColumn.getClass() == Enum16ColumnReader.class) { + return curNestedColumn.itemsArray; + } + resliced = true; + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + } + resliced = true; + return resliceIntoArray(EMPTY_ARRAY); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object[] objectsArray = (Object[]) this.itemsArray; + Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + return reslicedRet[rowIdx]; + } + + private Object[] asDesiredType(Object[] src, Class desired) { + if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { + return stringifyByteArrays(src, md.getStringCharset()); + } + return src; + } + + private Object[] stringifyByteArrays(Object[] src, Charset charset) { + Object[] ret = new Object[src.length]; + for (int i = 0; i < src.length; ++i) { + Object element = src[i]; + if (element != null) { + ret[i] = new String((byte[]) element, charset); + } + } + return ret; + } + + private Object[] resliceIntoArray(Object[] data) { + Object[] intermData = data; + for (int i = slicesSeries.size() - 1; i >= 0; --i) { + List slices = slicesSeries.get(i); + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = new Object[slices.size() - 1]; + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliceSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); + newDataList[tmpSliceIdx] = resliced; + ++tmpSliceIdx; + } + intermData = newDataList; + } + return intermData; + } + + private void readSlices(ClickhouseStreamDataSource in) { + if (!hasFirstSlice) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + } + + while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { + if (sliceIdxAtCurrentDepth == 0) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + + curDepth = slicesAtCurrentDepth.right(); + slicesSeries.add(curSlice); + + //The last element in slice is index(number) of the last + //element in current level. On the last iteration this + //represents number of elements in fully flattened array. + nItems = curSlice.get(curSlice.size() - 1); + curSlice = new ArrayList<>(); + } + if (curNestedColumnDescr.isArray()) { + readSlice(in, slicesAtCurrentDepth); + } + } + } + + private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { + if (sliceIdxAtCurrentDepth == 0) { + curSlice.add(0); + } + for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { + int size = sliceState.middle().get(sliceIdxAtCurrentDepth); + int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; + if (in.readableBytes() < nestedSizeCount * 8) { + return false; + } + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + } + nestedSizes.add((int) sz); + } + curSlice.addAll(nestedSizes); + prevSliceSizeAtCurrentDepth = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + } + sliceIdxAtCurrentDepth = 0; + prevSliceSizeAtCurrentDepth = 0; + return true; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index ddabf6689d..7dc34b0675 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,160 +1,18 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.Tuple; -import java.util.BitSet; import java.util.List; public abstract class ClickhouseColumn { - private static final Object NOP_STATE = new Object(); + protected ClickhouseNativeColumnDescriptor descriptor; - protected final int nRows; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; - protected BitSet nullsMap; - protected Object itemsArray; - - protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - this.columnDescriptor = columnDescriptor; - this.nRows = nRows; - } - - public ClickhouseNativeColumnDescriptor columnDescriptor() { - return columnDescriptor; - } - - public void readColumn(ClickhouseStreamDataSource in){ - readStatePrefix(in); - readData(in); - } - - public int nRows() { - return nRows; - } - - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - return NOP_STATE; + public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { + this.descriptor = descriptor; } - protected void readData(ClickhouseStreamDataSource in) { - if (columnDescriptor.isNullable() && nullsMap == null) { - nullsMap = readNullsMap(in); - if (nullsMap == null) { - return; - } - } - readDataInternal(in); - } - - protected void readDataInternal(ClickhouseStreamDataSource in) { - if (itemsArray == null) { - itemsArray = readItems(in); - if (itemsArray == null) { - return; - } - } - afterReadItems(in); - } + public abstract ClickhouseColumnReader reader(int nRows); - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { - itemsArray = readItems(in); - return asObjectsArray(desired); - } - - protected Object[] asObjectsArray(Class desired) { - return (Object[]) itemsArray; - } - - protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = new Object[nRows]; - for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i, desired); - } - return ret; - } - - protected abstract Object readItems(ClickhouseStreamDataSource in); - protected void afterReadItems(ClickhouseStreamDataSource in) { - } - - protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= nRows) { - BitSet bSet = new BitSet(nRows); - for (int i = 0; i < nRows; ++i) { - byte b = in.readByte(); - if (b != 0) { - bSet.set(i); - } - } - return bSet; - } - return null; - } - - public boolean isPartial() { - return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); - } - - public Object getItemsArray() { - return itemsArray; - } - - public Object getElement(int rowIdx, Class desired) { - if (nullsMap != null && nullsMap.get(rowIdx)) { - return null; - } - return getElementInternal(rowIdx, desired); - } - - protected Object getElementInternal(int rowIdx, Class desired) { - return java.lang.reflect.Array.get(itemsArray, rowIdx); - } - - protected Object getObjectsArrayElement(int rowIdx) { - Object[] data = (Object[]) itemsArray; - return data[rowIdx]; - } - - public void serializeColumn(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - serializeStatePrefix(sink, columnIndex, data, fromRow, toRow); - serializeData(sink, columnIndex, data, fromRow, toRow); - } - - protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - } - - protected void serializeData(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - if (columnDescriptor.isNullable()) { - serializeNullsMap(sink, columnIndex, data, fromRow, toRow); - } - serializeDataInternal(sink, columnIndex, data, fromRow, toRow); - } - - protected void serializeNullsMap(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { - Object val = data.get(rowNo).getValue(columnIndex); - sink.writeBoolean(val == null); - } - } - - protected void serializeDataInternal(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { - Object val = data.get(rowNo).getValue(columnIndex); - if (val == null) { - serializeDataNull(sink); - } else { - serializeDataElement(sink, val); - } - } - } - - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - throw new IllegalStateException("not implemented"); - } - - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - throw new IllegalStateException("not implemented"); - } + public abstract ClickhouseColumnWriter writer(List data, int columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java new file mode 100644 index 0000000000..a75bcefcae --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -0,0 +1,122 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.BitSet; +import java.util.List; + +public abstract class ClickhouseColumnReader { + private static final Object NOP_STATE = new Object(); + + protected final int nRows; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected BitSet nullsMap; + protected Object itemsArray; + + protected ClickhouseColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + this.columnDescriptor = columnDescriptor; + this.nRows = nRows; + } + + public ClickhouseNativeColumnDescriptor columnDescriptor() { + return columnDescriptor; + } + + public void readColumn(ClickhouseStreamDataSource in){ + readStatePrefix(in); + readData(in); + } + + public int nRows() { + return nRows; + } + + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + return NOP_STATE; + } + + protected void readData(ClickhouseStreamDataSource in) { + if (columnDescriptor.isNullable() && nullsMap == null) { + nullsMap = readNullsMap(in); + if (nullsMap == null) { + return; + } + } + readDataInternal(in); + } + + protected void readDataInternal(ClickhouseStreamDataSource in) { + if (itemsArray == null) { + itemsArray = readItems(in); + if (itemsArray == null) { + return; + } + } + afterReadItems(in); + } + + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { + itemsArray = readItems(in); + return asObjectsArray(desired); + } + + protected Object[] asObjectsArray(Class desired) { + return (Object[]) itemsArray; + } + + protected Object[] asObjectsArrayWithGetElement(Class desired) { + Object[] ret = new Object[nRows]; + for (int i = 0; i < nRows; ++i) { + ret[i] = getElement(i, desired); + } + return ret; + } + + protected abstract Object readItems(ClickhouseStreamDataSource in); + protected void afterReadItems(ClickhouseStreamDataSource in) { + } + + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= nRows) { + BitSet bSet = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + byte b = in.readByte(); + if (b != 0) { + bSet.set(i); + } + } + return bSet; + } + return null; + } + + public boolean isPartial() { + return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); + } + + public Object getItemsArray() { + return itemsArray; + } + + public Object getElement(int rowIdx, Class desired) { + if (nullsMap != null && nullsMap.get(rowIdx)) { + return null; + } + return getElementInternal(rowIdx, desired); + } + + protected Object getElementInternal(int rowIdx, Class desired) { + return java.lang.reflect.Array.get(itemsArray, rowIdx); + } + + protected Object getObjectsArrayElement(int rowIdx) { + Object[] data = (Object[]) itemsArray; + return data[rowIdx]; + } + + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java new file mode 100644 index 0000000000..60f5d8c18a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -0,0 +1,70 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public abstract class ClickhouseColumnWriter { + protected final List data; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final int columnIndex; + + public ClickhouseColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + this.data = data; + this.columnDescriptor = columnDescriptor; + this.columnIndex = columnIndex; + } + + public void serializeColumn(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + serializeStatePrefix(sink, fromRow, toRow); + serializeData(sink, fromRow, toRow); + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + protected void serializeData(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + ensureCapacity(sink, fromRow, toRow); + if (columnDescriptor.isNullable()) { + serializeNullsMap(sink, fromRow, toRow); + } + serializeDataInternal(sink, fromRow, toRow); + } + + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + int nRows = toRow - fromRow; + int requiredSize = 0; + if (columnDescriptor.isNullable() && !columnDescriptor.isLowCardinality()) { + requiredSize += nRows; + } + if (columnDescriptor.getElementSize() > 0) { + requiredSize += nRows * columnDescriptor.getElementSize(); + } + sink.ensureWritable(requiredSize); + } + + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + sink.writeBoolean(val == null); + } + } + + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + if (val == null) { + serializeDataNull(sink); + } else { + serializeDataElement(sink, val); + } + } + } + + protected abstract void serializeDataElement(ClickhouseStreamDataSink sink, Object val); + + //TODO: maybe perform ByteBuf.writerIndex(writerIndex() + elemSize) (is allocated memory is zero-filled ?) + protected abstract void serializeDataNull(ClickhouseStreamDataSink sink); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index ac86c3d08c..e60bbb5ac7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -54,20 +54,20 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32Column.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, @@ -78,13 +78,13 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumn.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); @@ -99,58 +99,58 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("Nothing".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float32".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float64".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); } else if ("Date".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } private static int decimalSize(int precision) { - if (precision <= Decimal32Column.MAX_PRECISION) { - return Decimal32Column.ELEMENT_SIZE; - } else if (precision <= Decimal64Column.MAX_PRECISION) { - return Decimal64Column.ELEMENT_SIZE; - } else if (precision <= Decimal128Column.MAX_PRECISION) { - return Decimal128Column.ELEMENT_SIZE; + if (precision <= Decimal32ColumnReader.MAX_PRECISION) { + return Decimal32ColumnReader.ELEMENT_SIZE; + } else if (precision <= Decimal64ColumnReader.MAX_PRECISION) { + return Decimal64ColumnReader.ELEMENT_SIZE; + } else if (precision <= Decimal128ColumnReader.MAX_PRECISION) { + return Decimal128ColumnReader.ELEMENT_SIZE; } else { - return Decimal256Column.ELEMENT_SIZE; + return Decimal256ColumnReader.ELEMENT_SIZE; } } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { - return new ArrayColumn(nRows, descr, md); + return new ArrayColumn(descr, md); } if (descr.isLowCardinality()) { - return new LowCardinalityColumn(nRows, descr, md); + return new LowCardinalityColumn(descr, md); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { - return new UInt8Column(nRows, descr); + return new UInt8Column(descr); } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nRows, descr); + return new UInt16Column(descr); } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nRows, descr); + return new UInt32Column(descr); } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { - return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { - return new UInt128Column(nRows, descr); + if (descr.getElementSize() == UInt64ColumnReader.ELEMENT_SIZE) { + return new UInt64Column(descr); + } else if (descr.getElementSize() == UInt128ColumnReader.ELEMENT_SIZE) { + return new UInt128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr, md); + return new StringColumn(descr, md); } else { - return new FixedStringColumn(nRows, descr, md); + return new FixedStringColumn(descr, md); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; @@ -159,7 +159,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { + if (descr.getElementSize() == DateTime64ColumnReader.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); precision = Integer.parseInt(modifiers[0].trim()); zoneId = modifiers.length == 2 @@ -171,33 +171,33 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else { zoneId = ZoneId.systemDefault(); } - return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { - return new Decimal32Column(nRows, descr); - } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { - return new Decimal64Column(nRows, descr); - } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { - return new Decimal128Column(nRows, descr); - } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { - return new Decimal256Column(nRows, descr); + if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { + return new Decimal32Column(descr); + } else if (descr.getElementSize() == Decimal64ColumnReader.ELEMENT_SIZE) { + return new Decimal64Column(descr); + } else if (descr.getElementSize() == Decimal128ColumnReader.ELEMENT_SIZE) { + return new Decimal128Column(descr); + } else if (descr.getElementSize() == Decimal256ColumnReader.ELEMENT_SIZE) { + return new Decimal256Column(descr); } } else if (jdbcType == JDBCType.REAL) { - return new Float32Column(nRows, descr); + return new Float32Column(descr); } else if (jdbcType == JDBCType.DOUBLE) { - return new Float64Column(nRows, descr); + return new Float64Column(descr); } else if (jdbcType == JDBCType.DATE) { - return new DateColumn(nRows, descr); + return new DateColumn(descr); } else if (jdbcType == JDBCType.OTHER) { if (descr.getNestedType().equals("UUID")) { - return new UUIDColumn(nRows, descr); + return new UUIDColumn(descr); } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { Map enumVals = parseEnumVals(descr.getNestedType()); - if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { - return new Enum8Column(nRows, descr, enumVals); - } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { - return new Enum16Column(nRows, descr, enumVals); + if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { + return new Enum8Column(descr, enumVals); + } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { + return new Enum16Column(descr, enumVals); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index eed4530d4a..8378dde862 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,19 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; -import java.time.LocalDate; +import java.util.List; -public class DateColumn extends UInt16Column { - public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); +public class DateColumn extends ClickhouseColumn { + public DateColumn(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new DateColumnReader(nRows, descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Integer offset = (Integer) super.getElementInternal(rowIdx, desired); - return MIN_DATE.plusDays(offset); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java new file mode 100644 index 0000000000..bc9310b0d7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -0,0 +1,19 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.LocalDate; + +public class DateColumnReader extends UInt16ColumnReader { + public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + + public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Integer offset = (Integer) super.getElementInternal(rowIdx, desired); + return MIN_DATE.plusDays(offset); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 70516acb46..cdc8c7dfc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,42 +1,28 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; -import java.time.Instant; -import java.time.OffsetDateTime; import java.time.ZoneId; +import java.util.List; public class DateTime64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - + private final Integer precision; private final ZoneId zoneId; - private final BigInteger invTickSize; - public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { - super(nRows, descr); + public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, ZoneId zoneId) { + super(descriptor); + this.precision = precision; this.zoneId = zoneId; - this.invTickSize = BigInteger.TEN.pow(precision); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - OffsetDateTime[] data = new OffsetDateTime[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); - long seconds = bi.divide(invTickSize).longValueExact(); - long nanos = bi.remainder(invTickSize).longValueExact(); - OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); - data[i] = dt; - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new DateTime64ColumnReader(nRows, descriptor, precision, zoneId); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java new file mode 100644 index 0000000000..8214d9086b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigInteger; +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; + +public class DateTime64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + private final ZoneId zoneId; + private final BigInteger invTickSize; + + public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + OffsetDateTime[] data = new OffsetDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + BigInteger bi = UInt64ColumnReader.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); + OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); + data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index b28c66f70a..70922b259c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,37 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.time.Instant; -import java.time.OffsetDateTime; import java.time.ZoneId; +import java.util.List; public class DateTimeColumn extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - private final ZoneId zoneId; - public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { - super(nRows, descr); + public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { + super(descriptor); this.zoneId = zoneId; } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - OffsetDateTime[] data = new OffsetDateTime[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); - OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); - data[i] = dt; - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new DateTimeColumnReader(nRows, descriptor, zoneId); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java new file mode 100644 index 0000000000..9b384bb903 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; + +public class DateTimeColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + private final ZoneId zoneId; + + public DateTimeColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + OffsetDateTime[] data = new OffsetDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); + OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); + data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 29776ae004..7d4b29df8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; -//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class Decimal128Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; - public static final int MAX_PRECISION = 38; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal128ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java new file mode 100644 index 0000000000..a5ab29014d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 +public class Decimal128ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 8efda94298..2c60ee025a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; -//Looks like support is experimental at the moment public class Decimal256Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 32; - public static final int MAX_PRECISION = 76; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal256ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java new file mode 100644 index 0000000000..e813a128c2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//Looks like support is experimental at the moment +public class Decimal256ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal256ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 5201c6642b..08661ed7c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,38 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; public class Decimal32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - public static final int MAX_PRECISION = 9; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal32ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - int item = in.readIntLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java new file mode 100644 index 0000000000..9a9b0307cd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -0,0 +1,38 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + int item = in.readIntLE(); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 52516e330c..6c5d66038d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,38 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; public class Decimal64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - public static final int MAX_PRECISION = 18; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal64ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long item = in.readLongLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java new file mode 100644 index 0000000000..841fd543e2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -0,0 +1,38 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long item = in.readLongLE(); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 466498a7b2..e52519cbae 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,21 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; +import java.util.List; import java.util.Map; -public class Enum16Column extends UInt16Column { - public static final int ELEMENT_SIZE = 2; - private final Map enumVals; +public class Enum16Column extends ClickhouseColumn { + private final Map enumVals; - public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { - super(nRows, descr); - this.enumVals = (Map) enumVals; + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + super(descriptor); + this.enumVals = enumVals; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Short key = (Short) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + public ClickhouseColumnReader reader(int nRows) { + return new Enum16ColumnReader(nRows, descriptor, enumVals); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java new file mode 100644 index 0000000000..041070b7db --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum16ColumnReader extends UInt16ColumnReader { + public static final int ELEMENT_SIZE = 2; + private final Map enumVals; + + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Short key = (Short) super.getElementInternal(rowIdx, desired); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 8d2d355457..a54673c121 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,21 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; +import java.util.List; import java.util.Map; -public class Enum8Column extends UInt8Column { - public static final int ELEMENT_SIZE = 1; - private final Map enumVals; +public class Enum8Column extends ClickhouseColumn { + private final Map enumVals; - public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { - super(nRows, descr); - this.enumVals = (Map) enumVals; + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + super(descriptor); + this.enumVals = enumVals; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + public ClickhouseColumnReader reader(int nRows) { + return new Enum8ColumnReader(nRows, descriptor, enumVals); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java new file mode 100644 index 0000000000..44693da31b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum8ColumnReader extends UInt8ColumnReader { + public static final int ELEMENT_SIZE = 1; + private final Map enumVals; + + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Byte key = (Byte) super.getElementInternal(rowIdx, desired); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 0998feb594..ea39af6474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -2,51 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.util.ArrayList; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - private final Charset charset; - - private List elements; - - protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, columnDescriptor); - this.elements = new ArrayList<>(nRows); - this.charset = md.getStringCharset(); + private final ClickhouseNativeDatabaseMetadata md; + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); + this.md = md; } @Override - protected Object[] readItems(ClickhouseStreamDataSource in) { - int elementSize = columnDescriptor.getElementSize(); - while (elements.size() < nRows) { - if (in.readableBytes() < elementSize) { - return null; - } - byte[] stringBytes; - if (nullsMap == null || !nullsMap.get(elements.size())) { - stringBytes = new byte[elementSize]; - in.readBytes(stringBytes); - } else { - in.skipBytes(elementSize); - stringBytes = null; - } - elements.add(stringBytes); - } - Object[] ret = elements.toArray(); - elements = null; - return ret; + public ClickhouseColumnReader reader(int nRows) { + return new FixedStringColumnReader(nRows, descriptor, md); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { - return new String((byte[])tmp, charset); - } - return tmp; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new FixedStringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java new file mode 100644 index 0000000000..759eb253ee --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -0,0 +1,52 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +public class FixedStringColumnReader extends ClickhouseColumnReader { + private final Charset charset; + + private List elements; + + protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, columnDescriptor); + this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); + } + + @Override + protected Object[] readItems(ClickhouseStreamDataSource in) { + int elementSize = columnDescriptor.getElementSize(); + while (elements.size() < nRows) { + if (in.readableBytes() < elementSize) { + return null; + } + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[elementSize]; + in.readBytes(stringBytes); + } else { + in.skipBytes(elementSize); + stringBytes = null; + } + elements.add(stringBytes); + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java new file mode 100644 index 0000000000..79ed29b3b1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.List; + +public class FixedStringColumnWriter extends ClickhouseColumnWriter { + private final Charset charset; + + public FixedStringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.charset = charset; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + int elSize = columnDescriptor.getElementSize(); + if (bytes.length > elSize) { + throw new IllegalArgumentException("fixed string bytes are too long: got " + bytes.length + ", max " + elSize); + } + sink.writeBytes(bytes); + sink.writeZero(elSize - bytes.length); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(columnDescriptor.getElementSize()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index f8d0451ae7..9a82e2779f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,29 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class Float32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; + public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Float32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Float32ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - float[] data = new float[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readFloatLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Float32ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java new file mode 100644 index 0000000000..41afde279e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +public class Float32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + protected Float32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + float[] data = new float[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readFloatLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java new file mode 100644 index 0000000000..f14aae0d23 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class Float32ColumnWriter extends ClickhouseColumnWriter { + public Float32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + float b = ((Number)val).floatValue(); + sink.writeFloatLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeFloatLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 76d0b31343..f05e6c818b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,29 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class Float64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; + public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Float64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Float64ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - double[] data = new double[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readDoubleLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Float64ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java new file mode 100644 index 0000000000..320dd79ff5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + protected Float64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + double[] data = new double[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readDoubleLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java new file mode 100644 index 0000000000..9da9c85f8b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -0,0 +1,25 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class Float64ColumnWriter extends ClickhouseColumnWriter { + public Float64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + double b = number.doubleValue(); + sink.writeDoubleLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeDoubleLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index cfaafaa2b9..9325576d4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -2,127 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; - -import java.util.BitSet; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - public static final long SUPPORTED_SERIALIZATION_VERSION = 1; - private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; - private ClickhouseColumn indexColumn; - private Long serType; - private Long indexSize; - private Long nKeys; - Long keysSerializationVersion; - - private ClickhouseColumn keysColumn; - - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr); - this.indexDescr = descr.copyWithModifiers(false, false); + public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); this.md = md; } @Override - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - if (keysSerializationVersion == null) { - if (in.readableBytes() >= 4) { - keysSerializationVersion = in.readLongLE(); - if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { - throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); - } - } - } - return keysSerializationVersion; - } - - @Override - protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - return null; - } - - @Override - protected void readData(ClickhouseStreamDataSource in) { - if (keysSerializationVersion == null) { - return; - } - if (indexSize == null) { - if (in.readableBytes() < 8 + 8) { - return; - } - serType = in.readLongLE(); - indexSize = in.readLongLE(); - } - if (indexSize > Integer.MAX_VALUE) { - throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); - } - if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue(), md); - } - if (indexColumn.isPartial()) { - indexColumn.readColumn(in); - if (indexColumn.isPartial()) { - return; - } - } - if (nKeys == null) { - if (in.readableBytes() < 8) { - return; - } - nKeys = in.readLongLE(); - } - int keyType = (int)(serType & 0xf); - if (keysColumn == null) { - keysColumn = uintColumn(keyType); - } - keysColumn.readColumn(in); - } - - //called by Array column - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (isPartial()) { - readData(in); - } - return null; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return super.asObjectsArrayWithGetElement(desired); + public ClickhouseColumnReader reader(int nRows) { + return new LowCardinalityColumnReader(nRows, descriptor, md); } @Override - public boolean isPartial() { - return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); - } - - @Override - public Object getElement(int rowIdx, Class desired) { - int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); - if (columnDescriptor.isNullable() && key == 0) { - return null; - } - return indexColumn.getElementInternal(key, desired); - } - - private ClickhouseColumn uintColumn(int code) { - ClickhouseNativeColumnDescriptor tmp; - String name = columnDescriptor.name(); - //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances - if (code == 0) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); - } else if (code == 1) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); - } else if (code == 2) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); - } else if (code == 3) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); - } else { - throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); - } - return ClickhouseColumns.columnForSpec(tmp, nRows, md); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java new file mode 100644 index 0000000000..677bad2ab4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -0,0 +1,127 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.BitSet; + +public class LowCardinalityColumnReader extends ClickhouseColumnReader { + public static final long SUPPORTED_SERIALIZATION_VERSION = 1; + private final ClickhouseNativeColumnDescriptor indexDescr; + private final ClickhouseNativeDatabaseMetadata md; + private ClickhouseColumnReader indexColumn; + private Long serType; + private Long indexSize; + private Long nKeys; + Long keysSerializationVersion; + + private ClickhouseColumnReader keysColumn; + + public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descr); + this.indexDescr = descr.copyWithModifiers(false, false); + this.md = md; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + if (in.readableBytes() >= 4) { + keysSerializationVersion = in.readLongLE(); + if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { + throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); + } + } + } + return keysSerializationVersion; + } + + @Override + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + return null; + } + + @Override + protected void readData(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + return; + } + if (indexSize == null) { + if (in.readableBytes() < 8 + 8) { + return; + } + serType = in.readLongLE(); + indexSize = in.readLongLE(); + } + if (indexSize > Integer.MAX_VALUE) { + throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); + } + if (indexColumn == null) { + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md).reader(indexSize.intValue()); + } + if (indexColumn.isPartial()) { + indexColumn.readColumn(in); + if (indexColumn.isPartial()) { + return; + } + } + if (nKeys == null) { + if (in.readableBytes() < 8) { + return; + } + nKeys = in.readLongLE(); + } + int keyType = (int)(serType & 0xf); + if (keysColumn == null) { + keysColumn = uintColumn(keyType); + } + keysColumn.readColumn(in); + } + + //called by Array column + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (isPartial()) { + readData(in); + } + return null; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return super.asObjectsArrayWithGetElement(desired); + } + + @Override + public boolean isPartial() { + return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); + } + + @Override + public Object getElement(int rowIdx, Class desired) { + int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); + if (columnDescriptor.isNullable() && key == 0) { + return null; + } + return indexColumn.getElementInternal(key, desired); + } + + private ClickhouseColumnReader uintColumn(int code) { + ClickhouseNativeColumnDescriptor tmp; + String name = columnDescriptor.name(); + //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances + if (code == 0) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + } else if (code == 1) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + } else if (code == 2) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + } else if (code == 3) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + } else { + throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); + } + return ClickhouseColumns.columnForSpec(tmp, md).reader(nRows); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a860c5917d..b04ad9b57b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -2,70 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.util.ArrayList; import java.util.List; public class StringColumn extends ClickhouseColumn { - private Integer curStrLength; - private List elements; - private final Charset charset; - - protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descriptor); - this.elements = new ArrayList<>(nRows); - this.charset = md.getStringCharset(); - } - - @Override - protected Object[] readItems(ClickhouseStreamDataSource in) { - while (elements.size() < nRows) { - if (curStrLength == null) { - curStrLength = in.readULeb128(); - if (curStrLength == null) { - return null; - } - } - if (in.readableBytes() < curStrLength) { - return null; - } - byte[] stringBytes; - if (nullsMap == null || !nullsMap.get(elements.size())) { - stringBytes = new byte[curStrLength]; - in.readBytes(stringBytes); - } else { - stringBytes = null; - in.skipBytes(curStrLength); - } - elements.add(stringBytes); - curStrLength = null; - } - Object[] ret = elements.toArray(); - elements = null; - return ret; - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { - return new String((byte[])tmp, charset); - } - return tmp; + private final ClickhouseNativeDatabaseMetadata md; + public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); + this.md = md; } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); - sink.writeULeb128(bytes.length); - sink.writeBytes(bytes); + public ClickhouseColumnReader reader(int nRows) { + return new StringColumnReader(nRows, descriptor, md); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeULeb128(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new StringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java new file mode 100644 index 0000000000..02b503ceb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +public class StringColumnReader extends ClickhouseColumnReader { + private Integer curStrLength; + private List elements; + private final Charset charset; + + protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descriptor); + this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); + } + + @Override + protected Object[] readItems(ClickhouseStreamDataSource in) { + while (elements.size() < nRows) { + if (curStrLength == null) { + curStrLength = in.readULeb128(); + if (curStrLength == null) { + return null; + } + } + if (in.readableBytes() < curStrLength) { + return null; + } + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + } else { + stringBytes = null; + in.skipBytes(curStrLength); + } + elements.add(stringBytes); + curStrLength = null; + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new StringColumnWriter(data, columnDescriptor, charset, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java new file mode 100644 index 0000000000..bfe2493947 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.List; + +public class StringColumnWriter extends ClickhouseColumnWriter { + private final Charset charset; + public StringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.charset = charset; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + sink.writeULeb128(bytes.length); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeULeb128(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 6b575eb78d..cece9b61ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -1,39 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; +import java.util.List; -//experimental support at the moment public class UInt128Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; - - protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + public UInt128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigInteger[] data = new BigInteger[nRows]; - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new UInt128ColumnReader(nRows, descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - return ((BigInteger[]) this.itemsArray)[rowIdx]; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java new file mode 100644 index 0000000000..40845f1f5c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigInteger; + +//experimental support at the moment +public class UInt128ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected UInt128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigInteger[] data = new BigInteger[nRows]; + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return ((BigInteger[]) this.itemsArray)[rowIdx]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index e065f2cc31..322fbf24f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -public class UInt16Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 2; - - public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } +import java.util.List; - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - short[] data = new short[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readShortLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; +public class UInt16Column extends ClickhouseColumn { + public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - short element = ((short[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Short.toUnsignedInt(element); - } - return element; + public ClickhouseColumnReader reader(int nRows) { + return new UInt16ColumnReader(nRows, descriptor); } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt16ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java new file mode 100644 index 0000000000..40326ebf05 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +public class UInt16ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 2; + + public UInt16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + short[] data = new short[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readShortLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + short element = ((short[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return Short.toUnsignedInt(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java new file mode 100644 index 0000000000..016fed04f8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt16ColumnWriter extends ClickhouseColumnWriter { + public UInt16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + short b = ((Number)val).shortValue(); + sink.writeShortLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeShortLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 6c00e5ea79..f1a4c37359 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,55 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -public class UInt32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - - public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - int[] data = new int[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readIntLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } +import java.util.List; - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - int element = ((int[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Integer.toUnsignedLong(element); - } - return element; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); +public class UInt32Column extends ClickhouseColumn { + public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number number = (Number)val; - int b = number == null ? 0 : number.intValue(); - sink.writeIntLE(b); + public ClickhouseColumnReader reader(int nRows) { + return new UInt32ColumnReader(nRows, descriptor); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeIntLE(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt32ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java new file mode 100644 index 0000000000..2c54ca6e8d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + public UInt32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int[] data = new int[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readIntLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + int element = ((int[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return Integer.toUnsignedLong(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt32ColumnWriter(data, columnDescriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java new file mode 100644 index 0000000000..15fdee6b67 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt32ColumnWriter extends ClickhouseColumnWriter { + public UInt32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + int b = ((Number)val).intValue(); + sink.writeIntLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index ad2492e985..af256bacda 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,57 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; +import java.util.List; public class UInt64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - - public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - long[] data = new long[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readLongLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - long element = ((long[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return unsignedBi(element); - } - return element; + public ClickhouseColumnReader reader(int nRows) { + return new UInt64ColumnReader(nRows, descriptor); } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); - } - - static BigInteger unsignedBi(long l) { - return new BigInteger(1, new byte[] { - (byte) (l >>> 56 & 0xFF), - (byte) (l >>> 48 & 0xFF), - (byte) (l >>> 40 & 0xFF), - (byte) (l >>> 32 & 0xFF), - (byte) (l >>> 24 & 0xFF), - (byte) (l >>> 16 & 0xFF), - (byte) (l >>> 8 & 0xFF), - (byte) (l & 0xFF) - }); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt64ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java new file mode 100644 index 0000000000..4d1e641b03 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -0,0 +1,57 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigInteger; + +public class UInt64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + long[] data = new long[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readLongLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + long element = ((long[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return unsignedBi(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + static BigInteger unsignedBi(long l) { + return new BigInteger(1, new byte[] { + (byte) (l >>> 56 & 0xFF), + (byte) (l >>> 48 & 0xFF), + (byte) (l >>> 40 & 0xFF), + (byte) (l >>> 32 & 0xFF), + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java new file mode 100644 index 0000000000..7445baaa8c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt64ColumnWriter extends ClickhouseColumnWriter { + public UInt64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + long b = ((Number)val).longValue(); + sink.writeLongLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeLongLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 5c6a23e07b..f4a35a1133 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,56 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class UInt8Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 1; - - public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - byte[] data = new byte[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readByte(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - byte element = ((byte[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return (short)Byte.toUnsignedInt(element); - } - return element; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number number = (Number)val; - byte b = number == null ? 0 : number.byteValue(); - sink.writeByte(b); + public ClickhouseColumnReader reader(int nRows) { + return new UInt8ColumnReader(nRows, descriptor); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeByte(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt8ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java new file mode 100644 index 0000000000..063e26efb0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt8ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 1; + + public UInt8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + byte[] data = new byte[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readByte(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + byte element = ((byte[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return (short)Byte.toUnsignedInt(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java new file mode 100644 index 0000000000..74f50f546c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt8ColumnWriter extends ClickhouseColumnWriter { + public UInt8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte b = ((Number)val).byteValue(); + sink.writeByte(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeByte(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index d812b91702..ef9fe811fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,32 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.util.UUID; +import java.util.List; public class UUIDColumn extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; + public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected UUIDColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new UUIDColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - UUID[] data = new UUID[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long mostSigBits = in.readLongLE(); - long leastSigBits = in.readLongLE(); - data[i] = new UUID(mostSigBits, leastSigBits); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java new file mode 100644 index 0000000000..ddb8c80cb7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.UUID; + +public class UUIDColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + UUID[] data = new UUID[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index d4e4ea11bf..da79597bfd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -12,11 +12,11 @@ @RunWith(Parameterized.class) -public class ClickhouseColumnsTest { +public class ClickhouseColumnsTestReader { private final String enumDefinition; private final java.util.function.Function converter; - public ClickhouseColumnsTest(String enumType, String enumDefinition, Function converter) { + public ClickhouseColumnsTestReader(String enumType, String enumDefinition, Function converter) { this.enumDefinition = enumDefinition; this.converter = converter; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index b9bcfd63b0..533b217b70 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -11,8 +11,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import java.util.function.BiFunction; - @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @@ -39,7 +37,7 @@ protected String statement(String... parts) { @Ignore @Test public void testTime(TestContext ctx) { - //time is not supported + //no time support } @Test @@ -53,6 +51,7 @@ public void testDouble(TestContext ctx) { testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); } + //no time support, copied and modified test from parent @Test public void testNullValues(TestContext ctx) { connector.connect(ctx.asyncAssertSuccess(conn -> { @@ -101,35 +100,12 @@ public void testNullValues(TestContext ctx) { } @Override - protected void testEncodeGeneric(TestContext ctx, - String columnName, - Class clazz, - BiFunction getter, - T expected) { - connector.connect(ctx.asyncAssertSuccess(conn -> { - conn - .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) - .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { - Sleep.sleepOrThrow(); - conn - .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") - .execute(ctx.asyncAssertSuccess(result -> { - ctx.assertEquals(1, result.size()); - Row row = result.iterator().next(); - ctx.assertEquals(1, row.size()); - ctx.assertEquals(expected, row.getValue(0)); - ctx.assertEquals(expected, row.getValue(columnName)); - if (getter != null) { - ctx.assertEquals(expected, getter.apply(row, columnName)); - } -// ctx.assertEquals(expected, row.get(clazz, 0)); -// ColumnChecker.checkColumn(0, columnName) -// .returns(Tuple::getValue, Row::getValue, expected) -// .returns(byIndexGetter, byNameGetter, expected) -// .forRow(row); - conn.close(); - })); - })); - })); + protected void maybeSleep() { + Sleep.sleepOrThrow(); + } + + @Override + protected String encodeGenericUpdateStatement(String columnName, int id) { + return statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = " + id); } } diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java index 7b8b94a6be..8f86f77240 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java @@ -20,8 +20,6 @@ import java.time.LocalDate; import java.time.LocalTime; import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.function.Supplier; public abstract class BinaryDataTypeEncodeTestBase extends DataTypeTestBase { protected abstract String statement(String... parts); @@ -134,6 +132,13 @@ public void testNullValues(TestContext ctx) { })); } + protected void maybeSleep() { + } + + protected String encodeGenericUpdateStatement(String columnName, int id) { + return statement("UPDATE basicdatatype SET " + columnName + " = ", " WHERE id = " + id); + } + protected void testEncodeGeneric(TestContext ctx, String columnName, Class clazz, @@ -141,8 +146,9 @@ protected void testEncodeGeneric(TestContext ctx, T expected) { connector.connect(ctx.asyncAssertSuccess(conn -> { conn - .preparedQuery(statement("UPDATE basicdatatype SET " + columnName + " = ", " WHERE id = 2")) + .preparedQuery(encodeGenericUpdateStatement(columnName, 2)) .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { + maybeSleep(); conn .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { From f386e033af43a8b179e4fbbb888f21b304bad800 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Mar 2021 21:27:16 +0300 Subject: [PATCH 031/176] finished tck test set Signed-off-by: vladimir --- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../impl/codec/ClickhouseNativeEncoder.java | 29 ++-- .../ClickhouseNativePreparedStatement.java | 8 +- .../codec/CloseStatementCommandCodec.java | 23 ++++ .../impl/codec/ExtendedQueryCommandCodec.java | 5 +- .../impl/codec/PrepareStatementCodec.java | 23 +++- .../impl/codec/QueryParsers.java | 76 +++++++---- .../impl/codec/SimpleQueryCommandCodec.java | 8 +- .../codec/columns/ClickhouseColumnWriter.java | 19 ++- .../codec/columns/StringColumnWriter.java | 19 +++ ...ickhouseNativePreparedQueryCachedTest.java | 125 ++++++++++++++++++ ...ickhouseNativePreparedQueryPooledTest.java | 14 ++ .../ClickhouseNativePreparedQueryTest.java | 13 ++ ...ClickhouseNativePreparedQueryTestBase.java | 116 ++++++++++++++++ ...ClickhouseNativeSimpleQueryPooledTest.java | 46 +++++++ .../tck/ClickhouseNativeSimpleQueryTest.java | 46 +++++++ ...lickhouseNativeTextDataTypeDecodeTest.java | 32 +++++ .../tck/ClickhouseNativeTracingTest.java | 43 ++++++ .../tck/ClickhouseNativeTransactionTest.java | 33 +++++ .../src/test/resources/init.sql | 34 +++++ .../sqlclient/tck/SimpleQueryTestBase.java | 2 +- 21 files changed, 657 insertions(+), 59 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index e0e483b487..b9a98773b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -40,6 +40,6 @@ public static Future connect(ContextInternal ctx, Cl @Override public Future begin() { - throw new UnsupportedOperationException(); + return Future.failedFuture(new UnsupportedOperationException()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 5a1228bd3c..d37e74af9b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -9,6 +9,7 @@ import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; +import java.util.Map; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); @@ -38,11 +39,17 @@ ChannelHandlerContext chctx() { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof CommandBase) { - CommandBase cmd = (CommandBase) msg; - write(cmd); - } else { - super.write(ctx, msg, promise); + CommandBase cmd = null; + try { + if (msg instanceof CommandBase) { + cmd = (CommandBase) msg; + write(cmd); + } else { + super.write(ctx, msg, promise); + } + } catch (Throwable t) { + deliverError(cmd, t); + throw t; } } @@ -67,17 +74,17 @@ void write(CommandBase cmd) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { PrepareStatementCommand ps = (PrepareStatementCommand) cmd; - QueryParsers.QueryType queryType = QueryParsers.queryType(ps.sql()); + Map.Entry queryType = QueryParsers.findKeyWord(ps.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); return new PrepareStatementCodec(ps, queryType); } else if (cmd instanceof ExtendedQueryCommand) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; - QueryParsers.QueryType queryType; + Map.Entry queryType; if (ecmd.preparedStatement() != null) { queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); } else { - queryType = QueryParsers.queryType(ecmd.sql()); + queryType = QueryParsers.findKeyWord(ecmd.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); } - if (queryType != null && queryType != QueryParsers.QueryType.INSERT && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + if (queryType != null && !"insert".equalsIgnoreCase(queryType.getKey()) && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); deliverError(cmd, ex); throw ex; @@ -85,13 +92,15 @@ void write(CommandBase cmd) { return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); + } else if (cmd instanceof CloseStatementCommand) { + return new CloseStatementCommandCodec((CloseStatementCommand) cmd, conn); } RuntimeException ex = new UnsupportedOperationException(cmd.getClass().getName()); deliverError(cmd, ex); throw ex; } - private void deliverError(CommandBase cmd, RuntimeException ex) { + private void deliverError(CommandBase cmd, Throwable ex) { if (cmd instanceof QueryCommandBase) { QueryCommandBase ecmd = (QueryCommandBase)cmd; ecmd.resultHandler().handleResult(0, 0, null, null, ex); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 5032c9b101..b73dfa241a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -6,15 +6,17 @@ import io.vertx.sqlclient.impl.RowDesc; import io.vertx.sqlclient.impl.TupleInternal; +import java.util.Map; + public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; - private final QueryParsers.QueryType queryType; + private final Map.Entry queryType; private final boolean sentQuery; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - QueryParsers.QueryType queryType, boolean sentQuery) { + Map.Entry queryType, boolean sentQuery) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; @@ -42,7 +44,7 @@ public String prepare(TupleInternal values) { return null; } - public QueryParsers.QueryType queryType() { + public Map.Entry queryType() { return queryType; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java new file mode 100644 index 0000000000..613b015ea2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseStatementCommand; +import io.vertx.sqlclient.impl.command.CommandResponse; + +public class CloseStatementCommandCodec extends ClickhouseNativeCommandCodec { + public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + } + + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + completionHandler.handle(CommandResponse.success(null)); + } + + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index ac4d81e2d4..ec173f9ea0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -23,17 +23,16 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(QueryParsers.QueryType queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + public ExtendedQueryCommandCodec(Map.Entry queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - if (queryType != QueryParsers.QueryType.INSERT || !ecmd.isBatch()) { + if ((queryType != null && !"insert".equalsIgnoreCase(queryType.getKey())) || !ecmd.isBatch()) { return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } - //TODO smagellan: handle insert at query prepare stage (PrepareStatementCodec) return ecmd.sql(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 0162ddf313..ccd1e2e153 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -17,11 +17,11 @@ public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); - private final QueryParsers.QueryType queryType; + private final Map.Entry queryType; private PacketReader packetReader; - protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryParsers.QueryType queryType) { + protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { super(cmd); this.queryType = queryType; } @@ -31,8 +31,10 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("handle ready for query"); String sql = cmd.sql(); - if (queryType == QueryParsers.QueryType.INSERT) { - int valuesIndex = sql.toLowerCase().lastIndexOf("values"); + boolean isInsert = queryType != null && "insert".equalsIgnoreCase(queryType.getKey()); + int valuesIndex = 0; + boolean realInsertBatch = isInsert && (valuesIndex = valuesPos(sql, queryType.getValue())) != -1; + if (realInsertBatch) { String truncatedSql = sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); try { @@ -50,6 +52,19 @@ void encode(ClickhouseNativeEncoder encoder) { } } + //TODO smagellan: move to parsers, introduce "InsertQueryInfo" + private static int valuesPos(String sql, int fromPos) { + String sqlLoCase = sql.toLowerCase(); + if (sqlLoCase.endsWith("values")) { + return sql.length() - "values".length(); + } + Map.Entry pos = QueryParsers.findKeyWord(sql, fromPos, Collections.singleton("$")); + if (pos == null) { + return -1; + } + return sqlLoCase.lastIndexOf("values", pos.getValue()); + } + @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 5034ea4bb4..8e63d292b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,16 +3,18 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class QueryParsers { - private static final String[] selectKeywords = new String[]{"SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"}; private static final String INSERT_KEYWORD = "INSERT"; - private static final int INSERT_KEYWORD_LENGTH = INSERT_KEYWORD.length(); - private static final String UPDATE_KEYWORD = "UPDATE"; - private static final int UPDATE_KEYWORD_LENGTH = UPDATE_KEYWORD.length(); + + public static final Set SELECT_KEYWORDS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"))); + public static final Set SELECT_AND_MUTATE_KEYWORDS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN", + INSERT_KEYWORD, UPDATE_KEYWORD))); + //TODO: maybe switch to antlr4 public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { @@ -58,40 +60,58 @@ public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple pa prevIdx = newIdx; } if (usedArgs.size() != paramsList.size()) { - throw new IllegalArgumentException("param count mismatch: query consumed " + + usedArgs.size() + ", but provided count is " + paramsList.size()); + String msg = String.format("The number of parameters to execute should be consistent with the expected number of parameters = [%d] but the actual number is [%d].", + usedArgs.size(), paramsList.size()); + throw new IllegalArgumentException(msg); } bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); return bldr.toString(); } + public static boolean isSelect(String sql) { + Map.Entry tmp = findKeyWord(sql, 0, SELECT_KEYWORDS); + return tmp != null; + } - public static QueryType queryType(String sql) { - for (int i = 0; i < sql.length(); i++) { - String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); - if ("--".equals(nextTwo)) { - i = Math.max(i, sql.indexOf("\n", i)); - } else if ("/*".equals(nextTwo)) { - i = Math.max(i, sql.indexOf("*/", i)); - } else if (Character.isLetter(sql.charAt(i))) { + public static Map.Entry findKeyWord(String sql, Collection keywords) { + return findKeyWord(sql, 0, keywords); + } + + public static Map.Entry findKeyWord(String sql, int startPos, Collection keywords) { + Character requiredChar = null; + //special case to find placeholder + if (keywords.size() == 1) { + String str = keywords.iterator().next(); + if (str.length() == 1) { + requiredChar = str.charAt(0); + } + } + for (int i = startPos; i < sql.length(); i++) { + String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); + if ("--".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("\n", i)); + } else if ("/*".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("*/", i)); + } else if (requiredChar != null && requiredChar == sql.charAt(i)) { + return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); + } else if (sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { + while (i < sql.length() && !(sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\'))) { + ++i; + } + } else { + if (Character.isLetter(sql.charAt(i))) { String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); - for (String keyword : selectKeywords){ + for (String keyword : keywords){ if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { - return QueryType.SELECT; + return new AbstractMap.SimpleEntry<>(keyword, i); } } - if (trimmed.regionMatches(true, 0, INSERT_KEYWORD, 0, INSERT_KEYWORD_LENGTH)) { - return QueryType.INSERT; - } - if (trimmed.regionMatches(true, 0, UPDATE_KEYWORD, 0, UPDATE_KEYWORD_LENGTH)) { - return QueryType.UPDATE; + if (requiredChar == null) { + return null; } - return null; } } - return null; - } - - enum QueryType { - SELECT, INSERT, UPDATE; + } + return null; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 2410dd54b0..c3e30d23d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -17,7 +17,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; - protected final QueryParsers.QueryType queryType; + protected final Map.Entry queryType; protected final int batchSize; private RowResultDecoder rowResultDecoder; @@ -28,7 +28,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryParsers.QueryType queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(Map.Entry queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); this.queryType = queryType; this.batchSize = batchSize; @@ -123,14 +123,14 @@ private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { - LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); + LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { - if (queryType == QueryParsers.QueryType.INSERT) { + if (queryType != null && "insert".equalsIgnoreCase(queryType.getKey())) { rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index 60f5d8c18a..e6408e0fe5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -33,15 +33,24 @@ protected void serializeData(ClickhouseStreamDataSink sink, int fromRow, int toR serializeDataInternal(sink, fromRow, toRow); } - protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { - int nRows = toRow - fromRow; - int requiredSize = 0; + protected int nullsMapSize(int nRows) { if (columnDescriptor.isNullable() && !columnDescriptor.isLowCardinality()) { - requiredSize += nRows; + return nRows; } + return 0; + } + + protected int elementsSize(int fromRow, int toRow) { if (columnDescriptor.getElementSize() > 0) { - requiredSize += nRows * columnDescriptor.getElementSize(); + return (toRow - fromRow) * columnDescriptor.getElementSize(); } + return 0; + } + + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + int requiredSize = 0; + requiredSize += nullsMapSize(toRow - fromRow); + requiredSize += elementsSize(fromRow, toRow); sink.ensureWritable(requiredSize); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index bfe2493947..19f9442d01 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -25,4 +25,23 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { protected void serializeDataNull(ClickhouseStreamDataSink sink) { sink.writeULeb128(0); } + + protected int elementsSize(int fromRow, int toRow) { + //max value, usually less + int sz = (toRow - fromRow) * 4; + for (int i = fromRow; i < toRow; ++i) { + Object el = data.get(i).getValue(columnIndex); + if (el != null) { + if (el.getClass() == byte[].class) { + sz += ((byte[])el).length; + } else { + if (el.getClass() == String.class) { + //min value, more for non-ascii chars + sz += ((String)el).length(); + } + } + } + } + return sz; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java new file mode 100644 index 0000000000..ee5c69fd8c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -0,0 +1,125 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + @Test + @Ignore + public void testQueryCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryStreamCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryStreamCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatch(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatch(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatchFromAnotherThread(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatchFromAnotherThread(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseResume(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseResume(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQuery(TestContext ctx) { + // TODO streaming support + super.testStreamQuery(ctx); + } + + @Override + @Test + @Ignore + public void testPreparedQueryParamCoercionTypeError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPrepareError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithNullParams(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdate(TestContext ctx) { + //Clickhouse does not return real affected row count + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithParams(TestContext ctx) { + //Clickhouse does not return real affected row count + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java new file mode 100644 index 0000000000..efa4d51357 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -0,0 +1,14 @@ +package io.vertx.clickhousenativeclient.tck; + + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryPooledTest extends ClickhouseNativePreparedQueryTestBase { + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.POOLED.connect(vertx, options); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java new file mode 100644 index 0000000000..81d98fbd51 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -0,0 +1,13 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryTest extends ClickhouseNativePreparedQueryTestBase { + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java new file mode 100644 index 0000000000..63852d20a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -0,0 +1,116 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.sqlclient.tck.PreparedQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; + +public abstract class ClickhouseNativePreparedQueryTestBase extends PreparedQueryTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + @Test + @Ignore + public void testQueryCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryStreamCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryStreamCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatch(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatch(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatchFromAnotherThread(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatchFromAnotherThread(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseResume(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseResume(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQuery(TestContext ctx) { + // TODO streaming support + super.testStreamQuery(ctx); + } + + @Override + @Test + @Ignore + public void testPreparedQueryParamCoercionTypeError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPrepareError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithNullParams(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdate(TestContext ctx) { + //Clickhouse does not return real affected row count + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithParams(TestContext ctx) { + //Clickhouse does not return real affected row count + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java new file mode 100644 index 0000000000..c289e53288 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -0,0 +1,46 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.SimpleQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeSimpleQueryPooledTest extends SimpleQueryTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.POOLED.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testDelete(TestContext ctx) { + //no way to return count of altered rows + } + + @Ignore + @Test + public void testInsert(TestContext ctx) { + //no way to return count of inserted rows (can be emulated) + } + + @Ignore + @Test + public void testUpdate(TestContext ctx) { + //no way to return count of altered rows + } + + @Override + protected void cleanTestTable(TestContext ctx) { + super.cleanTestTable(ctx); + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java new file mode 100644 index 0000000000..3bc3e8cf21 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -0,0 +1,46 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.SimpleQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeSimpleQueryTest extends SimpleQueryTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testDelete(TestContext ctx) { + //no way to return count of altered rows + } + + @Ignore + @Test + public void testInsert(TestContext ctx) { + //no way to return count of inserted rows (can be emulated) + } + + @Ignore + @Test + public void testUpdate(TestContext ctx) { + //no way to return count of altered rows + } + + @Override + protected void cleanTestTable(TestContext ctx) { + super.cleanTestTable(ctx); + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java new file mode 100644 index 0000000000..be93099659 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -0,0 +1,32 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.TextDataTypeDecodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //no time support + } + + @Test + public void testBoolean(TestContext ctx) { + testDecodeGeneric(ctx, "test_boolean", Byte.class, (byte)1); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java new file mode 100644 index 0000000000..729ee568da --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -0,0 +1,43 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.tck.TracingTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTracingTest extends TracingTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected Pool createPool(Vertx vertx) { + return ClickhouseNativePool.pool(vertx, rule.options(), new PoolOptions()); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Ignore + @Test + public void testTraceBatchQuery(TestContext ctx) { + //no batch support for SELECTs + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java new file mode 100644 index 0000000000..2e7686d2a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -0,0 +1,33 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.DataTypeTestBase; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTransactionTest extends DataTypeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + + @Test + public void testTransactionsAreNotSupported(TestContext ctx) { + //transactions are not supported by DB at the moment + connector.connect(ctx.asyncAssertSuccess(res1 -> { + res1.begin(ctx.asyncAssertFailure( + err -> { + ctx.assertEquals(UnsupportedOperationException.class, err.getClass()); + } + )); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 752ab455f9..2c643ea1b8 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -98,3 +98,37 @@ CREATE TABLE vertx_cl_test_table `value` UInt32 ) ENGINE = GenerateRandom(1, 5, 3); + +-- Fortune table +DROP TABLE IF EXISTS Fortune; +CREATE TABLE Fortune +( + id Int32, + message String +) engine = MergeTree() + ORDER BY (id); + +INSERT INTO Fortune (id, message) +VALUES (1, 'fortune: No such file or directory'); +INSERT INTO Fortune (id, message) +VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.'); +INSERT INTO Fortune (id, message) +VALUES (3, 'After enough decimal places, nobody gives a damn.'); +INSERT INTO Fortune (id, message) +VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1'); +INSERT INTO Fortune (id, message) +VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.'); +INSERT INTO Fortune (id, message) +VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen'); +INSERT INTO Fortune (id, message) +VALUES (7, 'Any program that runs right is obsolete.'); +INSERT INTO Fortune (id, message) +VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth'); +INSERT INTO Fortune (id, message) +VALUES (9, 'Feature: A bug with seniority.'); +INSERT INTO Fortune (id, message) +VALUES (10, 'Computers make very fast, very accurate mistakes.'); +INSERT INTO Fortune (id, message) +VALUES (11, ''); +INSERT INTO Fortune (id, message) +VALUES (12, 'フレームワークのベンチマーク'); diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java index 0171f46caa..94c788db31 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java @@ -72,7 +72,7 @@ public void tearDown(TestContext ctx) { public void testQuery(TestContext ctx) { connect(ctx.asyncAssertSuccess(conn -> { conn - .query("SELECT id, message from immutable") + .query("SELECT id, message FROM immutable ORDER BY id") .execute(ctx.asyncAssertSuccess(result -> { //TODO we need to figure how to handle PgResult#rowCount() method in common API, // MySQL returns affected rows as 0 for SELECT query but Postgres returns queried amount From bb1c42f930b8180b9b1c9c6f21271d081dd0f6da Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 28 Mar 2021 12:23:22 +0300 Subject: [PATCH 032/176] added LowCardinality encoder Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 7 +- .../clickhousenative/impl/BaseBlock.java | 16 +- .../ClickhouseNativeConnectionFactory.java | 7 + .../ClickhouseNativeDatabaseMetadata.java | 22 +- ...eRow.java => ClickhouseNativeRowImpl.java} | 11 +- .../ClickhouseNativeSocketConnection.java | 52 ++- .../impl/ColumnOrientedBlock.java | 15 +- .../ClickhouseNativePreparedStatement.java | 9 +- .../impl/codec/CloseCursorCommandCodec.java | 2 +- .../codec/CloseStatementCommandCodec.java | 4 + .../impl/codec/DatabaseMetadataReader.java | 9 +- .../impl/codec/ExtendedQueryCommandCodec.java | 8 +- .../codec/Lz4ClickhouseStreamDataSource.java | 82 ++-- .../impl/codec/PacketReader.java | 29 +- .../impl/codec/PrepareStatementCodec.java | 21 +- .../impl/codec/QueryParsers.java | 86 ++++- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../impl/codec/RowResultDecoder.java | 4 +- .../impl/codec/SimpleQueryCommandCodec.java | 14 +- .../impl/codec/columns/ArrayColumn.java | 2 +- .../impl/codec/columns/ArrayColumnWriter.java | 33 ++ .../impl/codec/columns/ClickhouseColumn.java | 4 + .../codec/columns/ClickhouseColumnWriter.java | 8 +- .../impl/codec/columns/ClickhouseColumns.java | 124 +++--- .../impl/codec/columns/FixedStringColumn.java | 3 +- .../impl/codec/columns/IPv4Column.java | 22 ++ .../impl/codec/columns/IPv4ColumnReader.java | 37 ++ .../impl/codec/columns/IPv4ColumnWriter.java | 23 ++ .../impl/codec/columns/IPv6Column.java | 23 ++ .../impl/codec/columns/IPv6ColumnReader.java | 29 ++ .../impl/codec/columns/IntervalColumn.java | 27 ++ .../codec/columns/IntervalColumnReader.java | 23 ++ .../codec/columns/LowCardinalityColumn.java | 2 +- .../columns/LowCardinalityColumnReader.java | 7 +- .../columns/LowCardinalityColumnWriter.java | 152 ++++++++ .../impl/codec/columns/StringColumn.java | 7 + .../impl/codec/columns/UInt8Column.java | 5 + .../columns/ClickhouseColumnsTestReader.java | 3 +- .../clickhousenativeclient/AllTypesTest.java | 152 ++++++++ .../BasicClickhouseTest.java | 32 +- .../ClickhouseResource.java | 4 +- .../PacketReaderReplayTest.java | 16 +- .../vertx/clickhousenativeclient/Sleep.java | 18 + .../SpecialTypesTest.java | 96 +++++ ...ckhouseNativeBinaryDataTypeEncodeTest.java | 1 + .../tck/ClickhouseNativeConnectionTest.java | 11 +- .../ClickhouseNativePreparedBatchTest.java | 1 + ...ickhouseNativePreparedQueryCachedTest.java | 12 +- ...ClickhouseNativeSimpleQueryPooledTest.java | 1 + .../tck/ClickhouseNativeSimpleQueryTest.java | 1 + .../clickhousenativeclient/tck/Sleep.java | 14 - .../src/test/python/gen_all_types_tables.py | 43 +++ ..._testConcurrentClose_with_compression.yaml | 79 ++++ .../src/test/resources/init.sql | 355 ++++++++++++++++++ 54 files changed, 1563 insertions(+), 207 deletions(-) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/{ClickhouseNativeRow.java => ClickhouseNativeRowImpl.java} (84%) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java create mode 100755 vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py create mode 100644 vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 66de120c6f..6476fe8978 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -34,6 +34,10 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_STRING_CHARSET = "string_charset"; + public static final String OPTION_YEAR_DURATION = "days_in_year"; + public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; + public static final String OPTION_MONTH_DURATION = "days_in_month"; + public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; @@ -42,5 +46,6 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET))); + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, + OPTION_MONTH_DURATION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 72c5f8a407..f58d1bb7b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -2,19 +2,23 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.sqlclient.desc.ColumnDescriptor; +import java.util.ArrayList; import java.util.List; import java.util.Map; public class BaseBlock { private final Map columnsWithTypes; + protected final ClickhouseNativeRowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - private final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseNativeDatabaseMetadata md; public BaseBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; + this.rowDesc = buildRowDescriptor(columnsWithTypes); this.data = data; this.blockInfo = blockInfo; this.md = md; @@ -35,4 +39,14 @@ public BlockInfo getBlockInfo() { public ClickhouseNativeDatabaseMetadata getMd() { return md; } + + public ClickhouseNativeRowDesc rowDesc() { + return rowDesc; + } + + private ClickhouseNativeRowDesc buildRowDescriptor(Map columnsWithTypes) { + List columnNames = new ArrayList<>(columnsWithTypes.keySet()); + List columnTypes = new ArrayList<>(columnsWithTypes.values()); + return new ClickhouseNativeRowDesc(columnNames, columnTypes); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 921ffae46c..c4a0d6d828 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -5,6 +5,8 @@ import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; import io.vertx.core.net.NetSocket; import io.vertx.core.net.impl.NetSocketInternal; @@ -15,6 +17,8 @@ import net.jpountz.lz4.LZ4Factory; public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); + private int pipeliningLimit; private final LZ4Factory lz4Factory; @@ -35,6 +39,9 @@ private LZ4Factory lz4FactoryForName(String name) { } else if ("lz4_unsafe".equals(name)) { return LZ4Factory.unsafeInstance(); } + if (!"none".equals(name)) { + LOG.warn("unknown compressor name '" + name + "', ignored"); + } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 45d1644c34..7951322b8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -3,6 +3,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; import java.nio.charset.Charset; +import java.time.Duration; import java.time.ZoneId; import java.util.Map; @@ -18,10 +19,14 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String fullClientName; private final Charset stringCharset; private final Map properties; + private final Duration yearDuration; + private final Duration quarterDuration; + private final Duration monthDuration; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties, Charset stringCharset) { + Map properties, Charset stringCharset, Duration yearDuration, + Duration quarterDuration, Duration monthDuration) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -33,6 +38,9 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.fullClientName = fullClientName; this.properties = properties; this.stringCharset = stringCharset; + this.yearDuration = yearDuration; + this.quarterDuration = quarterDuration; + this.monthDuration = monthDuration; } @Override @@ -83,6 +91,18 @@ public Charset getStringCharset() { return stringCharset; } + public Duration yearDuration() { + return yearDuration; + } + + public Duration quarterDuration() { + return quarterDuration; + } + + public Duration monthDuration() { + return monthDuration; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index a7074712c8..3a527c4ea1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -5,15 +5,17 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; +import java.sql.JDBCType; import java.util.List; +import java.util.Objects; -public class ClickhouseNativeRow implements Row { +public class ClickhouseNativeRowImpl implements Row { private final int rowNo; private final Charset stringCharset; private final ClickhouseNativeRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { + public ClickhouseNativeRowImpl(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; @@ -40,11 +42,6 @@ private Object getValue(int columnIndex, Class desired) { ClickhouseColumnReader column = data.get(columnIndex); Object columnData = column.getElement(rowNo, desired); return columnData; - //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { - // return new String((byte[]) columnData, stringCharset); - //} else { - // return columnData; - //} } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 0d771cd245..48f95b1d8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -12,12 +12,14 @@ import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.function.Predicate; public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; - private String pendingCursorId; + private UUID psId; + private String ourCursorId; private final LZ4Factory lz4Factory; @@ -49,25 +51,49 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { this.md = md; } - public void setPendingCursorId(String cursorId) { - this.pendingCursorId = cursorId; + public void lockPsOrThrow(UUID newPsId) { + if (psId == null) { + psId = newPsId; + } else { + if (newPsId != null) { + if (!Objects.equals(psId, newPsId)) { + throw new IllegalStateException("attempt to block blocked (" + psId + ") connection by ps" + newPsId); + } + } + } } - public String getPendingCursorId() { - return pendingCursorId; + public void lockCursorOrThrow(UUID psId, String newCursorId) { + lockPsOrThrow(psId); + if (ourCursorId == null) { + ourCursorId = newCursorId; + } else { + if (newCursorId != null) { + if (!Objects.equals(ourCursorId, newCursorId)) { + throw new IllegalStateException("attempt to block blocked (" + ourCursorId + ") connection by cursor " + newCursorId); + } + } + } + } + + public void releaseCursor(UUID psId, String newCursorId) { + if (!Objects.equals(this.ourCursorId, newCursorId)) { + throw new IllegalStateException("can't release: pending cursor = " + ourCursorId + "; provided: " + newCursorId); + } + this.ourCursorId = null; } - public void releasePendingCursor(String cursorId) { - if (!Objects.equals(this.pendingCursorId, cursorId)) { - throw new IllegalArgumentException("can't release pending cursor: pending = " + pendingCursorId + "; provided: " + cursorId); + public void releasePs(UUID newPs) { + if (!Objects.equals(this.psId, newPs)) { + throw new IllegalStateException("can't release: pending cursor = " + psId + "; provided: " + newPs); } - this.pendingCursorId = null; + this.psId = null; } - public void throwExceptionIfBusy(String callerCursorId) { - if (pendingCursorId != null) { - if (!Objects.equals(pendingCursorId, callerCursorId)) { - throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + public void throwExceptionIfCursorIsBusy(String callerId) { + if (ourCursorId != null) { + if (!Objects.equals(ourCursorId, callerId)) { + throw new IllegalStateException("connection is busy with " + ourCursorId); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index eb434e55ea..76efd8872b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -3,12 +3,12 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; public class ColumnOrientedBlock extends BaseBlock { - public ColumnOrientedBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); @@ -27,4 +27,17 @@ public int numRows() { return 0; } } + + public List rows() { + int numRows = numRows(); + List ret = new ArrayList<>(numRows); + for (int i = 0; i < numRows; ++i) { + ret.add(row(i)); + } + return ret; + } + + public ClickhouseNativeRowImpl row(int rowNo) { + return new ClickhouseNativeRowImpl(rowNo, rowDesc, this, md); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index b73dfa241a..fe8b325844 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -7,6 +7,7 @@ import io.vertx.sqlclient.impl.TupleInternal; import java.util.Map; +import java.util.UUID; public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; @@ -14,14 +15,16 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final ClickhouseNativeRowDesc rowDesc; private final Map.Entry queryType; private final boolean sentQuery; + private final UUID psId; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - Map.Entry queryType, boolean sentQuery) { + Map.Entry queryType, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; this.queryType = queryType; this.sentQuery = sentQuery; + this.psId = psId; } @Override @@ -51,4 +54,8 @@ public Map.Entry queryType() { public boolean isSentQuery() { return sentQuery; } + + public UUID getPsId() { + return psId; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 754d940a41..7b87ac31a6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -15,7 +15,7 @@ protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocket } void encode(ClickhouseNativeEncoder encoder) { - conn.releasePendingCursor(cmd.id()); + conn.releaseCursor(((ClickhouseNativePreparedStatement)cmd.statement()).getPsId(), cmd.id()); super.encode(encoder); completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 613b015ea2..d2f72a2d55 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -13,6 +13,10 @@ public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSoc void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); + ClickhouseNativePreparedStatement stmt = (ClickhouseNativePreparedStatement) cmd.statement(); + if (stmt.isSentQuery()) { + encoder.getConn().releasePs(stmt.getPsId()); + } completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 0e9f10ee68..3d219883c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -5,9 +5,12 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import java.nio.charset.Charset; +import java.time.Duration; import java.time.ZoneId; import java.util.Map; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; + public class DatabaseMetadataReader { private final String fullClientName; private final Map properties; @@ -75,9 +78,13 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } else { patchVersion = revision; } + int daysInYear = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_YEAR_DURATION, "365")); + int daysInQuarter = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_QUARTER_DURATION, "120")); + int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset()); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset(), + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); } private Charset charset() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index ec173f9ea0..e6e414700f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -41,10 +41,8 @@ void encode(ClickhouseNativeEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); //TODO smagellan: introduce lock() method - if (conn.getPendingCursorId() == null) { - conn.setPendingCursorId(ourCursorId); - } else { - conn.throwExceptionIfBusy(ourCursorId); + if (ourCursorId != null) { + conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } PreparedStatement ps = ecmd.preparedStatement(); if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { @@ -90,7 +88,7 @@ protected Map settings() { @Override protected void checkIfBusy() { - conn.throwExceptionIfBusy(ecmd().cursorId()); + conn.throwExceptionIfCursorIsBusy(ecmd().cursorId()); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 6e23a60d3d..b5a8936d9c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -33,34 +34,36 @@ public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator all @Override public void moreData(ByteBuf buf, ByteBufAllocator alloc) { - if (serverCityHash == null && buf.readableBytes() >= MIN_BLOCK_PREFIX) { - serverCityHash = new long[2]; - dumpHeader(buf); - LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + - "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); - LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); - serverCityHash[0] = buf.readLongLE(); - serverCityHash[1] = buf.readLongLE(); - checkSummedReaderIndex = buf.readerIndex(); - int compressionMethod = buf.readUnsignedByte(); - if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { - decompressedData.release(); - String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", - compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); - throw new IllegalStateException(msg); + if (serverCityHash == null) { + if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { + serverCityHash = new long[2]; + dumpHeader(buf); + LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + serverCityHash[0] = buf.readLongLE(); + serverCityHash[1] = buf.readLongLE(); + checkSummedReaderIndex = buf.readerIndex(); + int compressionMethod = buf.readUnsignedByte(); + if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { + decompressedData.release(); + String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", + compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); + throw new IllegalStateException(msg); + } + sizeWithHeader = buf.readUnsignedIntLE(); + if (sizeWithHeader > Integer.MAX_VALUE) { + throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); + } + compressedAndSizeSize = sizeWithHeader - 1 - 4; + uncompressedSize = buf.readUnsignedIntLE(); + if (uncompressedSize > Integer.MAX_VALUE) { + throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); + } + LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } - sizeWithHeader = buf.readUnsignedIntLE(); - if (sizeWithHeader > Integer.MAX_VALUE) { - throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); - } - compressedAndSizeSize = sizeWithHeader - 1 - 4; - uncompressedSize = buf.readUnsignedIntLE(); - if (uncompressedSize > Integer.MAX_VALUE) { - throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); - } - LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } if (uncompressedSize == null) { return; @@ -70,19 +73,20 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (buf.readableBytes() < compressedDataSize) { return; } - long[] oursCityHash; //TODO: maybe skip allocation if buf.hasArray() == true ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb); - oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size arrayBb.readerIndex(1 + 4 + 4); - - LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedDataSize)); - LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); if (!Arrays.equals(serverCityHash, oursCityHash)) { + LOG.error("cityhash mismatch"); + LOG.error("all available data: " + ByteBufUtil.hexDump(buf, 0, buf.readerIndex() + buf.readableBytes())); + LOG.error("data from reader index(" + buf.readerIndex() + "): " + ByteBufUtil.hexDump(buf)); + LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); + LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + Arrays.toString(Utils.hex(oursCityHash))); @@ -185,4 +189,18 @@ public String hexdump() { public void finish() { decompressedData.release(); } + + public static void main(String[] args) { + String bytesStr = "747572653a20412062756720776974682073656e696f726974792e3143d201f20273206d616b65207665727920666173742c0b00a06163637572617465206dba00f1106b65732e4f3c7363726970743e616c6572742822546869732073686f756c643a01f002626520646973706c6179656420696e2061fa015177736572203100f00220626f782e22293b3c2f7363726970743e01008ae197e847628104accc74807378ba29825c00000051000000f027010002ffffffff00020102696405496e7433320c000000076d65737361676506537472696e672ae38395e383ace383bce383a0e383af0900f00882afe381aee38399e383b3e38381e3839ee383bce382af060c02800c000001030cb4060c00000100a783ac6cd55c7a7cb5ac46bddb86e21482140000000a000000a0010002ffffffff0000000300000000000a00010002ffffffff0008020a6576656e745f74696d65084461746554696d65cf415f60cf415f60176576656e745f74696d655f6d6963726f7365636f6e64730655496e743332035706001657060009686f73745f6e616d6506537472696e670662686f7273650662686f7273650871756572795f696406537472696e672462643762643639332d383736652d343339382d386135302d3464393763353861343135352462643762643639332d383736652d343339382d386135302d346439376335386134313535097468726561645f69640655496e7436348d040000000000008d04000000000000087072696f7269747904496e7438060706736f7572636506537472696e670c6578656375746551756572790d4d656d6f7279547261636b6572047465787406537472696e674a5265616420313220726f77732c203832302e3030204220696e20302e303031343237373720736563"; + byte[] bytes = new byte[bytesStr.length() / 2]; + for (int i = 0; i < bytesStr.length(); i += 2) { + String s = bytesStr.substring(i, i + 2); + byte b = (byte)Integer.parseInt(s, 16); + bytes[i / 2] = b; + } + ByteBuf arrayBb = Unpooled.wrappedBuffer(bytes); + Long sizeWithHeader = 660L; + long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + System.err.println(Arrays.toString(Utils.hex(oursCityHash))); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 0996b9e113..78f4805c51 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -4,16 +4,17 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.impl.RowDesc; import net.jpountz.lz4.LZ4Factory; -import java.util.AbstractMap; +import java.sql.JDBCType; import java.util.List; import java.util.Map; +import java.util.Objects; public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); @@ -90,6 +91,25 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + List rows = block.rows(); + LOG.info("rows: "); + StringBuilder bldr = new StringBuilder(); + for (ClickhouseNativeRowImpl row : rows) { + bldr.append(rowAsString(row, block.rowDesc())).append("\n"); + } + LOG.info(bldr); + } + + private String rowAsString(Row row, RowDesc rowDesc) { + String[] vals = new String[row.size()]; + for (int i = 0; i < vals.length; ++i) { + Object value = row.getValue(i); + if (rowDesc.columnDescriptor().get(i).jdbcType() == JDBCType.VARCHAR) { + value = "'" + value + "'"; + } + vals[i] = Objects.toString(value); + } + return String.join(", ", vals); } private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { @@ -178,7 +198,6 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { if (tempTableInfo == null) { tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); if (tempTableInfo == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index ccd1e2e153..113624e91e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -10,32 +10,33 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); private final Map.Entry queryType; - + private final UUID psId; private PacketReader packetReader; protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { super(cmd); this.queryType = queryType; + this.psId = UUID.randomUUID(); } @Override void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); - LOG.info("handle ready for query"); String sql = cmd.sql(); + //TODO smagellan: check if query ends with 'values', maybe move to QueryParser boolean isInsert = queryType != null && "insert".equalsIgnoreCase(queryType.getKey()); int valuesIndex = 0; - boolean realInsertBatch = isInsert && (valuesIndex = valuesPos(sql, queryType.getValue())) != -1; + boolean endsWithValues = sql.toLowerCase().endsWith("values"); + boolean realInsertBatch = isInsert && (endsWithValues || (valuesIndex = valuesPos(sql, queryType.getValue())) != -1); if (realInsertBatch) { - String truncatedSql = sql.substring(0, valuesIndex + "values".length()); + //TODO smagellan: lock connection with prepared statement id + encoder.getConn().lockPsOrThrow(psId); + String truncatedSql = endsWithValues ? sql : sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); try { PacketForge forge = new PacketForge(encoder.getConn(), encoder.chctx()); @@ -48,7 +49,7 @@ void encode(ClickhouseNativeEncoder encoder) { } } else { completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false))); + new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false, psId))); } } @@ -81,7 +82,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { List columnTypes = new ArrayList<>(data.values()); ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true))); + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 8e63d292b0..b26882c97c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,8 +3,16 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.*; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +//TODO: maybe switch to antlr4 or JavaCC + .jj file (see ClickHouseSqlParser.jj in regular ClickHouse jdbc driver) public class QueryParsers { private static final String INSERT_KEYWORD = "INSERT"; private static final String UPDATE_KEYWORD = "UPDATE"; @@ -16,7 +24,6 @@ public class QueryParsers { INSERT_KEYWORD, UPDATE_KEYWORD))); - //TODO: maybe switch to antlr4 public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { int prevIdx = 0; int newIdx; @@ -79,7 +86,7 @@ public static Map.Entry findKeyWord(String sql, Collection findKeyWord(String sql, int startPos, Collection keywords) { Character requiredChar = null; - //special case to find placeholder + //special case to find special chars, e.g. argument index $ if (keywords.size() == 1) { String str = keywords.iterator().next(); if (str.length() == 1) { @@ -87,31 +94,84 @@ public static Map.Entry findKeyWord(String sql, int startPos, C } } for (int i = startPos; i < sql.length(); i++) { + char ch = sql.charAt(i); String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); if ("--".equals(nextTwo)) { i = Math.max(i, sql.indexOf("\n", i)); } else if ("/*".equals(nextTwo)) { i = Math.max(i, sql.indexOf("*/", i)); - } else if (requiredChar != null && requiredChar == sql.charAt(i)) { - return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); - } else if (sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { + } else if (ch == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { while (i < sql.length() && !(sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\'))) { ++i; } } else { - if (Character.isLetter(sql.charAt(i))) { - String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); - for (String keyword : keywords){ - if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { - return new AbstractMap.SimpleEntry<>(keyword, i); + if (requiredChar == null) { + if (Character.isLetter(ch)) { + String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); + for (String keyword : keywords) { + if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { + return new AbstractMap.SimpleEntry<>(keyword, i); + } } } - if (requiredChar == null) { - return null; + } else { + if (requiredChar == ch) { + return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); } } } } return null; } + + public static Map parseEnumValues(String nativeType) { + final boolean isByte = nativeType.startsWith("Enum8("); + int openBracketPos = nativeType.indexOf('('); + Map result = new HashMap<>(); + int lastQuotePos = -1; + boolean gotEq = false; + String enumElementName = null; + int startEnumValPos = -1; + for (int i = openBracketPos; i < nativeType.length(); ++i) { + char ch = nativeType.charAt(i); + if (ch == '\'') { + if (lastQuotePos == -1) { + lastQuotePos = i; + } else { + enumElementName = nativeType.substring(lastQuotePos + 1, i); + lastQuotePos = -1; + } + } else if (ch == '=') { + gotEq = true; + } else if (gotEq) { + if (Character.isDigit(ch)) { + if (startEnumValPos == -1) { + startEnumValPos = i; + } else if (!Character.isDigit(nativeType.charAt(i + 1))) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } else if (startEnumValPos != -1) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } + } + return result; + } + + private static Number byteOrShort(int number, boolean isByte) { + if (isByte) { + return (byte) number; + } + return (short) number; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 877a91824c..c8e224bace 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -2,7 +2,7 @@ import io.netty.buffer.ByteBuf; -class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { +public class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { private final ByteBuf sink; public RawClickhouseStreamDataSink(ByteBuf sink) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 07f779e09e..9bb195e877 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -2,7 +2,7 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowImpl; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; @@ -28,7 +28,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block, md); + ClickhouseNativeRowImpl row = block.row(rowNo); ++rowNo; return row; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index c3e30d23d2..9994619827 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -5,13 +5,10 @@ import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.QueryCommandBase; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ @@ -67,7 +64,7 @@ protected boolean isSuspended() { } protected void checkIfBusy() { - conn.throwExceptionIfBusy(null); + conn.throwExceptionIfCursorIsBusy(null); } @Override @@ -83,7 +80,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + ClickhouseNativeRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; @@ -109,13 +106,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } } - private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { - Map data = block.getColumnsWithTypes(); - List columnNames = new ArrayList<>(data.keySet()); - List columnTypes = new ArrayList<>(data.values()); - return new ClickhouseNativeRowDesc(columnNames, columnTypes); - } - private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { notifyOperationUpdate(0, hasMoreResults, t); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 6ca8475b71..ab901e26ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -20,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new ArrayColumnWriter(data, descriptor, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java new file mode 100644 index 0000000000..bac26ca684 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class ArrayColumnWriter extends ClickhouseColumnWriter { + private final ClickhouseNativeDatabaseMetadata md; + + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + super(data, descriptor, columnIndex); + this.md = md; + } + + @Override + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + } + + @Override + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 7dc34b0675..e2a89a19cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -15,4 +15,8 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnReader reader(int nRows); public abstract ClickhouseColumnWriter writer(List data, int columnIndex); + + public Object nullValue() { + throw new IllegalStateException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index e6408e0fe5..f5dd1aa4a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -65,7 +65,11 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { Object val = data.get(rowNo).getValue(columnIndex); if (val == null) { - serializeDataNull(sink); + if (columnDescriptor.isNullable()) { + serializeDataNull(sink); + } else { + throw new IllegalArgumentException("can't serialize null for non-nullable column " + columnDescriptor.name() + " at row " + rowNo); + } } else { serializeDataElement(sink, val); } @@ -74,6 +78,6 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, protected abstract void serializeDataElement(ClickhouseStreamDataSink sink, Object val); - //TODO: maybe perform ByteBuf.writerIndex(writerIndex() + elemSize) (is allocated memory is zero-filled ?) + //TODO: maybe skip bytes instead (perform ByteBuf.writerIndex(writerIndex() + elemSize)) (is allocated memory zero-filled ?) protected abstract void serializeDataNull(ClickhouseStreamDataSink sink); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index e60bbb5ac7..31c8667060 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -2,10 +2,14 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; +import java.time.Duration; import java.time.ZoneId; +import java.util.AbstractMap; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -28,10 +32,27 @@ public class ClickhouseColumns { public static final String ENUM_PREFIX = "Enum"; public static final int ENUM_PREFIX_LENGTH = ENUM_PREFIX.length(); + public static final String INTERVAL_PREFIX = "Interval"; + + private static final Map CONST_DURATION_MULTIPLIERS = Collections.unmodifiableMap(buildConstDurationMultipliers()); + + private static Map buildConstDurationMultipliers() { + HashMap result = new HashMap<>(); + result.put("Second", Duration.ofSeconds(1)); + result.put("Day", Duration.ofDays(1)); + result.put("Hour", Duration.ofHours(1)); + result.put("Minute", Duration.ofMinutes(1)); + result.put("Week", Duration.ofDays(7)); + return result; + } + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + //TODO smagellan: get rid of recursion + //TODO smagellan: introduce arrays dimensions size ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, nested); @@ -49,6 +70,15 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } + private static Map.Entry unwrapArrayModifiers(String spec) { + int arrayDepth = 0; + while (spec.startsWith(ARRAY_PREFIX)) { + spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + ++arrayDepth; + } + return new AbstractMap.SimpleEntry<>(arrayDepth, spec); + } + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { @@ -110,8 +140,17 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if ("Date".equals(spec)) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); + } else if (spec.startsWith(INTERVAL_PREFIX)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); + } else if ("IPv4".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); + } else if ("IPv6".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } - throw new IllegalArgumentException("unknown spec: '" + spec + "'"); + throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); } private static int decimalSize(int precision) { @@ -190,75 +229,44 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (jdbcType == JDBCType.DATE) { return new DateColumn(descr); } else if (jdbcType == JDBCType.OTHER) { - if (descr.getNestedType().equals("UUID")) { + String nativeType = descr.getNestedType(); + if (nativeType.equals("UUID")) { return new UUIDColumn(descr); - } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { - Map enumVals = parseEnumVals(descr.getNestedType()); + } else if (nativeType.startsWith(ENUM_PREFIX)) { + Map enumVals = QueryParsers.parseEnumValues(nativeType); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { return new Enum8Column(descr, enumVals); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { return new Enum16Column(descr, enumVals); } + } else if (nativeType.startsWith(INTERVAL_PREFIX)) { + Duration multiplier = getDurationMultiplier(descr, md); + if (multiplier == null) { + throw new IllegalArgumentException("unknown duration specifier in spec: " + descr.getUnparsedNativeType()); + } + return new IntervalColumn(descr, multiplier); + } else if (nativeType.equals("IPv4")) { + return new IPv4Column(descr); + } else if (nativeType.equals("IPv6")) { + return new IPv6Column(descr, md); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - - //TODO: maybe switch to antlr4 - static Map parseEnumVals(String nativeType) { - final boolean isByte = nativeType.startsWith("Enum8("); - int openBracketPos = nativeType.indexOf('('); - Map result = new HashMap<>(); - int lastQuotePos = -1; - boolean gotEq = false; - String enumElementName = null; - int startEnumValPos = -1; - for (int i = openBracketPos; i < nativeType.length(); ++i) { - char ch = nativeType.charAt(i); - if (ch == '\'') { - if (lastQuotePos == -1) { - lastQuotePos = i; - } else { - enumElementName = nativeType.substring(lastQuotePos + 1, i); - lastQuotePos = -1; - } - } else if (ch == '=') { - gotEq = true; - } else if (gotEq) { - if (Character.isDigit(ch)) { - if (startEnumValPos == -1) { - startEnumValPos = i; - } else if (!Character.isDigit(nativeType.charAt(i + 1))) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); - Number key = byteOrShort(enumValue, isByte); - result.put(key, enumElementName); - startEnumValPos = -1; - enumElementName = null; - gotEq = false; - } - } else if (startEnumValPos != -1) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); - Number key = byteOrShort(enumValue, isByte); - result.put(key, enumElementName); - startEnumValPos = -1; - enumElementName = null; - gotEq = false; - } + private static Duration getDurationMultiplier(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + String durationStr = descr.getNestedType().substring(INTERVAL_PREFIX.length()); + Duration multiplier = CONST_DURATION_MULTIPLIERS.get(durationStr); + if (multiplier == null) { + switch (durationStr) { + case "Year": + return md.yearDuration(); + case "Quarter": + return md.quarterDuration(); + case "Month": + return md.monthDuration(); } } - return result; - } - - private static Number byteOrShort(int number, boolean isByte) { - if (isByte) { - return (byte) number; - } - return (short) number; - } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor t = columnDescriptorForSpec("Array(Array(LowCardinality(Nullable(String))))", "fake"); - System.err.println(t); + return multiplier; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index ea39af6474..8ee3af4386 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -7,7 +7,8 @@ import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - private final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseNativeDatabaseMetadata md; + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java new file mode 100644 index 0000000000..f843fbdbdb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -0,0 +1,22 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class IPv4Column extends UInt32Column { + public IPv4Column(ClickhouseNativeColumnDescriptor descr) { + super(descr); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IPv4ColumnReader(nRows, descriptor); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new IPv4ColumnWriter(data, descriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java new file mode 100644 index 0000000000..ce2d4b82f7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class IPv4ColumnReader extends UInt32ColumnReader { + public static final int ELEMENT_SIZE = 4; + + public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + super(nRows, descriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == null) { + Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); + try { + return Inet4Address.getByAddress(intBytes(addr)); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + return super.getElementInternal(rowIdx, desired); + } + + private static byte[] intBytes(Long l) { + return new byte[] { + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java new file mode 100644 index 0000000000..763c752771 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.net.Inet4Address; +import java.util.List; + +public class IPv4ColumnWriter extends UInt32ColumnWriter { + public IPv4ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Inet4Address addr = (Inet4Address) val; + super.serializeDataElement(sink, Integer.toUnsignedLong(intFromBytes(addr.getAddress()))); + } + + private static int intFromBytes(byte[] b) { + return b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java new file mode 100644 index 0000000000..bbf699dc70 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class IPv6Column extends FixedStringColumn { + public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(descr, md); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IPv6ColumnReader(nRows, descriptor, md); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java new file mode 100644 index 0000000000..86dcbb5885 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class IPv6ColumnReader extends FixedStringColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, columnDescriptor, md); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == null) { + byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); + try { + return Inet6Address.getByAddress(addr); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + return super.getElementInternal(rowIdx, desired); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java new file mode 100644 index 0000000000..96d6a319aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.time.Duration; +import java.util.List; + +public class IntervalColumn extends ClickhouseColumn { + private final Duration multiplier; + + public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + super(descriptor); + this.multiplier = multiplier; + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IntervalColumnReader(nRows, descriptor, multiplier); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java new file mode 100644 index 0000000000..6b870d64ce --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.Duration; + +public class IntervalColumnReader extends UInt64ColumnReader { + private final Duration multiplier; + + public IntervalColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + super(nRows, descriptor); + this.multiplier = multiplier; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Long obj = (Long)super.getElementInternal(rowIdx, desired); + if (desired != Duration.class) { + return obj; + } + return multiplier.multipliedBy(obj); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 9325576d4c..e2890063df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -20,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new LowCardinalityColumnWriter(data, descriptor, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 677bad2ab4..4a1e0faf79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -74,7 +74,7 @@ protected void readData(ClickhouseStreamDataSource in) { } int keyType = (int)(serType & 0xf); if (keysColumn == null) { - keysColumn = uintColumn(keyType); + keysColumn = uintColumn(columnDescriptor.name(), keyType).reader(nRows); } keysColumn.readColumn(in); } @@ -107,9 +107,8 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } - private ClickhouseColumnReader uintColumn(int code) { + static ClickhouseColumn uintColumn(String name, int code) { ClickhouseNativeColumnDescriptor tmp; - String name = columnDescriptor.name(); //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances if (code == 0) { tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); @@ -122,6 +121,6 @@ private ClickhouseColumnReader uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, md).reader(nRows); + return ClickhouseColumns.columnForSpec(tmp, null); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java new file mode 100644 index 0000000000..878d404699 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -0,0 +1,152 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.RawClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class LowCardinalityColumnWriter extends ClickhouseColumnWriter { + //Need to read additional keys. + //Additional keys are stored before indexes as value N and N keys + //after them. + public static final int HAS_ADDITIONAL_KEYS_BIT = 1 << 9; + // # Need to update dictionary. + // # It means that previous granule has different dictionary. + public static final int NEED_UPDATE_DICTIONARY = 1 << 10; + public static final int SERIALIZATION_TYPE = HAS_ADDITIONAL_KEYS_BIT | NEED_UPDATE_DICTIONARY; + + private final ClickhouseNativeDatabaseMetadata md; + private Map dictionaryIndex; + private List keys; + private int nullAddon; + + public LowCardinalityColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.md = md; + } + + @Override + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + sink.writeLongLE(1); + } + + @Override + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + dictionaryIndex = new LinkedHashMap<>(); + keys = new ArrayList<>(); + ClickhouseNativeColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); + ClickhouseColumn dictionaryColumn = ClickhouseColumns.columnForSpec(dictionaryWriterDescr, md); + nullAddon = columnDescriptor.isNullable() ? 1 : 0; + super.serializeDataInternal(sink, fromRow, toRow); + int dictionarySize = dictionaryIndex.size() + nullAddon; + //empty array + if (dictionarySize == 0) { + return; + } + int intType = (int) (log2(dictionarySize) / 8); + ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(columnDescriptor.name(), intType); + + int serializationType = SERIALIZATION_TYPE | intType; + sink.writeLongLE(serializationType); + sink.writeLongLE(dictionarySize); + + Collection nullVal = columnDescriptor.isNullable() ? Collections.singleton(dictionaryColumn.nullValue()) : Collections.emptyList(); + ArrayList dictionaryTuples = Stream.concat(nullVal.stream(), dictionaryIndex.keySet().stream()) + .map(LowCardinalityColumnWriter::maybeUnwrapArrayWrapper) + .map(Tuple::of) + .collect(Collectors.toCollection(ArrayList::new)); + + ClickhouseColumnWriter dictionaryWriter = dictionaryColumn.writer(dictionaryTuples, 0); + dictionaryWriter.serializeData(sink, 0, dictionaryTuples.size()); + sink.writeLongLE(data.size()); + ClickhouseColumnWriter valuesColumnWriter = valuesColumn.writer(keys.stream().map(Tuple::of).collect(Collectors.toCollection(ArrayList::new)), 0); + valuesColumnWriter.serializeData(sink, 0, data.size()); + } + + private static Object maybeUnwrapArrayWrapper(Object from) { + if (from.getClass() == ArrayWrapper.class) { + return ((ArrayWrapper) from).array; + } + return from; + } + + private Object maybeWrapArray(Object val) { + if (val.getClass() == byte[].class) { + val = new ArrayWrapper((byte[]) val); + } else if (val.getClass() == String.class) { + val = new ArrayWrapper(((String) val).getBytes(md.getStringCharset())); + } + return val; + } + + private double log2(int x) { + return (Math.log(x) / Math.log(2)); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + val = maybeWrapArray(val); + Integer index = dictionaryIndex.computeIfAbsent(val, dictionaryMissVal -> dictionaryIndex.size() + nullAddon); + keys.add(index); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + keys.add(0); + } + + @Override + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + private static class ArrayWrapper { + private final byte[] array; + private final int hash; + + ArrayWrapper(byte[] array) { + this.array = array; + this.hash = Arrays.hashCode(array); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ArrayWrapper that = (ArrayWrapper) o; + return hash == that.hash && Arrays.equals(array, that.array); + } + + @Override + public int hashCode() { + return hash; + } + } + + public static void main(String[] args) { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("LowCardinality(Nullable(String))", "name"); + List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); + + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); + + ByteBuf buffer = Unpooled.buffer(100); + RawClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buffer); + writer.serializeData(sink, 0, data.size()); + System.err.println(writer.dictionaryIndex); + System.err.println(writer.keys); + System.err.println(buffer.readableBytes()); + System.err.print(ByteBufUtil.hexDump(buffer)); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index b04ad9b57b..ccf1045879 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -7,6 +7,8 @@ import java.util.List; public class StringColumn extends ClickhouseColumn { + public static final byte[] EMPTY = new byte[0]; + private final ClickhouseNativeDatabaseMetadata md; public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); @@ -22,4 +24,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new StringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + @Override + public Object nullValue() { + return EMPTY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index f4a35a1133..194a6b23bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -19,4 +19,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt8ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return descriptor.isUnsigned() ? Short.valueOf((short) 0) : Byte.valueOf((byte) 0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index da79597bfd..8704f656de 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,7 +38,7 @@ private T key(Integer k) { @Test public void testParseEnumVals() { - Map vals = ClickhouseColumns.parseEnumVals(enumDefinition); + Map vals = QueryParsers.parseEnumValues(enumDefinition); Map expected = new HashMap<>(); expected.put(key(1), "aa4"); expected.put(key(22), "1b3b2"); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java new file mode 100644 index 0000000000..d535bc7f98 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -0,0 +1,152 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; +import io.vertx.sqlclient.Tuple; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class AllTypesTest { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void testUInt8(TestContext ctx) { + doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0)); + } + + @Test + public void testInt8(TestContext ctx) { + doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0)); + } + + @Test + public void testString(TestContext ctx) { + doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0")); + } + + private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, + Object nullValue, + List regularValues) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + List batch = buildBatch(columnsList, nullValue, regularValues); + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), regularValues.size(), "row count mismatch"); + RowIterator rows = res3.iterator(); + int rowNo = 0; + while (rows.hasNext()) { + Row row = rows.next(); + for (String columnName : columnsList) { + Object expectedValue = regularValues.get(rowNo); + expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue); + if (columnName.equalsIgnoreCase("id")) { + compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); + } else { + compare(ctx, row, rowNo, columnName, desiredType, expectedValue); + } + } + ++rowNo; + } + conn.close(); + } + )); + } + )); + })); + })); + } + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t")); + } + return columns; + } + + private List buildBatch(List columnsList, Object nullValue, List regularValues) { + List batch = new ArrayList<>(regularValues.size()); + for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { + Object regularValue = regularValues.get(rowNo); + List vals = new ArrayList<>(columnsList.size()); + for (String columnName : columnsList) { + Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue); + vals.add(val); + } + batch.add(Tuple.tuple(vals)); + } + return batch; + } + + private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue) { + Object val; + if (columnName.equalsIgnoreCase("id")) { + val = rowNo; + } else { + if (regularValue == null) { + if (columnName.startsWith("nullable_")) { + if (columnName.startsWith("nullable_array")) { + throw new IllegalArgumentException("not implemented"); + } else { + val = null; + } + } else { + val = nullValue; + } + } else { + val = regularValue; + } + } + return val; + } + + private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { + Object val = row.get(desiredType, colName); + ctx.assertEquals(val, expected, "row " + colName + " mismatch; rowNo: " + rowNo); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index ac393f1001..485ea6138f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -101,24 +101,30 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator { - conn.query("select array() as empty_array, array(array(), array(NULL), array(1, NULL, 2), array(321)) as non_empty_array," + - "CAST(array(array(), array(NULL), array('a', NULL, 'b'), array('c')), 'Array(Array(LowCardinality(Nullable(String))))') as low_cardinality_array").execute( + conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { - ctx.assertEquals(1, res1.size()); + ctx.assertEquals(res1.size(), 1); Row row = res1.iterator().next(); - Object[] expected = new Object[0]; Object[] actual = (Object[])row.getValue(0); ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); - - expected = new Object[][]{{}, {null}, {1, null, 2}, {321}}; - actual = (Object[])row.getValue(1); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); - - expected = new Object[][]{{}, {null}, {"a", null, "b"}, {"c"}}; - actual = (Object[])row.getValue(2); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); conn.close(); }) ); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index e9f4742ff7..5fb6905bd3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -31,7 +31,9 @@ protected void before() throws Throwable { .setUser(server.getUsername()) .setPassword(server.getPassword()) .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver"); + .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver") + .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 5f9f907405..be31aed9ee 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -3,11 +3,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; import org.junit.After; import org.junit.Test; @@ -21,6 +24,8 @@ @RunWith(Parameterized.class) public class PacketReaderReplayTest { + private static final Logger LOG = LoggerFactory.getLogger(PacketReaderReplayTest.class); + private final Map props; private final ByteBuf buf; private final LZ4Factory lz4Factory; @@ -44,7 +49,8 @@ public static Iterable dataForTest() throws IOException { "/nullable_low_cardinality_with_compression.yaml", "/nullable_low_cardinality_without_compression.yaml", "/select_array_of_nullable_string_without_compression.yaml", - "/select_empty_array_without_compression.yaml" + "/select_empty_array_without_compression.yaml", + "/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); @@ -88,7 +94,13 @@ public void cleanup() { public void doReplayTest() { PooledByteBufAllocator allocator = new PooledByteBufAllocator(); String fullName = "Clickhouse jython-driver"; + LOG.info("all bytes: " + ByteBufUtil.hexDump(buf)); + while (buf.readableBytes() > 0) { + readConnIteraction(allocator, fullName); + } + } + private void readConnIteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); @@ -96,7 +108,7 @@ public void doReplayTest() { do { rdr = new PacketReader(md, fullName, props, lz4Factory); Object packet = rdr.receivePacket(allocator, buf); - System.err.println("packet: " + packet); + LOG.info("packet: " + packet); } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java new file mode 100644 index 0000000000..09b83adcdc --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -0,0 +1,18 @@ +package io.vertx.clickhousenativeclient; + +public class Sleep { + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + public static void sleepOrThrow(int duration) { + try { + Thread.sleep(duration); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public static void sleepOrThrow() { + sleepOrThrow(SLEEP_TIME); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java new file mode 100644 index 0000000000..6fa32dba80 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -0,0 +1,96 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.time.Duration; +import java.util.Optional; + +@RunWith(VertxUnitRunner.class) +public class SpecialTypesTest { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void testNothing(TestContext ctx) { + runQuery(ctx, "SELECT array()", null, null); + } + + @Test + public void testIntervalYear(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 YEAR", Duration.class, Optional.of(Duration.ofDays(365 * 4))); + } + + @Test + public void testIntervalQuarter(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 QUARTER", Duration.class, Optional.of(Duration.ofDays(120 * 4))); + } + + @Test + public void testIntervalMonth(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 MONTH", Duration.class, Optional.of(Duration.ofDays(30 * 4))); + } + + @Test + public void testIntervalWeek(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); + } + + @Test + //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" + public void testIntervalDay(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); + } + + @Test + public void testIntervalHour(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 HOUR", Duration.class, Optional.of(Duration.ofHours(4))); + } + + @Test + public void testIntervalMinute(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 MINUTE", Duration.class, Optional.of(Duration.ofMinutes(4))); + } + + @Test + public void testIntervalSecond(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 SECOND", Duration.class, Optional.of(Duration.ofSeconds(4))); + } + + private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query(query).execute( + ctx.asyncAssertSuccess(res -> { + ctx.assertEquals(1, res.size()); + if (expected != null && expected.isPresent()) { + Row row = res.iterator().next(); + Object val = desiredCls == null ? row.getValue(0) : row.get(desiredCls, 0); + ctx.assertEquals(expected.get(), val); + } + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 533b217b70..b83718ea65 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 19c9009c61..77394f3de7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,11 +1,15 @@ package io.vertx.clickhousenativeclient.tck; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; import io.vertx.sqlclient.tck.ConnectionTestBase; import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.rules.TestName; import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) @@ -13,10 +17,15 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Rule + public TestName name = new TestName(); + @Override public void setUp() throws Exception { super.setUp(); - options = rule.options(); + options = new ClickhouseNativeConnectOptions(rule.options()); + options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 8e452b2dcf..23ecf9ebd5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index ee5c69fd8c..5826bcf2bb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,22 +1,32 @@ package io.vertx.clickhousenativeclient.tck; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { + + @Rule + public TestName name = new TestName(); + @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @Override protected void initConnector() { - options = rule.options(); + options = new ClickhouseNativeConnectOptions(rule.options()); + options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index c289e53288..87d7d4fff6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 3bc3e8cf21..03c96c1f4b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java deleted file mode 100644 index 7b5c5ef062..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.vertx.clickhousenativeclient.tck; - -class Sleep { - //updates may be async even for non-replicated tables; - public static final int SLEEP_TIME = 100; - - static void sleepOrThrow() { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } -} diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py new file mode 100755 index 0000000000..f9bfd32ab4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -0,0 +1,43 @@ +#! /usr/bin/python3 + +ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'String', + {'table': 'FixedString', 'type': 'FixedString(12)'}, + 'DateTime', 'DateTime64', 'Date', 'UUID', + {'table': 'Decimal32', 'type': 'Decimal32(4)'}, + {'table': 'Decimal64', 'type': 'Decimal64(4)'}, + {'table': 'Decimal128', 'type': 'Decimal128(4)'}, + #{'table': 'Decimal256', 'type': 'Decimal256(4)'}, + {'table': 'Enum8', 'type': 'Enum8(\'v0\' = -128, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 127)'}, + {'table': 'Enum16', 'type': 'Enum16(\'v0\' = -32768, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 32767)'}, + 'Float32', 'Float64', 'IPv6', 'IPv4']; + +print('set allow_suspicious_low_cardinality_types=true;'); +for elem_spec in ELEMENTARY_TYPES: + table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; + table_name = "vertx_test_{0}".format(table_name.lower()); + type_name = elem_spec['type'] if isinstance(elem_spec, dict) else elem_spec; + print('DROP TABLE IF EXISTS {0};'.format(table_name)); + print('CREATE TABLE {0} ('.format(table_name)); + columns = ['id Int8']; + low_cardinality = type_name != 'UUID' and type_name != 'DateTime64' \ + and not type_name.startswith('Decimal32(') and not type_name.startswith('Decimal64(') \ + and not type_name.startswith('Decimal128(') \ + and not type_name.startswith('Decimal256(') \ + and not type_name.startswith('Enum'); + columns.append('simple_t {0}'.format(type_name)); + columns.append('nullable_t Nullable({0})'.format(type_name)); + columns.append('array_t Array({0})'.format(type_name)); + columns.append('array3_t Array(Array(Array({0})))'.format(type_name)); + columns.append('nullable_array_t Array(Nullable({0}))'.format(type_name)); + columns.append('nullable_array3_t Array(Array(Array(Nullable({0}))))'.format(type_name)); + + if low_cardinality: + columns.append('simple_lc_t LowCardinality({0})'.format(type_name)); + columns.append('nullable_lc_t LowCardinality(Nullable({0}))'.format(type_name)); + columns.append('array_lc_t Array(LowCardinality({0}))'.format(type_name)); + columns.append('array3_lc_t Array(Array(Array(LowCardinality({0}))))'.format(type_name)); + columns.append('nullable_array_lc_t Array(LowCardinality(Nullable({0})))'.format(type_name)); + columns.append('nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable({0})))))'.format(type_name)); + print(' ', ',\n '.join(columns)); + print(') engine = MergeTree()'); + print(" ORDER BY (id);"); diff --git a/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml new file mode 100644 index 0000000000..859c270376 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml @@ -0,0 +1,79 @@ +# Packet 189 +peer0_0: !!binary | + AEZDbGlja0hvdXNlIENsaWNraG91c2VOYXRpdmVQcmVwYXJlZFF1ZXJ5Q2FjaGVkVGVzdC50ZXN0 + Q29uY3VycmVudENsb3NlFAqpqQMHZGVmYXVsdAdkZWZhdWx0B2RlZmF1bHQ= +# Packet 191 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UD +# Packet 193 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2VGQ2xpY2tIb3VzZSBDbGlja2hvdXNlTmF0 + aXZlUHJlcGFyZWRRdWVyeUNhY2hlZFRlc3QudGVzdENvbmN1cnJlbnRDbG9zZRQKqakDAAIPc2Vu + ZF9sb2dzX2xldmVsAQVkZWJ1ZwAAAgEXU0VMRUNUICogRlJPTSBpbW11dGFibGUCAKeDrGzVXHp8 + taxGvduG4hSCFAAAAAoAAACgAQAC/////wAAAA== +# Packet 195 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMqjNCQAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDcx + MzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNgl0aHJlYWRfaWQGVUludDY0jQQAAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmdH + KGZyb20gMTI3LjAuMC4xOjM3Mzc2LCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUICog + RlJPTSBpbW11dGFibGU= +# Packet 197 +peer1_2: !!binary | + AQDMr9H3xEk130UQKUNmLuitgi0AAAAiAAAA8BMBAAL/////AAIAAmlkBUludDMyB21lc3NhZ2UG + U3RyaW5n +# Packet 199 +peer1_3: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gWVlfYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzJ4zwkA988JAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDcxMzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNiQ3MTM3ZTIy + My0yZTJmLTQzNGMtYmE0Mi0wZGQyYjM1OTIxZDYJdGhyZWFkX2lkBlVJbnQ2NI0EAAAAAAAAjQQA + AAAAAAAIcHJpb3JpdHkESW50OAcHBnNvdXJjZQZTdHJpbmciZGVmYXVsdC5pbW11dGFibGUgKFNl + bGVjdEV4ZWN1dG9yKSJkZWZhdWx0LmltbXV0YWJsZSAoU2VsZWN0RXhlY3V0b3IpBHRleHQGU3Ry + aW5nFktleSBjb25kaXRpb246IHVua25vd250U2VsZWN0ZWQgMi8yIHBhcnRzIGJ5IHBhcnRpdGlv + biBrZXksIDIgcGFydHMgYnkgcHJpbWFyeSBrZXksIDIvNCBtYXJrcyBieSBwcmltYXJ5IGtleSwg + MiBtYXJrcyB0byByZWFkIGZyb20gMiByYW5nZXM= +# Packet 201 +peer1_4: !!binary | + AQD4NBJnntW3moTD/45FsVjSgpQCAADHAgAA8C0BAAL/////AAILAmlkBUludDMyAQAAAAIAAAAD + AAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsUAPm7bWVzc2FnZQZTdHJpbmciZm9ydHVu + ZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeURBIGNvbXB1dGVyIHNjaWVudGlzdCBpcyBzb21l + b25lIHdobyBmaXhlcyB0aGluZ3MgdGhhdCBhcmVuJ3QgYnJva2VuLjFBZnRlciBlbm91Z2ggZGVj + aW1hbCBwbGFjZXMsIG5vYm9keSBnaXZlcyBhIGRhbW4uP0EgYmFkIHJhbmRvbSBudW1iZXIgZ2Vu + ZXJhdG9yOiAxLAMAhTQuMzNlKzY3FgAXS7cA4HByb2dyYW0gZG9lcyB3ngDwAnlvdSB0ZWxsIGl0 + IHRvIGRvhQAWdBwARXdhbnQcAHAuSUVtYWNz9ACQYSBuaWNlIG9whwD1KGluZyBzeXN0ZW0sIGJ1 + dCBJIHByZWZlciBVTklYLiDigJQgVG9tIENocmlzdGFlbnNlbihBbnmPABB0igCgcnVucyByaWdo + dGAA029ic29sZXRlLj5BIGxoAeBvbmx5IGFzIHN0cm9uZwoA8gFpdHMgd2Vha2VzdCBsaW5rbADz + HkRvbmFsZCBLbnV0aB5GZWF0dXJlOiBBIGJ1ZyB3aXRoIHNlbmlvcml0eS4xQ9IB8gJzIG1ha2Ug + dmVyeSBmYXN0LAsAoGFjY3VyYXRlIG26APEQa2VzLk88c2NyaXB0PmFsZXJ0KCJUaGlzIHNob3Vs + ZDoB8AJiZSBkaXNwbGF5ZWQgaW4gYfoBUXdzZXIgMQDwAiBib3guIik7PC9zY3JpcHQ+ +# Packet 203 +peer1_5: !!binary | + AQCK4ZfoR2KBBKzMdIBzeLopglwAAABRAAAA8CcBAAL/////AAIBAmlkBUludDMyDAAAAAdtZXNz + YWdlBlN0cmluZyrjg5Xjg6zjg7zjg6Djg68JAPAIgq/jga7jg5njg7Pjg4Hjg57jg7zjgq8= +# Packet 205 +peer1_6: !!binary | + BgwCgAwAAAE= +# Packet 207 +peer1_7: !!binary | + Awy0BgwAAA== +# Packet 209 +peer1_8: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 211 +peer1_9: !!binary | + AwAAAAAA +# Packet 213 +peer1_10: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gWVlfYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzLT0wkA7dMJAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDcxMzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNiQ3MTM3ZTIy + My0yZTJmLTQzNGMtYmE0Mi0wZGQyYjM1OTIxZDYJdGhyZWFkX2lkBlVJbnQ2NI0EAAAAAAAAjQQA + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdLUmVhZCAxMiByb3dzLCA4MjAuMDAgQiBpbiAwLjAwMTUyMTY1NSBz + ZWMuLCA3ODg2IHJvd3Mvc2VjLiwgNTI2LjI2IEtpQi9zZWMuJlBlYWsgbWVtb3J5IHVzYWdlIChm + b3IgcXVlcnkpOiAwLjAwIEIu +# Packet 215 +peer1_11: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 2c643ea1b8..263882d8e5 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -132,3 +132,358 @@ INSERT INTO Fortune (id, message) VALUES (11, ''); INSERT INTO Fortune (id, message) VALUES (12, 'フレームワークのベンチマーク'); + + + + +--almost all possible supported types +set allow_suspicious_low_cardinality_types=true; +DROP TABLE IF EXISTS vertx_test_int8; +CREATE TABLE vertx_test_int8 ( + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint8; +CREATE TABLE vertx_test_uint8 ( + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int16; +CREATE TABLE vertx_test_int16 ( + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint16; +CREATE TABLE vertx_test_uint16 ( + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int32; +CREATE TABLE vertx_test_int32 ( + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint32; +CREATE TABLE vertx_test_uint32 ( + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int64; +CREATE TABLE vertx_test_int64 ( + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint64; +CREATE TABLE vertx_test_uint64 ( + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_string; +CREATE TABLE vertx_test_string ( + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_fixedstring; +CREATE TABLE vertx_test_fixedstring ( + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime; +CREATE TABLE vertx_test_datetime ( + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime64; +CREATE TABLE vertx_test_datetime64 ( + id Int8, + simple_t DateTime64, + nullable_t Nullable(DateTime64), + array_t Array(DateTime64), + array3_t Array(Array(Array(DateTime64))), + nullable_array_t Array(Nullable(DateTime64)), + nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_date; +CREATE TABLE vertx_test_date ( + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uuid; +CREATE TABLE vertx_test_uuid ( + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal32; +CREATE TABLE vertx_test_decimal32 ( + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal64; +CREATE TABLE vertx_test_decimal64 ( + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal128; +CREATE TABLE vertx_test_decimal128 ( + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum8; +CREATE TABLE vertx_test_enum8 ( + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum16; +CREATE TABLE vertx_test_enum16 ( + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float32; +CREATE TABLE vertx_test_float32 ( + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float64; +CREATE TABLE vertx_test_float64 ( + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv6; +CREATE TABLE vertx_test_ipv6 ( + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv4; +CREATE TABLE vertx_test_ipv4 ( + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = MergeTree() + ORDER BY (id); From e8ebbf633fcbaae43c4390d27a427540223c3d4d Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 29 Mar 2021 00:04:03 +0300 Subject: [PATCH 033/176] added Array encoder Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 81 ++++++++----- .../impl/codec/columns/ArrayColumnWriter.java | 112 +++++++++++++++++- .../impl/codec/columns/ClickhouseColumn.java | 2 +- .../codec/columns/ClickhouseColumnReader.java | 9 +- .../codec/columns/LowCardinalityColumn.java | 11 ++ .../impl/codec/columns/UInt8Column.java | 6 +- .../impl/codec/columns/UInt8ColumnReader.java | 8 ++ .../clickhousenativeclient/AllTypesTest.java | 58 +++++---- .../BasicClickhouseTest.java | 41 +++++-- 9 files changed, 259 insertions(+), 69 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 53c8b9b53d..2bf12658f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -15,17 +15,18 @@ import java.util.Map; public class ArrayColumnReader extends ClickhouseColumnReader { - private static final Object[] EMPTY_ARRAY = new Object[0]; private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; + private final ClickhouseNativeColumnDescriptor elementTypeDescr; private Deque, Integer>> graphLevelDeque; private List> slicesSeries; private List curSlice; private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; - private ClickhouseColumnReader curNestedColumn; + private ClickhouseColumnReader nestedColumnReader; + private ClickhouseColumn nestedColumn; + private Class elementClass; private Integer nItems; private boolean resliced; private Object statePrefix; @@ -37,10 +38,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementaryDescr = elementaryDescr(columnDescriptor); + this.elementTypeDescr = elementaryDescr(descr); } - private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { ClickhouseNativeColumnDescriptor tmp = descr; while (tmp.isArray()) { tmp = tmp.getNestedDescr(); @@ -50,7 +51,7 @@ private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnD @Override protected Object readStatePrefix(ClickhouseStreamDataSource in) { - ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, md).reader(0); + ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md).reader(0); if (statePrefix == null) { statePrefix = statePrefixColumn.readStatePrefix(in); } @@ -72,47 +73,63 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } readSlices(in); - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md).reader(nItems); + if (nestedColumnReader == null) { + nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); + nestedColumnReader = nestedColumn.reader(nItems); + elementClass = nestedColumn.nullValue().getClass(); } if (curNestedColumnDescr.isNullable()) { - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); } if (nItems > 0) { - assert nItems == curNestedColumn.nRows; - if (curNestedColumn.getClass() == LowCardinalityColumnReader.class) { - ((LowCardinalityColumnReader)curNestedColumn).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + assert nItems == nestedColumnReader.nRows; + if (nestedColumnReader.getClass() == LowCardinalityColumnReader.class) { + ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; } - if (curNestedColumn.isPartial()) { - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); - if (curNestedColumn.isPartial()) { + if (nestedColumnReader.isPartial()) { + nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, null); + if (nestedColumnReader.isPartial()) { return null; } } - if (elementaryDescr.jdbcType() == JDBCType.VARCHAR - || curNestedColumn.getClass() == Enum8ColumnReader.class - || curNestedColumn.getClass() == Enum16ColumnReader.class) { - return curNestedColumn.itemsArray; + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || nestedColumnReader.getClass() == Enum8ColumnReader.class + || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); } resliced = true; - return resliceIntoArray(EMPTY_ARRAY); + return resliceIntoArray((Object[])java.lang.reflect.Array.newInstance(elementClass, 0), elementClass); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Object[] objectsArray = (Object[]) this.itemsArray; - Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + Object[] reslicedRet; + if (resliced) { + reslicedRet = objectsArray; + } else { + Triplet> maybeRecoded = asDesiredType(objectsArray, desired); + if (maybeRecoded.left()) { + desired = maybeRecoded.right(); + } else { + desired = elementClass; + } + reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); + } return reslicedRet[rowIdx]; } - private Object[] asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { - return stringifyByteArrays(src, md.getStringCharset()); + private Triplet> asDesiredType(Object[] src, Class desired) { + if (desired != null && desired.isArray()) { + desired = desired.getComponentType(); + } + if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { + return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); } - return src; + return new Triplet<>(false, src, desired); } private Object[] stringifyByteArrays(Object[] src, Charset charset) { @@ -126,19 +143,21 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { return ret; } - private Object[] resliceIntoArray(Object[] data) { + private Object[] resliceIntoArray(Object[] data, Class elementClass) { Object[] intermData = data; for (int i = slicesSeries.size() - 1; i >= 0; --i) { List slices = slicesSeries.get(i); Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = new Object[slices.size() - 1]; + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(data.getClass(), slices.size() - 1); + //Object[] newDataList = new Object[slices.size() - 1]; int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); int newSliceSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliceSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); - newDataList[tmpSliceIdx] = resliced; + //Object[] reslicedArray = new Object[newSliceSz]; + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(elementClass, newSliceSz); + System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); + newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; } intermData = newDataList; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index bac26ca684..3bcde33a44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -5,18 +5,124 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseColumn elementTypeColumn; public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { - super(data, descriptor, columnIndex); + super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; + this.elementTypeDescr = ArrayColumnReader.elementaryDescr(descriptor); + this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + writeSizes(sink, false, fromRow, toRow); + writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + } + + private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + localData = Collections.emptyList(); + } + ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); + if (localNested.isArray()) { + localData = flattenArrays(localData, fromRow, toRow, colIndex); + colIndex = 0; + fromRow = 0; + toRow = localData.size(); + } + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(localNested, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); + if (localWriter.getClass() == ArrayColumnWriter.class) { + ArrayColumnWriter localArrayWriter = (ArrayColumnWriter)localWriter; + localArrayWriter.writeElementData(sink, localDepth + 1, localNested, localData, fromRow, toRow, colIndex); + } else { + localWriter.serializeDataInternal(sink, fromRow, toRow); + } + } + + private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + localData = Collections.emptyList(); + } + ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); + if (localNested.isArray()) { + List flattened = flattenArrays(localData, fromRow, toRow, colIndex); + writeNullsInfo(sink, localDepth + 1, localNested, flattened, 0, flattened.size(), 0); + } else { + if (localNested.isNullable()) { + elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); + } + } + } + + private static List flattenArrays(List data, int fromRow, int toRow, int colIndex) { + List result = new ArrayList<>(); + for (int i = fromRow; i < toRow; ++i) { + Tuple row = data.get(i); + Object element = row.getValue(colIndex); + Class cls = element.getClass(); + if (cls.isArray() && cls != byte[].class) { + Object[] arr = (Object[])element; + List tuples = Arrays.stream(arr).map(Tuple::of).collect(Collectors.toList()); + result.addAll(tuples); + } else { + result.add(Tuple.of(element)); + } + } + return result; + } + + private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, int fromRow, int toRow) { + int nRows = toRow - fromRow; + ClickhouseNativeColumnDescriptor column = columnDescriptor; + List sizes = new ArrayList<>(); + if (writeTotalSize) { + sizes.add(nRows); + } + + List values = data; + int localColumnIndex = columnIndex; + ClickhouseNativeColumnDescriptor nestedColumn; + while ((nestedColumn = column.getNestedDescr()).isArray()) { + int offset = 0; + List newValue = new ArrayList<>(); + for (int i = fromRow; i < toRow; ++i) { + Object valObj = values.get(i); + Object[] val = (Object[]) maybeUnwrapTuple(valObj, localColumnIndex); + offset += val.length; + sizes.add(offset); + List newTuples = Arrays.asList(val); + newValue.addAll(newTuples); + } + values = newValue; + column = nestedColumn; + localColumnIndex = 0; + fromRow = 0; + toRow = newValue.size(); + } + sink.ensureWritable(sizes.size() * Long.BYTES); + for (Integer size : sizes) { + sink.writeLongLE(size); + } + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + elementTypeColumn.writer(data, 0).serializeStatePrefix(sink, fromRow, toRow); + } + + private static Object maybeUnwrapTuple(Object val, int columnIndex) { + return val instanceof Tuple ? ((Tuple)val).getValue(columnIndex) : val; } @Override @@ -30,4 +136,8 @@ protected void serializeDataNull(ClickhouseStreamDataSink sink) { @Override protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { } + + @Override + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index e2a89a19cb..b40a949c40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -17,6 +17,6 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); public Object nullValue() { - throw new IllegalStateException("not implemented"); + throw new IllegalStateException("not implemented for " + this.getClass()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index a75bcefcae..73d22b0782 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -66,8 +66,15 @@ protected Object[] asObjectsArray(Class desired) { return (Object[]) itemsArray; } + protected Object[] allocateArray(Class desired, int length) { + if (desired == null) { + return new Object[length]; + } + return (Object[]) java.lang.reflect.Array.newInstance(desired, length); + } + protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = new Object[nRows]; + Object[] ret = allocateArray(desired, nRows); for (int i = 0; i < nRows; ++i) { ret[i] = getElement(i, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index e2890063df..123572f506 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -8,6 +8,8 @@ public class LowCardinalityColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; + private Object nullValue; + public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; @@ -22,4 +24,13 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new LowCardinalityColumnWriter(data, descriptor, md, columnIndex); } + + @Override + public Object nullValue() { + if (nullValue == null) { + ClickhouseNativeColumnDescriptor nested = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); + nullValue = ClickhouseColumns.columnForSpec(nested, md).nullValue(); + } + return nullValue; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 194a6b23bf..8ec47c591e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -22,6 +22,10 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return descriptor.isUnsigned() ? Short.valueOf((short) 0) : Byte.valueOf((byte) 0); + if (descriptor.isUnsigned()) { + return (short) 0; + } else { + return (byte) 0; + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 063e26efb0..26b4896dd6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -43,6 +43,14 @@ protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + @Override + protected Object[] allocateArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + return new Short[length]; + } + return new Byte[length]; + } + @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index d535bc7f98..e5a4a9a1a0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -45,22 +45,27 @@ public void teardDown(TestContext ctx) { @Test public void testUInt8(TestContext ctx) { - doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0)); + doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0), + Arrays.asList(new Short[]{}, new Short[]{0, 2, null, 3, 255}, new Short[]{255, 0, null}, new Short[]{0, null, 0})); } @Test public void testInt8(TestContext ctx) { - doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0)); + doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0), + Arrays.asList(new Byte[]{}, new Byte[]{0, 2, null, 3, Byte.MAX_VALUE}, new Byte[]{Byte.MIN_VALUE, 0, null}, new Byte[]{0, null, 0}, new Byte[]{Byte.MAX_VALUE, Byte.MIN_VALUE})); } @Test public void testString(TestContext ctx) { - doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0")); + doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0"), + Arrays.asList(new String[]{}, new String[]{"val1", "", null, "val2"}, new String[]{null, "", null}, new String[]{null})); } private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, Object nullValue, - List regularValues) { + List regularValues, + List nullableArrayValues) { + ctx.assertEquals(regularValues.size(), nullableArrayValues.size()); String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -69,7 +74,7 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - List batch = buildBatch(columnsList, nullValue, regularValues); + List batch = buildBatch(columnsList, nullValue, regularValues, nullableArrayValues); conn.preparedQuery(query) .executeBatch(batch, ctx.asyncAssertSuccess( res2 -> { @@ -83,7 +88,8 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b Row row = rows.next(); for (String columnName : columnsList) { Object expectedValue = regularValues.get(rowNo); - expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue); + Object expectedNullArrayValue = nullableArrayValues.get(rowNo); + expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue, expectedNullArrayValue); if (columnName.equalsIgnoreCase("id")) { compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); } else { @@ -102,20 +108,21 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b } private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t")); + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "nullable_array_t")); if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t")); + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "nullable_array_lc_t")); } return columns; } - private List buildBatch(List columnsList, Object nullValue, List regularValues) { + private List buildBatch(List columnsList, Object nullValue, List regularValues, List nullableArrayValues) { List batch = new ArrayList<>(regularValues.size()); for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { Object regularValue = regularValues.get(rowNo); + Object nullableArrayValue = nullableArrayValues.get(rowNo); List vals = new ArrayList<>(columnsList.size()); for (String columnName : columnsList) { - Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue); + Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue, nullableArrayValue); vals.add(val); } batch.add(Tuple.tuple(vals)); @@ -123,30 +130,37 @@ private List buildBatch(List columnsList, Object nullValue, List< return batch; } - private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue) { + private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue, Object nullableArrayValue) { Object val; if (columnName.equalsIgnoreCase("id")) { val = rowNo; - } else { + } else if (columnName.startsWith("nullable_array_")) { + val = nullableArrayValue; + } else if (columnName.equals("simple_t") || columnName.equals("simple_lc_t")) { if (regularValue == null) { - if (columnName.startsWith("nullable_")) { - if (columnName.startsWith("nullable_array")) { - throw new IllegalArgumentException("not implemented"); - } else { - val = null; - } - } else { - val = nullValue; - } + val = nullValue; } else { val = regularValue; } + } else if (columnName.equals("nullable_t") || columnName.equals("nullable_lc_t")) { + val = regularValue; + } else { + throw new IllegalStateException("not implemented for " + columnName); } return val; } private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { + boolean isArray = expected != null && expected.getClass().isArray(); + if (isArray) { + desiredType = expected.getClass(); + } Object val = row.get(desiredType, colName); - ctx.assertEquals(val, expected, "row " + colName + " mismatch; rowNo: " + rowNo); + if (isArray) { + boolean equals = Arrays.deepEquals((Object[]) val, (Object[]) expected); + ctx.assertTrue(equals, colName + " row " + " mismatch; rowNo: " + rowNo); + } else { + ctx.assertEquals(val, expected, colName + "row " + " mismatch; rowNo: " + rowNo); + } } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 485ea6138f..8291a5b32d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -60,11 +60,10 @@ public void loginFailureTest(TestContext ctx) { @Test public void testIntegerRanges(TestContext ctx) { - //TODO: LowCardinality List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") .flatMap(el -> "Int128".equals(el) ? Stream.of(el, "Nullable(" + el + ")") - : Stream.of(el, "U" + el, "Nullable(" + el + ")", "Nullable(U" + el + ")")) + : Stream.of(el, "U" + el, "LowCardinality(Nullable(" + el + "))", "Nullable(U" + el + ")", "LowCardinality(Nullable(U" + el + "))")) .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() @@ -102,29 +101,47 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator expected) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { - ctx.assertEquals(res1.size(), 1); - Row row = res1.iterator().next(); - Object[] actual = (Object[])row.getValue(0); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + ctx.assertEquals(res1.size(), expected.size()); + int i = 0; + for (Row row : res1) { + Object[] expectedVal = expected.get(i); + Object[] actualVal = (Object[]) row.getValue(0); + ctx.assertEquals(true, Arrays.deepEquals(expectedVal, actualVal)); + ++i; + } conn.close(); }) ); From 1234e7c9419eb9ca070e40f7615be4d4b4b32c60 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 30 Mar 2021 21:32:07 +0300 Subject: [PATCH 034/176] added DateColumnWriter and DateTimeColumnWriter Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 7 +- .../ClickhouseNativeDatabaseMetadata.java | 22 +- .../impl/codec/DatabaseMetadataReader.java | 25 ++- .../impl/codec/InitCommandCodec.java | 2 +- .../impl/codec/columns/ArrayColumnReader.java | 29 ++- .../impl/codec/columns/ClickhouseColumns.java | 6 +- .../impl/codec/columns/DateColumn.java | 9 +- .../impl/codec/columns/DateColumnReader.java | 5 +- .../impl/codec/columns/DateColumnWriter.java | 30 +++ .../impl/codec/columns/DateTimeColumn.java | 11 +- .../codec/columns/DateTimeColumnReader.java | 2 + .../codec/columns/DateTimeColumnWriter.java | 35 +++ .../columns/LowCardinalityColumnWriter.java | 2 +- .../codec/columns/StringColumnReader.java | 4 +- .../impl/codec/columns/UInt16Column.java | 9 + .../clickhousenativeclient/AllTypesTest.java | 211 +++++++++++------- .../ClickhouseResource.java | 7 +- .../PacketReaderReplayTest.java | 2 +- .../tck/ClickhouseNativeConnectionTest.java | 2 +- ...ickhouseNativePreparedQueryCachedTest.java | 2 +- 20 files changed, 297 insertions(+), 125 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 6476fe8978..a76fff7108 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -26,7 +26,7 @@ public class ClickhouseConstants { public static final int CLIENT_VERSION_PATCH = 2; public static final int CLIENT_REVISION = 54441; - public static final String OPTION_CLIENT_NAME = "application_name"; + public static final String OPTION_APPLICATION_NAME = "application_name"; public static final String OPTION_INITIAL_USER = "initial_user"; public static final String OPTION_INITIAL_QUERY_ID = "initial_query_id"; public static final String OPTION_INITIAL_ADDRESS = "initial_address"; @@ -34,6 +34,7 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_STRING_CHARSET = "string_charset"; + public static final String OPTION_DEFAULT_ZONE_ID = "default_zone_id"; public static final String OPTION_YEAR_DURATION = "days_in_year"; public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; public static final String OPTION_MONTH_DURATION = "days_in_month"; @@ -45,7 +46,7 @@ public class ClickhouseConstants { public static final short COMPRESSION_METHOD_ZSTD = 0x90; public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( - OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, + OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, OPTION_MONTH_DURATION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 7951322b8a..a2f5164f24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -15,7 +15,8 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int revision; private final int patchVersion; private final String displayName; - private final ZoneId timezone; + private final ZoneId serverZoneId; + private final ZoneId defaultZoneId; private final String fullClientName; private final Charset stringCharset; private final Map properties; @@ -24,9 +25,9 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration monthDuration; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties, Charset stringCharset, Duration yearDuration, - Duration quarterDuration, Duration monthDuration) { + int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, + String fullClientName, Map properties, Charset stringCharset, + Duration yearDuration, Duration quarterDuration, Duration monthDuration) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -34,7 +35,8 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.revision = revision; this.patchVersion = patchVersion; this.displayName = displayName; - this.timezone = timezone; + this.serverZoneId = serverZoneId; + this.defaultZoneId = defaultZoneId; this.fullClientName = fullClientName; this.properties = properties; this.stringCharset = stringCharset; @@ -75,8 +77,12 @@ public String getDisplayName() { return displayName; } - public ZoneId getZoneId() { - return timezone; + public ZoneId getServerZoneId() { + return serverZoneId; + } + + public ZoneId getDefaultZoneId() { + return defaultZoneId; } public String getFullClientName() { @@ -113,7 +119,7 @@ public String toString() { ", revision=" + revision + ", patchVersion=" + patchVersion + ", displayName='" + displayName + '\'' + - ", timezone='" + timezone + '\'' + + ", timezone='" + serverZoneId + '\'' + '}'; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 3d219883c3..849d4a038b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -9,8 +9,6 @@ import java.time.ZoneId; import java.util.Map; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; - public class DatabaseMetadataReader { private final String fullClientName; private final Map properties; @@ -19,7 +17,7 @@ public class DatabaseMetadataReader { private Integer major; private Integer minor; private Integer revision; - private String timezone; + private String serverZoneIdName; private String displayName; private Integer patchVersion; @@ -55,9 +53,9 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { return null; } } - if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - timezone = ByteBufUtils.readPascalString(in); - if (timezone == null) { + if (serverZoneIdName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + serverZoneIdName = ByteBufUtils.readPascalString(in); + if (serverZoneIdName == null) { return null; } } @@ -81,12 +79,25 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { int daysInYear = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_YEAR_DURATION, "365")); int daysInQuarter = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_QUARTER_DURATION, "120")); int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); + ZoneId serverZoneId = serverZoneIdName == null ? null : ZoneId.of(serverZoneIdName); + ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset(), + major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); } + private ZoneId getDefaultZoneId(ZoneId serverZoneId) { + String defaultZoneId = properties.get(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID); + if (defaultZoneId == null || "from_server".equals(defaultZoneId)) { + return serverZoneId; + } else if ("system_default".equals(defaultZoneId)) { + return ZoneId.systemDefault(); + } else { + return ZoneId.of(defaultZoneId); + } + } + private Charset charset() { String desiredCharset = properties.get(ClickhouseConstants.OPTION_STRING_CHARSET); if (desiredCharset == null || "system_default".equals(desiredCharset)) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 32f120d315..6f10258d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -28,7 +28,7 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBuf buf = allocateBuffer(); ByteBufUtils.writeULeb128(ClientPacketTypes.HELLO, buf); fullClientName = "ClickHouse " + cmd.properties() - .getOrDefault(ClickhouseConstants.OPTION_CLIENT_NAME, "vertx-sql"); + .getOrDefault(ClickhouseConstants.OPTION_APPLICATION_NAME, "vertx-sql"); ByteBufUtils.writePascalString(fullClientName, buf); ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 2bf12658f3..19ab74d1c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -87,7 +87,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; } if (nestedColumnReader.isPartial()) { - nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, null); + nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); if (nestedColumnReader.isPartial()) { return null; } @@ -111,6 +111,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { if (resliced) { reslicedRet = objectsArray; } else { + desired = maybeUnwrapArrayElementType(desired); Triplet> maybeRecoded = asDesiredType(objectsArray, desired); if (maybeRecoded.left()) { desired = maybeRecoded.right(); @@ -122,10 +123,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { return reslicedRet[rowIdx]; } - private Triplet> asDesiredType(Object[] src, Class desired) { - if (desired != null && desired.isArray()) { - desired = desired.getComponentType(); + private Class maybeUnwrapArrayElementType(Class desired) { + if (desired != null) { + while (desired.isArray() && desired != byte[].class) { + desired = desired.getComponentType(); + } } + return desired; + } + + private Triplet> asDesiredType(Object[] src, Class desired) { if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); } @@ -133,7 +140,7 @@ private Triplet> asDesiredType(Object[] src, Class elementClass) { for (int i = slicesSeries.size() - 1; i >= 0; --i) { List slices = slicesSeries.get(i); Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(data.getClass(), slices.size() - 1); - //Object[] newDataList = new Object[slices.size() - 1]; + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); int newSliceSz = slice.getValue() - slice.getKey(); - //Object[] reslicedArray = new Object[newSliceSz]; - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(elementClass, newSliceSz); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass().getComponentType(), newSliceSz); System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; @@ -218,4 +223,10 @@ private boolean readSlice(ClickhouseStreamDataSource in, Triplet data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new DateColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return DateColumnReader.MIN_VALUE; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index bc9310b0d7..cd26e98987 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -5,7 +5,8 @@ import java.time.LocalDate; public class DateColumnReader extends UInt16ColumnReader { - public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); + public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); @@ -14,6 +15,6 @@ public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescri @Override protected Object getElementInternal(int rowIdx, Class desired) { Integer offset = (Integer) super.getElementInternal(rowIdx, desired); - return MIN_DATE.plusDays(offset); + return MIN_VALUE.plusDays(offset); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java new file mode 100644 index 0000000000..d51d71602c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -0,0 +1,30 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.List; + +public class DateColumnWriter extends UInt16ColumnWriter { + public static final long MAX_VALUE = 65535; + + public DateColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + LocalDate dateVal = (LocalDate) val; + long daysDelta = ChronoUnit.DAYS.between(DateColumnReader.MIN_VALUE, dateVal); + if (daysDelta < 0) { + throw new IllegalArgumentException("date " + dateVal + " is too small; smallest possible date: " + DateColumnReader.MIN_VALUE); + } + if (daysDelta > MAX_VALUE) { + throw new IllegalArgumentException("date " + dateVal + " is too big; largest possible date: " + DateColumnReader.MAX_VALUE); + } + super.serializeDataElement(sink, daysDelta); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 70922b259c..e31c2f49b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -3,15 +3,19 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; import java.util.List; public class DateTimeColumn extends ClickhouseColumn { private final ZoneId zoneId; + private final OffsetDateTime nullValue; public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; + this.nullValue = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); } @Override @@ -21,6 +25,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new DateTimeColumnWriter(data, descriptor, zoneId, columnIndex); + } + + @Override + public Object nullValue() { + return nullValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 9b384bb903..fd88ebf41d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -8,6 +8,8 @@ import java.time.ZoneId; public class DateTimeColumnReader extends ClickhouseColumnReader { + public static final long MAX_EPOCH_SECOND = 4294967295L; + public static final int ELEMENT_SIZE = 4; private final ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java new file mode 100644 index 0000000000..58e72a3c9f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.List; + +public class DateTimeColumnWriter extends ClickhouseColumnWriter { + public final OffsetDateTime maxValue; + + public DateTimeColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.maxValue = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + OffsetDateTime dateTime = (OffsetDateTime) val; + long epochSecond = dateTime.toInstant().getEpochSecond(); + if (epochSecond > DateTimeColumnReader.MAX_EPOCH_SECOND) { + throw new IllegalArgumentException("value " + dateTime + " is too big; max epoch seconds: " + maxValue); + } + sink.writeIntLE((int) epochSecond); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } + +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 878d404699..b8c5fc7091 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -137,7 +137,7 @@ public static void main(String[] args) { List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", - 0, 0,0, 0, "dname", ZoneId.systemDefault(), "client", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 02b503ceb4..2a9e5555b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -11,7 +11,7 @@ public class StringColumnReader extends ClickhouseColumnReader { private Integer curStrLength; - private List elements; + private List elements; private final Charset charset; protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { @@ -43,7 +43,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { elements.add(stringBytes); curStrLength = null; } - Object[] ret = elements.toArray(); + Object[] ret = elements.toArray(new byte[elements.size()][]); elements = null; return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 322fbf24f7..b294dbdc46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -19,4 +19,13 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt16ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + if (descriptor.isUnsigned()) { + return (int) 0; + } else { + return (short) 0; + } + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index e5a4a9a1a0..de334c0cf1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -2,13 +2,14 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; import org.junit.After; import org.junit.Before; @@ -16,6 +17,8 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.nio.charset.StandardCharsets; +import java.time.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -43,29 +46,120 @@ public void teardDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "nullable_array_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "nullable_array_lc_t")); + } + return columns; + } + @Test public void testUInt8(TestContext ctx) { - doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0), - Arrays.asList(new Short[]{}, new Short[]{0, 2, null, 3, 255}, new Short[]{255, 0, null}, new Short[]{0, null, 0})); + List batch = Arrays.asList( + Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), + Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), + Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), + Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) + ); + doTest(ctx, "uint8", Short.class, true, batch); } @Test public void testInt8(TestContext ctx) { - doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0), - Arrays.asList(new Byte[]{}, new Byte[]{0, 2, null, 3, Byte.MAX_VALUE}, new Byte[]{Byte.MIN_VALUE, 0, null}, new Byte[]{0, null, 0}, new Byte[]{Byte.MAX_VALUE, Byte.MIN_VALUE})); + List batch = Arrays.asList( + Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), + Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), + Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), + Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) + ); + doTest(ctx, "int8", Byte.class, true, batch); } @Test public void testString(TestContext ctx) { - doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0"), - Arrays.asList(new String[]{}, new String[]{"val1", "", null, "val2"}, new String[]{null, "", null}, new String[]{null})); + String v2 = "val2"; + String v_1 = "val_1"; + String v4 = "val_4"; + String v5 = "val5"; + String v3 = "val3"; + String v1 = "val1"; + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), + Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), + Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), + Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) + ); + doTest(ctx, "string", String.class, true, batch); + } + + @Test + public void testBlob(TestContext ctx) { + byte[] v2 = b("val2"); + byte[] em = b(""); + byte[] v3 = b("val3"); + byte[] v_4 = b("val_4"); + byte[] v1 = b("val1"); + byte[] v4 = b("val4"); + byte[] v_1 = b("val_1"); + byte[] z = b("z"); + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new byte[][]{}, new byte[][]{}, em, em, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)2, em, null, new byte[][]{v3, v1, em, z, v4}, new byte[][]{v3, v1, null, em, z, v3}, em, null, new byte[][]{em, v1, em, v2, v2}, new byte[][]{em, v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ), + Tuple.of((byte)4, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, v4}, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, em} ), + Tuple.of((byte)5, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ) + ); + doTest(ctx, "string", byte[].class, true, batch); + } + + @Test + public void testDate(TestContext ctx) { + LocalDate dt = LocalDate.of(2020, 3, 29); + LocalDate d2 = dt.plusDays(2); + LocalDate d3 = dt.plusDays(3); + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), + Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) + ); + doTest(ctx, "date", LocalDate.class, true, batch); + } + + @Test + public void testDateTime(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), + Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) + ); + doTest(ctx, "datetime", OffsetDateTime.class, true, batch); + } + + private static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, - Object nullValue, - List regularValues, - List nullableArrayValues) { - ctx.assertEquals(regularValues.size(), nullableArrayValues.size()); + List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -74,93 +168,48 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - List batch = buildBatch(columnsList, nullValue, regularValues, nullableArrayValues); conn.preparedQuery(query) .executeBatch(batch, ctx.asyncAssertSuccess( res2 -> { Sleep.sleepOrThrow(); conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { - ctx.assertEquals(res3.size(), regularValues.size(), "row count mismatch"); - RowIterator rows = res3.iterator(); - int rowNo = 0; - while (rows.hasNext()) { - Row row = rows.next(); - for (String columnName : columnsList) { - Object expectedValue = regularValues.get(rowNo); - Object expectedNullArrayValue = nullableArrayValues.get(rowNo); - expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue, expectedNullArrayValue); - if (columnName.equalsIgnoreCase("id")) { - compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Tuple batchRow = batch.get(batchIdx); + Object id = row.getValue("id"); + for (int colIdx = 0; colIdx < batchRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedValue = batchRow.getValue(colIdx); + Class colType = expectedValue == null ? desiredType : expectedValue.getClass(); + Object actualValue; + if ("id".equals(colName)) { + actualValue = row.getValue(colName); } else { - compare(ctx, row, rowNo, columnName, desiredType, expectedValue); + actualValue = row.get(colType, colName); } + compareValues(ctx, id, colName, colType, expectedValue, actualValue); } - ++rowNo; + ++batchIdx; } - conn.close(); - } - )); - } - )); + })); + })); })); })); } - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "nullable_array_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "nullable_array_lc_t")); - } - return columns; - } - - private List buildBatch(List columnsList, Object nullValue, List regularValues, List nullableArrayValues) { - List batch = new ArrayList<>(regularValues.size()); - for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { - Object regularValue = regularValues.get(rowNo); - Object nullableArrayValue = nullableArrayValues.get(rowNo); - List vals = new ArrayList<>(columnsList.size()); - for (String columnName : columnsList) { - Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue, nullableArrayValue); - vals.add(val); - } - batch.add(Tuple.tuple(vals)); - } - return batch; - } - - private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue, Object nullableArrayValue) { - Object val; - if (columnName.equalsIgnoreCase("id")) { - val = rowNo; - } else if (columnName.startsWith("nullable_array_")) { - val = nullableArrayValue; - } else if (columnName.equals("simple_t") || columnName.equals("simple_lc_t")) { - if (regularValue == null) { - val = nullValue; + private void compareValues(TestContext ctx, Object id, String colName, Class colType, Object expectedValue, Object actualValue) { + if (colType.isArray()) { + boolean equals; + if (colType == byte[].class) { + equals = Arrays.equals((byte[]) expectedValue, (byte[]) actualValue); } else { - val = regularValue; + equals = Arrays.deepEquals((Object[]) expectedValue, (Object[]) actualValue); } - } else if (columnName.equals("nullable_t") || columnName.equals("nullable_lc_t")) { - val = regularValue; - } else { - throw new IllegalStateException("not implemented for " + columnName); - } - return val; - } - - private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { - boolean isArray = expected != null && expected.getClass().isArray(); - if (isArray) { - desiredType = expected.getClass(); - } - Object val = row.get(desiredType, colName); - if (isArray) { - boolean equals = Arrays.deepEquals((Object[]) val, (Object[]) expected); - ctx.assertTrue(equals, colName + " row " + " mismatch; rowNo: " + rowNo); + ctx.assertTrue(equals, colName + " byte row mismatch; id = " + id); } else { - ctx.assertEquals(val, expected, colName + "row " + " mismatch; rowNo: " + rowNo); + ctx.assertEquals(expectedValue, actualValue, colName + " row mismatch; id = " + id); } } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 5fb6905bd3..4f96443285 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -31,8 +31,11 @@ protected void before() throws Throwable { .setUser(server.getUsername()) .setPassword(server.getPassword()) .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver") - .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "java-driver") + .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") + .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo"); + //.addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe%2FOslo"); //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index be31aed9ee..53eda45627 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -114,7 +114,7 @@ private void readConnIteraction(PooledByteBufAllocator allocator, String fullNam private static Map buildProperties(boolean withCompression) { Map props = new HashMap<>(); - props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver"); if (withCompression) { props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 77394f3de7..0f64148a5a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -24,7 +24,7 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { public void setUp() throws Exception { super.setUp(); options = new ClickhouseNativeConnectOptions(rule.options()); - options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index 5826bcf2bb..278295c28c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -25,7 +25,7 @@ public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCached @Override protected void initConnector() { options = new ClickhouseNativeConnectOptions(rule.options()); - options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } From 6a11da84e890478d97616f1dfa40e9c4b92c204a Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 1 Apr 2021 00:33:33 +0300 Subject: [PATCH 035/176] reworked AllTypesTest to use ColumnChecker Signed-off-by: vladimir --- .../codec/columns/StringColumnReader.java | 1 + .../clickhousenativeclient/AllTypesTest.java | 143 ++++++++++++------ 2 files changed, 101 insertions(+), 43 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 2a9e5555b1..fafbfd0881 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -32,6 +32,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } + //no dedicated BLOB type support; will encode into String if user did not request byte[].class byte[] stringBytes; if (nullsMap == null || !nullsMap.get(elements.size())) { stringBytes = new byte[curStrLength]; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index de334c0cf1..6c03962358 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -9,12 +9,10 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.*; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; @@ -22,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; @RunWith(VertxUnitRunner.class) public class AllTypesTest { @@ -62,7 +61,7 @@ public void testUInt8(TestContext ctx) { Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) ); - doTest(ctx, "uint8", Short.class, true, batch); + doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); } @Test @@ -73,7 +72,7 @@ public void testInt8(TestContext ctx) { Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) ); - doTest(ctx, "int8", Byte.class, true, batch); + doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); } @Test @@ -91,27 +90,49 @@ public void testString(TestContext ctx) { Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) ); - doTest(ctx, "string", String.class, true, batch); + doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); } @Test public void testBlob(TestContext ctx) { + byte[] v1 = b("val1"); byte[] v2 = b("val2"); - byte[] em = b(""); byte[] v3 = b("val3"); - byte[] v_4 = b("val_4"); - byte[] v1 = b("val1"); byte[] v4 = b("val4"); - byte[] v_1 = b("val_1"); - byte[] z = b("z"); + byte[] v5 = b("value5"); + byte[] v6 = b("value_value_6"); + byte[] nv = b(""); + byte[] mn = b(""); + byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); + List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new byte[][]{}, new byte[][]{}, em, em, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)2, em, null, new byte[][]{v3, v1, em, z, v4}, new byte[][]{v3, v1, null, em, z, v3}, em, null, new byte[][]{em, v1, em, v2, v2}, new byte[][]{em, v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ), - Tuple.of((byte)4, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, v4}, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, em} ), - Tuple.of((byte)5, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ) + Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), + Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), + Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), + Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), + Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), + Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), + Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), + Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), + Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), + Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), + Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, v4}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, nv} ), + Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), + Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ), + Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ) ); - doTest(ctx, "string", byte[].class, true, batch); + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); } @Test @@ -130,7 +151,7 @@ public void testDate(TestContext ctx) { Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) ); - doTest(ctx, "date", LocalDate.class, true, batch); + doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); } @Test @@ -151,15 +172,15 @@ public void testDateTime(TestContext ctx) { Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) ); - doTest(ctx, "datetime", OffsetDateTime.class, true, batch); + doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); } private static byte[] b(String s) { return s.getBytes(StandardCharsets.UTF_8); } - private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, - List batch) { + private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -177,19 +198,11 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); int batchIdx = 0; for (Row row : res3) { - Tuple batchRow = batch.get(batchIdx); - Object id = row.getValue("id"); - for (int colIdx = 0; colIdx < batchRow.size(); ++colIdx) { + Tuple expectedRow = batch.get(batchIdx); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { String colName = columnsList.get(colIdx); - Object expectedValue = batchRow.getValue(colIdx); - Class colType = expectedValue == null ? desiredType : expectedValue.getClass(); - Object actualValue; - if ("id".equals(colName)) { - actualValue = row.getValue(colName); - } else { - actualValue = row.get(colType, colName); - } - compareValues(ctx, id, colName, colType, expectedValue, actualValue); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); } ++batchIdx; } @@ -198,18 +211,62 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b })); })); } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } - private void compareValues(TestContext ctx, Object id, String colName, Class colType, Object expectedValue, Object actualValue) { - if (colType.isArray()) { - boolean equals; - if (colType == byte[].class) { - equals = Arrays.equals((byte[]) expectedValue, (byte[]) actualValue); + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provided dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } } else { - equals = Arrays.deepEquals((Object[]) expectedValue, (Object[]) actualValue); + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } } - ctx.assertTrue(equals, colName + " byte row mismatch; id = " + id); - } else { - ctx.assertEquals(expectedValue, actualValue, colName + " row mismatch; id = " + id); } + checker.forRow(row); } } From c65f52b11153d7587994782fd68c1d872b105ef0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 16:19:20 +0300 Subject: [PATCH 036/176] reworked ArrayColumnReader Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 110 +++---- .../codec/columns/ClickhouseColumnReader.java | 6 - .../columns/LowCardinalityColumnWriter.java | 24 -- .../codec/columns/StringColumnReader.java | 8 +- .../codec/columns/UInt32ColumnReader.java | 8 - .../impl/codec/columns/UInt8ColumnReader.java | 8 - .../clickhousenativeclient/AllTypesTest.java | 272 ----------------- .../ArraySerDesTest.java | 73 +++++ .../alltypes/AllTypesTest.java | 283 ++++++++++++++++++ 9 files changed, 399 insertions(+), 393 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 19ab74d1c1..29658b321c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -4,12 +4,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.lang.reflect.Array; import java.nio.charset.Charset; import java.sql.JDBCType; -import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -19,10 +18,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private Deque, Integer>> graphLevelDeque; private List> slicesSeries; - private List curSlice; - private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; @@ -30,10 +26,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer nItems; private boolean resliced; private Object statePrefix; - private boolean hasFirstSlice; - private int sliceIdxAtCurrentDepth; - private int prevSliceSizeAtCurrentDepth = 0; - private Triplet, Integer> slicesAtCurrentDepth; + + private Integer curLevelSliceSize; + private List curLevelSlice; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); @@ -60,19 +55,17 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (graphLevelDeque == null) { - graphLevelDeque = new ArrayDeque<>(); - graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + if (nItems == null) { slicesSeries = new ArrayList<>(); - curSlice = new ArrayList<>(); - curDepth = 0; curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } if (statePrefix == null) { return null; } - readSlices(in); + if (curNestedColumnDescr.isArray()) { + readSlices(in); + } if (nestedColumnReader == null) { nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); nestedColumnReader = nestedColumn.reader(nItems); @@ -100,8 +93,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { resliced = true; return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); } + Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || nestedColumnReader.getClass() == Enum8ColumnReader.class + || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + return emptyData; + } resliced = true; - return resliceIntoArray((Object[])java.lang.reflect.Array.newInstance(elementClass, 0), elementClass); + return resliceIntoArray(emptyData, elementClass); } @Override @@ -118,6 +117,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } + //reslicing for every row can be slow (for BLOBS and Enums if recoding requested), maybe store resliced array into Phantom/Weak reference reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } return reslicedRet[rowIdx]; @@ -167,66 +167,40 @@ private Object[] resliceIntoArray(Object[] data, Class elementClass) { } intermData = newDataList; } - return intermData; + return (Object[]) intermData[0]; } private void readSlices(ClickhouseStreamDataSource in) { - if (!hasFirstSlice) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + if (slicesSeries.isEmpty()) { + slicesSeries.add(Arrays.asList(0, nRows)); + curLevelSliceSize = nRows; } - - while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { - if (sliceIdxAtCurrentDepth == 0) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - - curDepth = slicesAtCurrentDepth.right(); - slicesSeries.add(curSlice); - - //The last element in slice is index(number) of the last - //element in current level. On the last iteration this - //represents number of elements in fully flattened array. - nItems = curSlice.get(curSlice.size() - 1); - curSlice = new ArrayList<>(); - } - if (curNestedColumnDescr.isArray()) { - readSlice(in, slicesAtCurrentDepth); - } + if (nRows == 0) { + curNestedColumnDescr = elementTypeDescr; + return; } - } - private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { - if (sliceIdxAtCurrentDepth == 0) { - curSlice.add(0); - } - for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { - int size = sliceState.middle().get(sliceIdxAtCurrentDepth); - int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; - if (in.readableBytes() < nestedSizeCount * 8) { - return false; + long lastSliceSize = 0; + while (curNestedColumnDescr.isArray()) { + if (curLevelSlice == null) { + curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); + curLevelSlice.add(0); } - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { + return; + } + for (int curLevelSliceIndex = 0; curLevelSliceIndex < curLevelSliceSize; ++curLevelSliceIndex) { + lastSliceSize = in.readLongLE(); + if (lastSliceSize > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); } - nestedSizes.add((int) sz); + curLevelSlice.add((int) lastSliceSize); } - curSlice.addAll(nestedSizes); - prevSliceSizeAtCurrentDepth = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + slicesSeries.add(curLevelSlice); + curLevelSlice = null; + curLevelSliceSize = (int) lastSliceSize; + curNestedColumnDescr = curNestedColumnDescr.getNestedDescr(); } - sliceIdxAtCurrentDepth = 0; - prevSliceSizeAtCurrentDepth = 0; - return true; - } - - public static void main(String[] args) { - String[][][] el = new String[0][][]; - Class elType = el.getClass().getComponentType(); - System.err.println(elType.getSimpleName()); + nItems = (int)lastSliceSize; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 73d22b0782..f15a3a3203 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -2,10 +2,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; import java.util.BitSet; -import java.util.List; public abstract class ClickhouseColumnReader { private static final Object NOP_STATE = new Object(); @@ -122,8 +120,4 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } - - public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index b8c5fc7091..85c9fac8fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,16 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.RawClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; -import java.nio.charset.StandardCharsets; -import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -131,22 +125,4 @@ public int hashCode() { return hash; } } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("LowCardinality(Nullable(String))", "name"); - List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); - - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", - 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); - LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); - - ByteBuf buffer = Unpooled.buffer(100); - RawClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buffer); - writer.serializeData(sink, 0, data.size()); - System.err.println(writer.dictionaryIndex); - System.err.println(writer.keys); - System.err.println(buffer.readableBytes()); - System.err.print(ByteBufUtil.hexDump(buffer)); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index fafbfd0881..61fd984492 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -3,7 +3,6 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.util.ArrayList; @@ -32,7 +31,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } - //no dedicated BLOB type support; will encode into String if user did not request byte[].class + //no dedicated BLOB type support; will encode(later) into String if user asked for String explicitly byte[] stringBytes; if (nullsMap == null || !nullsMap.get(elements.size())) { stringBytes = new byte[curStrLength]; @@ -57,9 +56,4 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new StringColumnWriter(data, columnDescriptor, charset, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 2c54ca6e8d..10d307d408 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -2,9 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; - -import java.util.List; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; @@ -42,9 +39,4 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new UInt32ColumnWriter(data, columnDescriptor, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 26b4896dd6..8c001c0311 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -2,9 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; - -import java.util.List; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; @@ -50,9 +47,4 @@ protected Object[] allocateArray(Class desired, int length) { } return new Byte[length]; } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java deleted file mode 100644 index 6c03962358..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ /dev/null @@ -1,272 +0,0 @@ -package io.vertx.clickhousenativeclient; - -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.ColumnChecker; -import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.Tuple; -import org.junit.*; -import org.junit.runner.RunWith; - -import java.nio.charset.StandardCharsets; -import java.time.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; - -@RunWith(VertxUnitRunner.class) -public class AllTypesTest { - private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); - - public static final String TABLE_PREFIX = "vertx_test_"; - - @ClassRule - public static ClickhouseResource rule = new ClickhouseResource(); - - private ClickhouseNativeConnectOptions options; - private Vertx vertx; - - @Before - public void setup(TestContext ctx) { - options = rule.options(); - vertx = Vertx.vertx(); - } - - @After - public void teardDown(TestContext ctx) { - vertx.close(ctx.asyncAssertSuccess()); - } - - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "nullable_array_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "nullable_array_lc_t")); - } - return columns; - } - - @Test - public void testUInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), - Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), - Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), - Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) - ); - doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - @Test - public void testInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), - Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), - Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), - Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) - ); - doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); - } - - @Test - public void testString(TestContext ctx) { - String v2 = "val2"; - String v_1 = "val_1"; - String v4 = "val_4"; - String v5 = "val5"; - String v3 = "val3"; - String v1 = "val1"; - List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), - Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), - Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), - Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); - } - - @Test - public void testBlob(TestContext ctx) { - byte[] v1 = b("val1"); - byte[] v2 = b("val2"); - byte[] v3 = b("val3"); - byte[] v4 = b("val4"); - byte[] v5 = b("value5"); - byte[] v6 = b("value_value_6"); - byte[] nv = b(""); - byte[] mn = b(""); - byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); - - List batch = Arrays.asList( - Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), - Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), - Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), - Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), - Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), - Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), - Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), - Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), - Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), - Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), - Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), - Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, v4}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, nv} ), - Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), - Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ), - Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); - } - - @Test - public void testDate(TestContext ctx) { - LocalDate dt = LocalDate.of(2020, 3, 29); - LocalDate d2 = dt.plusDays(2); - LocalDate d3 = dt.plusDays(3); - LocalDate mn = DateColumnReader.MIN_VALUE; - LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), - Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) - ); - doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - @Test - public void testDateTime(TestContext ctx) { - ZoneId zoneId = ZoneId.of("Europe/Oslo"); - OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), - Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) - ); - doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - private static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); - } - - private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Tuple expectedRow = batch.get(batchIdx); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); - } - ++batchIdx; - } - })); - })); - })); - })); - } -} - -class MyColumnChecker { - private final Class componentType; - private final ColumnChecker.SerializableBiFunction byIndexGetter; - private final ColumnChecker.SerializableBiFunction byNameGetter; - private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; - private final ColumnChecker.SerializableBiFunction arrayByNameGetter; - - public MyColumnChecker(Class componentType, - ColumnChecker.SerializableBiFunction byIndexGetter, - ColumnChecker.SerializableBiFunction byNameGetter, - ColumnChecker.SerializableBiFunction arrayByIndexGetter, - ColumnChecker.SerializableBiFunction arrayByNameGetter) { - this.componentType = componentType; - this.byIndexGetter = byIndexGetter; - this.byNameGetter = byNameGetter; - this.arrayByNameGetter = arrayByNameGetter; - this.arrayByIndexGetter = arrayByIndexGetter; - } - - public void checkColumn(Row row, int index, String name, R expected) { - ColumnChecker checker = ColumnChecker.checkColumn(index, name); - if ("id".equals(name)) { - checker.returns((Class)expected.getClass(), expected) - .forRow(row); - return; - } - if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { - //ask driver to turn off String encoding - checker = checker - .returns((tuple, idx) -> tuple.get(byte[].class, idx), - (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), - (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); - } else { - //arrays are non-nullable - if (expected != null && expected.getClass().isArray()) { - boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding - checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); - } else { - checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); - } - if (!multidimensional && arrayByIndexGetter != null) { - //API does not provided dedicated methods to get multi-dimensional arrays - checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); - } - } else { - //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); - if (byIndexGetter != null) { - checker = checker.returns(byIndexGetter, byNameGetter, expected); - } - } - } - checker.forRow(row); - } -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java new file mode 100644 index 0000000000..114e849b0e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -0,0 +1,73 @@ +package io.vertx.clickhousenativeclient; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.buffer.UnpooledByteBufAllocator; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.*; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.sqlclient.Tuple; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(Parameterized.class) +public class ArraySerDesTest { + private final ClickhouseColumn col; + private final List data; + + public ArraySerDesTest(String nm, ClickhouseColumn col, List data) { + this.col = col; + this.data = data; + } + + @Parameterized.Parameters(name = "{0}") + public static Iterable dataForTest() { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); + List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + Tuple.of(new String[][][]{ {{}}, {{}} } ), + Tuple.of(new String[][][]{ {{}}, {{}} } ), + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ), + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ) + ); + + return Arrays.asList(new Object[][]{ + {data.size() + " rows", col, data}, + {"0 rows", col, Collections.emptyList()} + }); + } + + @Test + public void doSerDes() { + ClickhouseColumnWriter writer = col.writer(data, 0); + ByteBuf buf = Unpooled.buffer(); + ClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buf); + writer.serializeColumn(sink, 0, data.size()); + sink.finish(); + + ClickhouseColumnReader reader = col.reader(data.size()); + ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(); + ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); + reader.readColumn(ds); + for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { + Object actual = reader.getElement(rowIdx, String.class); + Object expected = data.get(rowIdx).getValue(0); + Assert.assertArrayEquals((Object[])expected, (Object[])actual); + } + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java new file mode 100644 index 0000000000..1e8e1b3f6b --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java @@ -0,0 +1,283 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.*; +import org.junit.runner.RunWith; + +import java.nio.charset.StandardCharsets; +import java.time.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +@RunWith(VertxUnitRunner.class) +public class AllTypesTest { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); + } + return columns; + } + + @Test + public void testEmptyBlob(TestContext ctx) { + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), Collections.emptyList()); + } + + @Test + public void testBlob(TestContext ctx) { + byte[] v1 = b("val1"); + byte[] v2 = b("val2"); + byte[] v3 = b("val3"); + byte[] v4 = b("val4"); + byte[] v5 = b("value5"); + byte[] v6 = b("value_value_6"); + byte[] nv = b(""); + byte[] mn = b(""); + byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t + Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, mx}, new byte[][][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); + } + + //@Test + public void testUInt8(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), + Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), + Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), + Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) + ); + doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); + } + + //@Test + public void testInt8(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), + Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), + Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), + Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) + ); + doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); + } + + //@Test + public void testString(TestContext ctx) { + String v2 = "val2"; + String v_1 = "val_1"; + String v4 = "val_4"; + String v5 = "val5"; + String v3 = "val3"; + String v1 = "val1"; + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), + Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), + Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), + Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) + ); + doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); + } + + //@Test + public void testDate(TestContext ctx) { + LocalDate dt = LocalDate.of(2020, 3, 29); + LocalDate d2 = dt.plusDays(2); + LocalDate d3 = dt.plusDays(3); + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), + Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) + ); + doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); + } + + //@Test + public void testDateTime(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), + Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) + ); + doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); + } + + private static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); + } + + private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + } + ++batchIdx; + } + })); + })); + })); + })); + } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } + + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provided dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } + } else { + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } + } + } + checker.forRow(row); + } +} From 070aafc2ee3da2f0a0f6d02e765272b33a6d37e9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 18:16:34 +0300 Subject: [PATCH 037/176] reworked AllTypesTest Signed-off-by: vladimir --- .../alltypes/AllTypesBase.java | 152 ++++++++++ .../{AllTypesTest.java => BlobTest.java} | 266 +++--------------- .../alltypes/DateTest.java | 79 ++++++ .../alltypes/DateTimeTest.java | 84 ++++++ .../alltypes/Int8Test.java | 78 +++++ .../alltypes/StringTest.java | 76 +++++ .../alltypes/UInt8Test.java | 77 +++++ 7 files changed, 578 insertions(+), 234 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/{AllTypesTest.java => BlobTest.java} (56%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java new file mode 100644 index 0000000000..b1f433c4a2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -0,0 +1,152 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; + +@RunWith(VertxUnitRunner.class) +public abstract class AllTypesBase { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesBase.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + protected abstract String tableSuffix(); + protected abstract Class elementType(); + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); + } + return columns; + } + + protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + } + ++batchIdx; + } + })); + })); + })); + })); + } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } + + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provide dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } + } else { + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } + } + } + checker.forRow(row); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java similarity index 56% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 1e8e1b3f6b..4eff773be5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,68 +1,29 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.ColumnChecker; -import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.*; +import org.junit.Test; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; -import java.time.*; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.function.Consumer; @RunWith(VertxUnitRunner.class) -public class AllTypesTest { - private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); - - public static final String TABLE_PREFIX = "vertx_test_"; - - @ClassRule - public static ClickhouseResource rule = new ClickhouseResource(); - - private ClickhouseNativeConnectOptions options; - private Vertx vertx; - - @Before - public void setup(TestContext ctx) { - options = rule.options(); - vertx = Vertx.vertx(); - } - - @After - public void teardDown(TestContext ctx) { - vertx.close(ctx.asyncAssertSuccess()); - } - - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); - } - return columns; +public class BlobTest extends AllTypesBase { + protected static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } @Test - public void testEmptyBlob(TestContext ctx) { - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), Collections.emptyList()); + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); } @Test - public void testBlob(TestContext ctx) { + public void testData(TestContext ctx) { byte[] v1 = b("val1"); byte[] v2 = b("val2"); byte[] v3 = b("val3"); @@ -74,7 +35,7 @@ public void testBlob(TestContext ctx) { byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); List batch = Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -87,197 +48,34 @@ public void testBlob(TestContext ctx) { Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + Tuple.of((byte)13, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); } - //@Test - public void testUInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), - Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), - Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), - Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) - ); - doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - //@Test - public void testInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), - Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), - Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), - Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) - ); - doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); - } - - //@Test - public void testString(TestContext ctx) { - String v2 = "val2"; - String v_1 = "val_1"; - String v4 = "val_4"; - String v5 = "val5"; - String v3 = "val3"; - String v1 = "val1"; - List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), - Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), - Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), - Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); - } - - //@Test - public void testDate(TestContext ctx) { - LocalDate dt = LocalDate.of(2020, 3, 29); - LocalDate d2 = dt.plusDays(2); - LocalDate d3 = dt.plusDays(3); - LocalDate mn = DateColumnReader.MIN_VALUE; - LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), - Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) - ); - doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - //@Test - public void testDateTime(TestContext ctx) { - ZoneId zoneId = ZoneId.of("Europe/Oslo"); - OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), - Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) - ); - doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - private static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); - } - - private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Number id = row.get(Number.class, "id"); - Tuple expectedRow = batch.get(batchIdx); - LOG.info("checking row " + tableSuffix + ":" + id); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); - } - ++batchIdx; - } - })); - })); - })); - })); - } -} - -class MyColumnChecker { - private final Class componentType; - private final ColumnChecker.SerializableBiFunction byIndexGetter; - private final ColumnChecker.SerializableBiFunction byNameGetter; - private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; - private final ColumnChecker.SerializableBiFunction arrayByNameGetter; - - public MyColumnChecker(Class componentType, - ColumnChecker.SerializableBiFunction byIndexGetter, - ColumnChecker.SerializableBiFunction byNameGetter, - ColumnChecker.SerializableBiFunction arrayByIndexGetter, - ColumnChecker.SerializableBiFunction arrayByNameGetter) { - this.componentType = componentType; - this.byIndexGetter = byIndexGetter; - this.byNameGetter = byNameGetter; - this.arrayByNameGetter = arrayByNameGetter; - this.arrayByIndexGetter = arrayByIndexGetter; + @Override + protected String tableSuffix() { + return "string"; } - public void checkColumn(Row row, int index, String name, R expected) { - ColumnChecker checker = ColumnChecker.checkColumn(index, name); - if ("id".equals(name)) { - checker.returns((Class)expected.getClass(), expected) - .forRow(row); - return; - } - if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { - //ask driver to turn off String encoding - checker = checker - .returns((tuple, idx) -> tuple.get(byte[].class, idx), - (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), - (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); - } else { - //arrays are non-nullable - if (expected != null && expected.getClass().isArray()) { - boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding - checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); - } else { - checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); - } - if (!multidimensional && arrayByIndexGetter != null) { - //API does not provided dedicated methods to get multi-dimensional arrays - checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); - } - } else { - //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); - if (byIndexGetter != null) { - checker = checker.returns(byIndexGetter, byNameGetter, expected); - } - } - } - checker.forRow(row); + @Override + protected Class elementType() { + return byte[].class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java new file mode 100644 index 0000000000..d2c6517574 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTest extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + LocalDate v1 = LocalDate.of(2020, 3, 29); + LocalDate v2 = v1.plusDays(2); + LocalDate v3 = v2.plusDays(3); + LocalDate v4 = v1.minusDays(2); + LocalDate v5 = v2.minusDays(3); + LocalDate v6 = v2.minusDays(4); + LocalDate nv = DateColumnReader.MIN_VALUE; + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, v1, null, nv, mx, v3}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, v2, null, v3, v2}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, v1, null, nv, mx, v3}, new LocalDate[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, v2, null, v3, v2}, new LocalDate[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new LocalDate[]{v1, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new LocalDate[]{v1, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v2, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new LocalDate[]{nv, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, null, v4}, new LocalDate[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new LocalDate[]{nv, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, null, nv}, new LocalDate[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new LocalDate[]{v4, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v4, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v2, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); + } + + @Override + protected String tableSuffix() { + return "date"; + } + + @Override + protected Class elementType() { + return LocalDate.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java new file mode 100644 index 0000000000..210a44e467 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -0,0 +1,84 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTimeTest extends AllTypesBase { + + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v3 = Instant.ofEpochSecond(1617120094L + 20L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v4 = Instant.ofEpochSecond(1617120094L - 10L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v5 = Instant.ofEpochSecond(1617120094L - 20L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v6 = Instant.ofEpochSecond(1617120094L - 200L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime nv = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, v2, null, v3, v2}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, v2, null, v3, v2}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v2, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, v4}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, nv}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v2, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); + } + + @Override + protected String tableSuffix() { + return "datetime"; + } + + @Override + protected Class elementType() { + return OffsetDateTime.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java new file mode 100644 index 0000000000..f9fc8298a4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -0,0 +1,78 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int8Test extends AllTypesBase { + + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + Byte v1 = 10; + Byte v2 = -20; + Byte v3 = 30; + Byte v4 = -40; + Byte v5 = 60; + Byte v6 = -70; + Byte nv = 0; + Byte mn = -128; + Byte mx = 127; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, mx}, new Byte[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, v1, null, nv, mx, v3}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, v2, null, v3, v2}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, v1, null, nv, mx, v3}, new Byte[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, v2, null, v3, v2}, new Byte[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Byte[]{v1, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Byte[]{v1, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v2, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Byte[]{nv, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, null, v4}, new Byte[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Byte[]{nv, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, null, nv}, new Byte[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Byte[]{v4, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v4, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v2, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); + } + + + @Override + protected String tableSuffix() { + return "int8"; + } + + @Override + protected Class elementType() { + return Byte.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java new file mode 100644 index 0000000000..8cf1097b63 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -0,0 +1,76 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class StringTest extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + String v1 = "val1"; + String v2 = "val2"; + String v3 = "val3"; + String v4 = "val4"; + String v5 = "value5"; + String v6 = "value_value_6"; + String nv = ""; + String mn = ""; + String mx = "not so looooooooooooooooooooooooooooooooooooooong value"; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, v4}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, nv}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); + } + + @Override + protected String tableSuffix() { + return "string"; + } + + @Override + protected Class elementType() { + return String.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java new file mode 100644 index 0000000000..c792f28e8e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -0,0 +1,77 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt8Test extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + Short v1 = 10; + Short v2 = 20; + Short v3 = 30; + Short v4 = 40; + Short v5 = 60; + Short v6 = 70; + Short nv = 0; + Short mn = 0; + Short mx = 255; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, v4}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, nv}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); + } + + @Override + protected String tableSuffix() { + return "uint8"; + } + + @Override + protected Class elementType() { + return Short.class; + } +} From 91632f56637589ec1412577bb5ded5eee20defce Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 23:55:42 +0300 Subject: [PATCH 038/176] added IPv4 column test Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 +- .../impl/codec/columns/Float64Column.java | 4 + .../codec/columns/Float64ColumnReader.java | 5 + .../impl/codec/columns/IPv4Column.java | 21 + .../impl/codec/columns/IPv4ColumnReader.java | 3 +- .../impl/codec/columns/IPv4ColumnWriter.java | 2 +- .../impl/codec/columns/IPv6Column.java | 4 +- .../impl/codec/columns/IPv6ColumnReader.java | 1 - .../impl/codec/columns/IPv6ColumnWriter.java | 27 ++ .../impl/codec/columns/Int128Column.java | 32 ++ ...umnReader.java => Int128ColumnReader.java} | 12 +- .../codec/columns/Int128ColumnWriter.java | 27 ++ .../impl/codec/columns/UInt128Column.java | 22 -- .../impl/codec/columns/UInt32Column.java | 8 + .../impl/codec/columns/UUIDColumn.java | 10 +- .../impl/codec/columns/UUIDColumnReader.java | 5 +- .../impl/codec/columns/UUIDColumnWriter.java | 26 ++ .../alltypes/AllTypesBase.java | 37 +- .../alltypes/BlobTest.java | 29 +- .../alltypes/DateTest.java | 25 +- .../alltypes/DateTimeTest.java | 26 +- .../alltypes/Float64Test.java | 62 +++ .../alltypes/IPv4Test.java | 72 ++++ .../alltypes/Int128Test.java | 79 ++++ .../alltypes/Int8Test.java | 27 +- .../alltypes/StringTest.java | 26 +- .../alltypes/UInt8Test.java | 25 +- .../alltypes/UUIDTest.java | 59 +++ .../src/test/python/all_types_table.sql | 367 ++++++++++++++++++ .../src/test/python/gen_all_types_tables.py | 4 +- .../src/test/resources/init.sql | 17 + 31 files changed, 898 insertions(+), 180 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{UInt128ColumnReader.java => Int128ColumnReader.java} (73%) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java create mode 100644 vertx-clickhouse-native-client/src/test/python/all_types_table.sql diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index d9affc019a..8c72b1f927 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -97,8 +97,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, - new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + Int128Column.INT128_MIN_VALUE, Int128Column.INT128_MAX_VALUE); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); @@ -114,7 +114,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); @@ -144,10 +144,10 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("IPv4".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } else if ("IPv6".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); @@ -182,8 +182,8 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (jdbcType == JDBCType.BIGINT) { if (descr.getElementSize() == UInt64ColumnReader.ELEMENT_SIZE) { return new UInt64Column(descr); - } else if (descr.getElementSize() == UInt128ColumnReader.ELEMENT_SIZE) { - return new UInt128Column(descr); + } else if (descr.getElementSize() == Int128Column.ELEMENT_SIZE) { + return new Int128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index f05e6c818b..db3846812a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -19,4 +19,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Float64ColumnWriter(data, descriptor, columnIndex); } + + public Object nullValue() { + return (double)0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index 320dd79ff5..9e4c5ab07a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -26,4 +26,9 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index f843fbdbdb..d06ae238a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -3,9 +3,25 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.List; public class IPv4Column extends UInt32Column { + public static final int ELEMENT_SIZE = 4; + public static final Inet4Address ZERO_VALUE = ipv4(new byte[]{0, 0, 0, 0}); + public static final Inet4Address MAX_VALUE = ipv4(new byte[]{Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE}); + public static final Inet4Address MIN_VALUE = ipv4(new byte[]{Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE}); + + private static Inet4Address ipv4(byte[] src) { + try { + return (Inet4Address) Inet4Address.getByAddress(src); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + public IPv4Column(ClickhouseNativeColumnDescriptor descr) { super(descr); } @@ -19,4 +35,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv4ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return ZERO_VALUE; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index ce2d4b82f7..9cb58387f4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -7,7 +7,6 @@ import java.net.UnknownHostException; public class IPv4ColumnReader extends UInt32ColumnReader { - public static final int ELEMENT_SIZE = 4; public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { super(nRows, descriptor); @@ -15,7 +14,7 @@ public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet4Address.class || desired == null) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == String.class || desired == null) { Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); try { return Inet4Address.getByAddress(intBytes(addr)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index 763c752771..7d798113d6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -18,6 +18,6 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { } private static int intFromBytes(byte[] b) { - return b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; + return (0xFF000000 & (b[0] << 24)) | (0xFF0000 & (b[1] << 16)) | (0xFF00 & (b[2] << 8)) | (0xFF & (b[3])); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index bbf699dc70..4396bd7a00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -7,6 +7,8 @@ import java.util.List; public class IPv6Column extends FixedStringColumn { + public static final int ELEMENT_SIZE = 16; + public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(descr, md); } @@ -18,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 86dcbb5885..d69f82d267 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -8,7 +8,6 @@ import java.net.UnknownHostException; public class IPv6ColumnReader extends FixedStringColumnReader { - public static final int ELEMENT_SIZE = 16; protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java new file mode 100644 index 0000000000..98ec4a1857 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.net.Inet6Address; +import java.nio.charset.Charset; +import java.util.List; + +public class IPv6ColumnWriter extends FixedStringColumnWriter { + public IPv6ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, charset, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Inet6Address address = (Inet6Address) val; + byte[] bytes = address.getAddress(); + super.serializeDataElement(sink, bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(IPv6Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java new file mode 100644 index 0000000000..1e1387b73a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.util.List; + +public class Int128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final BigInteger ZERO_VALUE = new BigInteger(new byte[ELEMENT_SIZE]); + public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); + public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); + + public Int128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Int128ColumnReader(nRows, descriptor); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Int128ColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return ZERO_VALUE; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 40845f1f5c..f1d24a7564 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -7,24 +7,22 @@ import java.math.BigInteger; //experimental support at the moment -public class UInt128ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; - - protected UInt128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { +public class Int128ColumnReader extends ClickhouseColumnReader { + protected Int128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Int128Column.ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; - byte[] readBuffer = new byte[ELEMENT_SIZE]; + byte[] readBuffer = new byte[Int128Column.ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); data[i] = new BigInteger(Utils.reverse(readBuffer)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Int128Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java new file mode 100644 index 0000000000..5b80729691 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.util.List; + +public class Int128ColumnWriter extends ClickhouseColumnWriter { + public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigInteger bi = (BigInteger) val; + byte[] bytes = Utils.reverse(bi.toByteArray()); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Int128Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java deleted file mode 100644 index cece9b61ca..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.sqlclient.Tuple; - -import java.util.List; - -public class UInt128Column extends ClickhouseColumn { - public UInt128Column(ClickhouseNativeColumnDescriptor descriptor) { - super(descriptor); - } - - @Override - public ClickhouseColumnReader reader(int nRows) { - return new UInt128ColumnReader(nRows, descriptor); - } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index f1a4c37359..d99c183eb1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -19,4 +19,12 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt32ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + if (descriptor.isUnsigned()) { + return 0L; + } + return 0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index ef9fe811fe..8e661638b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -4,8 +4,12 @@ import io.vertx.sqlclient.Tuple; import java.util.List; +import java.util.UUID; public class UUIDColumn extends ClickhouseColumn { + public static final UUID ZERO_UUID = new UUID(0, 0); + public static final int ELEMENT_SIZE = 16; + public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -17,6 +21,10 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new UUIDColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return ZERO_UUID; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index ddb8c80cb7..4e8c87ab02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -6,7 +6,6 @@ import java.util.UUID; public class UUIDColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); @@ -14,7 +13,7 @@ protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= UUIDColumn.ELEMENT_SIZE * nRows) { UUID[] data = new UUID[nRows]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { @@ -22,7 +21,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { long leastSigBits = in.readLongLE(); data[i] = new UUID(mostSigBits, leastSigBits); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(UUIDColumn.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java new file mode 100644 index 0000000000..c3e21525e2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; +import java.util.UUID; + +public class UUIDColumnWriter extends ClickhouseColumnWriter { + public UUIDColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + UUID uuid = (UUID) val; + sink.writeLongLE(uuid.getMostSignificantBits()); + sink.writeLongLE(uuid.getLeastSignificantBits()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(UUIDColumn.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index b1f433c4a2..3acfaa4aa6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -12,14 +12,12 @@ import io.vertx.sqlclient.ColumnChecker; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; +import org.junit.*; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -28,6 +26,9 @@ public abstract class AllTypesBase { private static final Logger LOG = LoggerFactory.getLogger(AllTypesBase.class); public static final String TABLE_PREFIX = "vertx_test_"; + protected final String tableSuffix; + protected final MyColumnChecker checker; + protected final boolean hasLowCardinality; @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -35,6 +36,16 @@ public abstract class AllTypesBase { private ClickhouseNativeConnectOptions options; private Vertx vertx; + public AllTypesBase(String tableSuffix, MyColumnChecker checker) { + this(tableSuffix, checker, true); + } + + public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasLowCardinality) { + this.tableSuffix = tableSuffix; + this.checker = checker; + this.hasLowCardinality = hasLowCardinality; + } + @Before public void setup(TestContext ctx) { options = rule.options(); @@ -46,8 +57,17 @@ public void teardDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } - protected abstract String tableSuffix(); - protected abstract Class elementType(); + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + doTest(ctx, createBatch()); + } + + public abstract List createBatch(); private List columnsList(boolean hasLowCardinality) { List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); @@ -57,8 +77,7 @@ private List columnsList(boolean hasLowCardinality) { return columns; } - protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { + protected void doTest(TestContext ctx, List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -82,7 +101,7 @@ protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCa for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { String colName = columnsList.get(colIdx); Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); } ++batchIdx; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 4eff773be5..739eb756d1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,29 +1,25 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class BlobTest extends AllTypesBase { - protected static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); + public BlobTest() { + super("string", new MyColumnChecker<>(byte[].class, null, null, null, null)); } - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + protected static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { byte[] v1 = b("val1"); byte[] v2 = b("val2"); byte[] v3 = b("val3"); @@ -34,7 +30,7 @@ public void testData(TestContext ctx) { byte[] mn = b(""); byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -66,16 +62,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - @Override - protected String tableSuffix() { - return "string"; - } - - @Override - protected Class elementType() { - return byte[].class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index d2c6517574..f3d7b8b1e4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,27 +1,23 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.time.LocalDate; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class DateTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), Collections.emptyList()); + public DateTest() { + super("date", new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { LocalDate v1 = LocalDate.of(2020, 3, 29); LocalDate v2 = v1.plusDays(2); LocalDate v3 = v2.plusDays(3); @@ -32,7 +28,7 @@ public void testData(TestContext ctx) { LocalDate mn = DateColumnReader.MIN_VALUE; LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -64,16 +60,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - @Override - protected String tableSuffix() { - return "date"; - } - - @Override - protected Class elementType() { - return LocalDate.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 210a44e467..f84dc7bc28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,31 +1,26 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; - import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneId; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class DateTimeTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), Collections.emptyList()); + public DateTimeTest() { + super("datetime", new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { ZoneId zoneId = ZoneId.of("Europe/Oslo"); OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L).atZone(zoneId).toOffsetDateTime(); @@ -37,7 +32,7 @@ public void testData(TestContext ctx) { OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -69,16 +64,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - @Override - protected String tableSuffix() { - return "datetime"; - } - - @Override - protected Class elementType() { - return OffsetDateTime.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java new file mode 100644 index 0000000000..4a2897df00 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Float64Test extends AllTypesBase { + public Float64Test() { + super("float64", new MyColumnChecker<>(Double.class, Tuple::getDouble, Row::getDouble, Tuple::getArrayOfDoubles, Row::getArrayOfDoubles)); + } + + @Override + public List createBatch() { + Double v1 = Double.MAX_VALUE / 2; + Double v2 = Double.MIN_VALUE / 2; + Double v3 = 30.0; + Double v4 = -40.0; + Double v5 = 60.0; + Double v6 = -70.0; + Double nv = 0.0; + Double mn = Double.MIN_VALUE; + Double mx = Double.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, mx}, new Double[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, v1, null, nv, mx, v3}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, v2, null, v3, v2}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, v1, null, nv, mx, v3}, new Double[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, v2, null, v3, v2}, new Double[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Double[]{v1, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Double[]{v1, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v2, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Double[]{nv, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, null, v4}, new Double[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Double[]{nv, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, null, nv}, new Double[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Double[]{v4, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v4, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v2, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java new file mode 100644 index 0000000000..41a90a6529 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -0,0 +1,72 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.net.Inet4Address; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class IPv4Test extends AllTypesBase { + public IPv4Test() { + super("ipv4", new MyColumnChecker<>(Inet4Address.class, null, null, null, null)); + } + + private static Inet4Address ipv4(int b1, int b2, int b3, int b4) { + try { + return (Inet4Address) Inet4Address.getByAddress(new byte[]{(byte)b1, (byte)b2, (byte)b3, (byte)b4}); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public List createBatch() { + Inet4Address v1 = ipv4(192, 168, 1, 1); + Inet4Address v2 = ipv4(10, 23, 1, 1); + Inet4Address v3 = ipv4(1, 1, 1, 1); + Inet4Address v4 = ipv4(8, 8, 8, 8); + Inet4Address v5 = ipv4(1, 2, 3, 4); + Inet4Address v6 = ipv4(100, 100, 100, 100); + Inet4Address nv = IPv4Column.ZERO_VALUE; + Inet4Address mn = IPv4Column.MIN_VALUE; + Inet4Address mx = IPv4Column.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, v1, null, nv, mx, v3}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, v2, null, v3, v2}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, v1, null, nv, mx, v3}, new Inet4Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, v2, null, v3, v2}, new Inet4Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Inet4Address[]{v1, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Inet4Address[]{v1, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v2, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Inet4Address[]{nv, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, null, v4}, new Inet4Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Inet4Address[]{nv, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, null, nv}, new Inet4Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Inet4Address[]{v4, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v4, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v2, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java new file mode 100644 index 0000000000..986b91a448 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.List; + + +@RunWith(VertxUnitRunner.class) +public class Int128Test extends AllTypesBase { + public Int128Test() { + super("int128", new MyColumnChecker<>(BigInteger.class, null, null, null, null)); + } + + @Ignore + @Test + public void testEmptyData(TestContext ctx) { + //experimental support at the moment + } + + @Ignore + @Test + public void testData(TestContext ctx) { + //experimental support at the moment + } + + @Override + public List createBatch() { + BigInteger v1 = BigInteger.valueOf(Long.MAX_VALUE); + BigInteger v2 = BigInteger.valueOf(Long.MIN_VALUE); + BigInteger v3 = BigInteger.valueOf(Integer.MAX_VALUE); + BigInteger v4 = BigInteger.valueOf(Integer.MIN_VALUE); + BigInteger v5 = BigInteger.valueOf(Long.MAX_VALUE / 2); + BigInteger v6 = BigInteger.valueOf(Long.MIN_VALUE / 2); + BigInteger nv = Int128Column.ZERO_VALUE; + BigInteger mn = Int128Column.INT128_MIN_VALUE; + BigInteger mx = Int128Column.INT128_MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, v1, null, nv, mx, v3}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, v2, null, v3, v2}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, v1, null, nv, mx, v3}, new BigInteger[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, v2, null, v3, v2}, new BigInteger[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new BigInteger[]{v1, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new BigInteger[]{v1, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v2, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new BigInteger[]{nv, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, null, v4}, new BigInteger[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new BigInteger[]{nv, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, null, nv}, new BigInteger[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new BigInteger[]{v4, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v4, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v2, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index f9fc8298a4..80023dd612 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,25 +1,20 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class Int8Test extends AllTypesBase { - - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + public Int8Test() { + super("int8", new MyColumnChecker<>(Byte.class, null, null, null, null)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { Byte v1 = 10; Byte v2 = -20; Byte v3 = 30; @@ -30,7 +25,7 @@ public void testData(TestContext ctx) { Byte mn = -128; Byte mx = 127; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -62,17 +57,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - - @Override - protected String tableSuffix() { - return "int8"; - } - - @Override - protected Class elementType() { - return Byte.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 8cf1097b63..9ff654d963 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,24 +1,21 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class StringTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + public StringTest() { + super("string", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { String v1 = "val1"; String v2 = "val2"; String v3 = "val3"; @@ -29,7 +26,7 @@ public void testData(TestContext ctx) { String mn = ""; String mx = "not so looooooooooooooooooooooooooooooooooooooong value"; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -61,16 +58,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - @Override - protected String tableSuffix() { - return "string"; - } - - @Override - protected Class elementType() { - return String.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index c792f28e8e..8046242ede 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,25 +1,21 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class UInt8Test extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), Collections.emptyList()); + public UInt8Test() { + super("uint8", new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { Short v1 = 10; Short v2 = 20; Short v3 = 30; @@ -30,7 +26,7 @@ public void testData(TestContext ctx) { Short mn = 0; Short mx = 255; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -62,16 +58,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - @Override - protected String tableSuffix() { - return "uint8"; - } - - @Override - protected Class elementType() { - return Short.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java new file mode 100644 index 0000000000..90c3db931e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -0,0 +1,59 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class UUIDTest extends AllTypesBase { + public UUIDTest() { + super("uuid", new MyColumnChecker<>(UUID.class, null, null, null, null), false); + } + + @Override + public List createBatch() { + UUID v1 = new UUID(1000, 2000); + UUID v2 = new UUID(-1000, -2000); + UUID v3 = new UUID(Integer.MIN_VALUE, Integer.MIN_VALUE); + UUID v4 = new UUID(Integer.MAX_VALUE, Integer.MAX_VALUE); + UUID v5 = new UUID(Long.MIN_VALUE / 2 , Long.MIN_VALUE / 2); + UUID v6 = new UUID(Long.MAX_VALUE / 2, Long.MAX_VALUE / 2); + UUID nv = new UUID(0, 0); + UUID mn = new UUID(Long.MIN_VALUE, Long.MIN_VALUE); + UUID mx = new UUID(Long.MAX_VALUE, Long.MAX_VALUE); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, mn}, new UUID[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, mn}, new UUID[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mn}, new UUID[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mn}, new UUID[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, mx}, new UUID[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, null, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, null, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new UUID[]{mn, mx}, new UUID[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mx}, new UUID[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new UUID[]{mn, mx}, new UUID[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mx}, new UUID[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{}, new UUID[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{}, new UUID[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{null}, new UUID[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{null}, new UUID[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new UUID[]{v3, v1, nv, mx, v4}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, v1, null, nv, mx, v3}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new UUID[]{v3, v1, nv, mx, v4}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, v1, null, nv, mx, v3}, new UUID[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new UUID[]{v1, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, nv, null}, new UUID[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new UUID[]{nv, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, null, v4}, new UUID[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new UUID[]{v4, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, nv, null}, new UUID[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new UUID[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new UUID[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql new file mode 100644 index 0000000000..a5e28cd04a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -0,0 +1,367 @@ +set allow_suspicious_low_cardinality_types=true; +DROP TABLE IF EXISTS vertx_test_int8; +CREATE TABLE vertx_test_int8 ( + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint8; +CREATE TABLE vertx_test_uint8 ( + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int16; +CREATE TABLE vertx_test_int16 ( + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint16; +CREATE TABLE vertx_test_uint16 ( + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int32; +CREATE TABLE vertx_test_int32 ( + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint32; +CREATE TABLE vertx_test_uint32 ( + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int64; +CREATE TABLE vertx_test_int64 ( + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint64; +CREATE TABLE vertx_test_uint64 ( + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int128; +CREATE TABLE vertx_test_int128 ( + id Int8, + simple_t Int128, + nullable_t Nullable(Int128), + array_t Array(Int128), + array3_t Array(Array(Array(Int128))), + nullable_array_t Array(Nullable(Int128)), + nullable_array3_t Array(Array(Array(Nullable(Int128)))), + simple_lc_t LowCardinality(Int128), + nullable_lc_t LowCardinality(Nullable(Int128)), + array_lc_t Array(LowCardinality(Int128)), + array3_lc_t Array(Array(Array(LowCardinality(Int128)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_string; +CREATE TABLE vertx_test_string ( + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_fixedstring; +CREATE TABLE vertx_test_fixedstring ( + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime; +CREATE TABLE vertx_test_datetime ( + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime64; +CREATE TABLE vertx_test_datetime64 ( + id Int8, + simple_t DateTime64, + nullable_t Nullable(DateTime64), + array_t Array(DateTime64), + array3_t Array(Array(Array(DateTime64))), + nullable_array_t Array(Nullable(DateTime64)), + nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_date; +CREATE TABLE vertx_test_date ( + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uuid; +CREATE TABLE vertx_test_uuid ( + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal32; +CREATE TABLE vertx_test_decimal32 ( + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal64; +CREATE TABLE vertx_test_decimal64 ( + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal128; +CREATE TABLE vertx_test_decimal128 ( + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum8; +CREATE TABLE vertx_test_enum8 ( + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum16; +CREATE TABLE vertx_test_enum16 ( + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float32; +CREATE TABLE vertx_test_float32 ( + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float64; +CREATE TABLE vertx_test_float64 ( + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv6; +CREATE TABLE vertx_test_ipv6 ( + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv4; +CREATE TABLE vertx_test_ipv4 ( + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = MergeTree() + ORDER BY (id); diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index f9bfd32ab4..fdfe03ba97 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -1,6 +1,6 @@ #! /usr/bin/python3 -ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'String', +ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', {'table': 'FixedString', 'type': 'FixedString(12)'}, 'DateTime', 'DateTime64', 'Date', 'UUID', {'table': 'Decimal32', 'type': 'Decimal32(4)'}, @@ -12,6 +12,8 @@ 'Float32', 'Float64', 'IPv6', 'IPv4']; print('set allow_suspicious_low_cardinality_types=true;'); +print('set allow_experimental_bigint_types=true'); + for elem_spec in ELEMENTARY_TYPES: table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; table_name = "vertx_test_{0}".format(table_name.lower()); diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 263882d8e5..1eb25dbd79 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -274,6 +274,23 @@ CREATE TABLE vertx_test_uint64 ( nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) ) engine = MergeTree() ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int128; +CREATE TABLE vertx_test_int128 ( + id Int8, + simple_t Int128, + nullable_t Nullable(Int128), + array_t Array(Int128), + array3_t Array(Array(Array(Int128))), + nullable_array_t Array(Nullable(Int128)), + nullable_array3_t Array(Array(Array(Nullable(Int128)))), + simple_lc_t LowCardinality(Int128), + nullable_lc_t LowCardinality(Nullable(Int128)), + array_lc_t Array(LowCardinality(Int128)), + array3_lc_t Array(Array(Array(LowCardinality(Int128)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) +) engine = MergeTree() + ORDER BY (id); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( id Int8, From 3330970ae566420d4bdf4e1a6d26e6fcc254c79a Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 00:48:23 +0300 Subject: [PATCH 039/176] added IPv6 column test Signed-off-by: vladimir --- .../columns/FixedStringColumnReader.java | 4 +- .../impl/codec/columns/IPv6Column.java | 27 +++++++ .../impl/codec/columns/IPv6ColumnReader.java | 7 +- .../alltypes/IPv6Test.java | 79 +++++++++++++++++++ 4 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 759eb253ee..623c449af8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -11,7 +11,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; - private List elements; + private List elements; protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); @@ -36,7 +36,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } elements.add(stringBytes); } - Object[] ret = elements.toArray(); + Object[] ret = elements.toArray(new byte[elements.size()][]); elements = null; return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 4396bd7a00..6beeba5fe0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -4,10 +4,33 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.net.Inet6Address; +import java.net.UnknownHostException; import java.util.List; public class IPv6Column extends FixedStringColumn { public static final int ELEMENT_SIZE = 16; + public static final Inet6Address ZERO_VALUE = ipv6(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + public static final Inet6Address MIN_VALUE = ipv6(new byte[]{ + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE + }); + public static final Inet6Address MAX_VALUE = ipv6(new byte[]{ + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE + }); + + private static Inet6Address ipv6(byte[] src) { + try { + return (Inet6Address) Inet6Address.getByAddress(src); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(descr, md); @@ -22,4 +45,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + public Object nullValue() { + return ZERO_VALUE; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index d69f82d267..debd41bae1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -15,7 +15,7 @@ protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet6Address.class || desired == null) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == String.class || desired == null) { byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); try { return Inet6Address.getByAddress(addr); @@ -25,4 +25,9 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return super.getElementInternal(rowIdx, desired); } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java new file mode 100644 index 0000000000..9e906096bc --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv6Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.net.Inet6Address; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class IPv6Test extends AllTypesBase { + public IPv6Test() { + super("ipv6", new MyColumnChecker<>(Inet6Address.class, null, null, null, null)); + } + + private static Inet6Address ipv6(int b1, int b2, int b3, int b4, int b5, int b6, int b7, int b8, + int b9, int b10, int b11, int b12, int b13, int b14, int b15, int b16) { + try { + return (Inet6Address) Inet6Address.getByAddress(new byte[]{ + (byte)b1, (byte)b2, (byte)b3, (byte)b4, + (byte)b5, (byte)b6, (byte)b7, (byte)b8, + (byte)b9, (byte)b10, (byte)b11, (byte)b12, + (byte)b13, (byte)b14, (byte)b15, (byte)b16 + }); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public List createBatch() { + Inet6Address v1 = ipv6(192, 168, 35, 255, 44, 42, 42, 55, 78, 90, -120, 22, 10, -67, -90, -43); + Inet6Address v2 = ipv6(14, 23, 21, 54, 76, 90, 12, 11, -43, -11, -55, 93, 43, 87, -32, -21); + Inet6Address v3 = ipv6(32, 11, 85, 0, 14, -12, -98, 120, 43, 32, -65, 2, 41, -9, 0, 11); + Inet6Address v4 = ipv6(11, 0, 0, 0, 14, -43, 2, 65, 32, 14, 87, 3, 11, -9, 97, 11); + Inet6Address v5 = ipv6(11, 98, 32, 65, 11, -46, 0, 31, 99, 104, 54, 11, 11, -65, 111, 14); + Inet6Address v6 = ipv6(10, 10, 22, 78, -43, -46, 2, 98, 99, 43, 11, 2, -11, -33, 0, 1); + Inet6Address nv = IPv6Column.ZERO_VALUE; + Inet6Address mn = IPv6Column.MIN_VALUE; + Inet6Address mx = IPv6Column.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, v1, null, nv, mx, v3}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, v2, null, v3, v2}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, v1, null, nv, mx, v3}, new Inet6Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, v2, null, v3, v2}, new Inet6Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Inet6Address[]{v1, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Inet6Address[]{v1, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v2, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Inet6Address[]{nv, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, null, v4}, new Inet6Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Inet6Address[]{nv, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, null, nv}, new Inet6Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Inet6Address[]{v4, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v4, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v2, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From 712b52bc23a7d093d10e4d791f9b4633909a2616 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 01:14:16 +0300 Subject: [PATCH 040/176] added Int16/32/64 tests Signed-off-by: vladimir --- .../impl/codec/columns/UInt64Column.java | 4 ++ .../alltypes/Int16Test.java | 62 +++++++++++++++++++ .../alltypes/Int32Test.java | 62 +++++++++++++++++++ .../alltypes/Int64Test.java | 62 +++++++++++++++++++ .../alltypes/Int8Test.java | 12 ++-- 5 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index af256bacda..d98bc133cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -19,4 +19,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt64ColumnWriter(data, descriptor, columnIndex); } + + public Object nullValue() { + return 0L; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java new file mode 100644 index 0000000000..8a53198a18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int16Test extends AllTypesBase { + public Int16Test() { + super("int16", new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts)); + } + + @Override + public List createBatch() { + Short v1 = 10; + Short v2 = Short.MIN_VALUE / 3; + Short v3 = Short.MAX_VALUE / 3; + Short v4 = Short.MIN_VALUE / 2; + Short v5 = Short.MAX_VALUE / 2; + Short v6 = -70; + Short nv = 0; + Short mn = Short.MIN_VALUE; + Short mx = Short.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, v4}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, nv}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java new file mode 100644 index 0000000000..0762242de2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int32Test extends AllTypesBase { + public Int32Test() { + super("int32", new MyColumnChecker<>(Integer.class, Tuple::getInteger, Row::getInteger, Tuple::getArrayOfIntegers, Row::getArrayOfIntegers)); + } + + @Override + public List createBatch() { + Integer v1 = 10; + Integer v2 = Integer.MIN_VALUE / 3; + Integer v3 = Integer.MAX_VALUE / 3; + Integer v4 = Integer.MIN_VALUE / 2; + Integer v5 = Integer.MAX_VALUE / 2; + Integer v6 = -70; + Integer nv = 0; + Integer mn = Integer.MIN_VALUE; + Integer mx = Integer.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, v4}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, nv}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java new file mode 100644 index 0000000000..360c60d135 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int64Test extends AllTypesBase { + public Int64Test() { + super("int64", new MyColumnChecker<>(Long.class, Tuple::getLong, Row::getLong, Tuple::getArrayOfLongs, Row::getArrayOfLongs)); + } + + @Override + public List createBatch() { + Long v1 = 10L; + Long v2 = Long.MIN_VALUE / 3; + Long v3 = Long.MAX_VALUE / 3; + Long v4 = Long.MIN_VALUE / 2; + Long v5 = Long.MAX_VALUE / 2; + Long v6 = -70L; + Long nv = 0L; + Long mn = Long.MIN_VALUE; + Long mx = Long.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, v4}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, nv}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 80023dd612..6ef1d16b5d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -16,14 +16,14 @@ public Int8Test() { @Override public List createBatch() { Byte v1 = 10; - Byte v2 = -20; - Byte v3 = 30; - Byte v4 = -40; - Byte v5 = 60; + Byte v2 = Byte.MIN_VALUE / 3; + Byte v3 = Byte.MAX_VALUE / 3; + Byte v4 = Byte.MIN_VALUE / 2; + Byte v5 = Byte.MAX_VALUE / 2; Byte v6 = -70; Byte nv = 0; - Byte mn = -128; - Byte mx = 127; + Byte mn = Byte.MIN_VALUE; + Byte mx = Byte.MAX_VALUE; return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t From e79de39ebed6741d416d530e886e47c1a874b907 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 14:26:02 +0300 Subject: [PATCH 041/176] fixed fragmented read issue Signed-off-by: vladimir --- .../codec/ClickhouseStreamDataSource.java | 7 ++-- .../codec/Lz4ClickhouseStreamDataSource.java | 32 ++++++------------- .../codec/RawClickhouseStreamDataSource.java | 4 +++ .../src/test/python/all_types_table.sql | 1 + .../src/test/python/gen_all_types_tables.py | 2 +- .../src/test/resources/init.sql | 3 +- 6 files changed, 22 insertions(+), 27 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index dfb768e1b6..8503205e12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -2,8 +2,12 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; public interface ClickhouseStreamDataSource { + Logger LOG = LoggerFactory.getLogger(ClickhouseStreamDataSource.class); + void moreData(ByteBuf buf, ByteBufAllocator ctx); int readableBytes(); void skipBytes(int length); @@ -19,6 +23,5 @@ public interface ClickhouseStreamDataSource { void readBytes(byte[] dst); byte readByte(); String hexdump(); - default void finish(){ - } + void finish(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index b5a8936d9c..f19fced1e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -3,7 +3,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,7 +24,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private Long sizeWithHeader; private Long compressedAndSizeSize; private Long uncompressedSize; - private Integer checkSummedReaderIndex; + private ByteBuf arrayBb; public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; @@ -38,13 +37,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { serverCityHash = new long[2]; dumpHeader(buf); - LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); serverCityHash[0] = buf.readLongLE(); serverCityHash[1] = buf.readLongLE(); - checkSummedReaderIndex = buf.readerIndex(); + int checkSummedReaderIndex = buf.readerIndex(); int compressionMethod = buf.readUnsignedByte(); if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { decompressedData.release(); @@ -63,6 +62,9 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { } LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + arrayBb = alloc.buffer(sizeWithHeader.intValue()); + buf.readerIndex(checkSummedReaderIndex); + buf.readBytes(arrayBb, 1 + 4 + 4); } } if (uncompressedSize == null) { @@ -71,11 +73,10 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) int compressedDataSize = compressedAndSizeSize.intValue() - 4; if (buf.readableBytes() < compressedDataSize) { + //NB: fragmented read return; } - //TODO: maybe skip allocation if buf.hasArray() == true - ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); - buf.readerIndex(checkSummedReaderIndex); + //TODO: maybe skip arrayBb allocation if buf.hasArray() == true and not fragmented read^^^^ buf.readBytes(arrayBb); long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size @@ -103,7 +104,6 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { sizeWithHeader = null; compressedAndSizeSize = null; uncompressedSize = null; - checkSummedReaderIndex = null; } private void dumpHeader(ByteBuf buf) { @@ -189,18 +189,4 @@ public String hexdump() { public void finish() { decompressedData.release(); } - - public static void main(String[] args) { - String bytesStr = "747572653a20412062756720776974682073656e696f726974792e3143d201f20273206d616b65207665727920666173742c0b00a06163637572617465206dba00f1106b65732e4f3c7363726970743e616c6572742822546869732073686f756c643a01f002626520646973706c6179656420696e2061fa015177736572203100f00220626f782e22293b3c2f7363726970743e01008ae197e847628104accc74807378ba29825c00000051000000f027010002ffffffff00020102696405496e7433320c000000076d65737361676506537472696e672ae38395e383ace383bce383a0e383af0900f00882afe381aee38399e383b3e38381e3839ee383bce382af060c02800c000001030cb4060c00000100a783ac6cd55c7a7cb5ac46bddb86e21482140000000a000000a0010002ffffffff0000000300000000000a00010002ffffffff0008020a6576656e745f74696d65084461746554696d65cf415f60cf415f60176576656e745f74696d655f6d6963726f7365636f6e64730655496e743332035706001657060009686f73745f6e616d6506537472696e670662686f7273650662686f7273650871756572795f696406537472696e672462643762643639332d383736652d343339382d386135302d3464393763353861343135352462643762643639332d383736652d343339382d386135302d346439376335386134313535097468726561645f69640655496e7436348d040000000000008d04000000000000087072696f7269747904496e7438060706736f7572636506537472696e670c6578656375746551756572790d4d656d6f7279547261636b6572047465787406537472696e674a5265616420313220726f77732c203832302e3030204220696e20302e303031343237373720736563"; - byte[] bytes = new byte[bytesStr.length() / 2]; - for (int i = 0; i < bytesStr.length(); i += 2) { - String s = bytesStr.substring(i, i + 2); - byte b = (byte)Integer.parseInt(s, 16); - bytes[i / 2] = b; - } - ByteBuf arrayBb = Unpooled.wrappedBuffer(bytes); - Long sizeWithHeader = 660L; - long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); - System.err.println(Arrays.toString(Utils.hex(oursCityHash))); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index e9cd54fdfc..78ea7b8133 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -80,6 +80,10 @@ public double readDoubleLE() { return source.readDoubleLE(); } + @Override + public void finish() { + } + @Override public String hexdump() { return source != null diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index a5e28cd04a..beedfaa555 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -1,4 +1,5 @@ set allow_suspicious_low_cardinality_types=true; +set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( id Int8, diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index fdfe03ba97..868832856c 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -12,7 +12,7 @@ 'Float32', 'Float64', 'IPv6', 'IPv4']; print('set allow_suspicious_low_cardinality_types=true;'); -print('set allow_experimental_bigint_types=true'); +print('set allow_experimental_bigint_types=true;'); for elem_spec in ELEMENTARY_TYPES: table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 1eb25dbd79..68b2ea09e4 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -136,8 +136,9 @@ VALUES (12, 'フレームワークのベンチマーク'); ---almost all possible supported types +--almost all possible supported types tables(maybe except experimental ones) set allow_suspicious_low_cardinality_types=true; +set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( id Int8, From 0a3839efe385b1b5d3ef0ba8861edfe58392fc0b Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 19:42:56 +0300 Subject: [PATCH 042/176] added DateTime64 test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 4 +- .../ClickhouseNativeDatabaseMetadata.java | 9 ++- .../impl/codec/DatabaseMetadataReader.java | 4 +- .../impl/codec/columns/ArrayColumn.java | 17 ++++- .../impl/codec/columns/ArrayColumnReader.java | 12 +--- .../impl/codec/columns/ArrayColumnWriter.java | 4 +- .../impl/codec/columns/ClickhouseColumns.java | 16 +++-- .../impl/codec/columns/DateTime64Column.java | 14 +++- .../codec/columns/DateTime64ColumnReader.java | 5 +- .../codec/columns/DateTime64ColumnWriter.java | 48 +++++++++++++ .../ArraySerDesTest.java | 2 +- .../ClickhouseResource.java | 6 +- .../alltypes/DateTime64Test.java | 67 +++++++++++++++++++ 13 files changed, 174 insertions(+), 34 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index a76fff7108..a36cc4146f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -39,7 +39,7 @@ public class ClickhouseConstants { public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; public static final String OPTION_MONTH_DURATION = "days_in_month"; public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; - + public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; @@ -48,5 +48,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index a2f5164f24..990d4f8001 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -23,11 +23,13 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration yearDuration; private final Duration quarterDuration; private final Duration monthDuration; + private final boolean saturateExtraNanos; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, - Duration yearDuration, Duration quarterDuration, Duration monthDuration) { + Duration yearDuration, Duration quarterDuration, Duration monthDuration, + boolean saturateExtraNanos) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -43,6 +45,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.yearDuration = yearDuration; this.quarterDuration = quarterDuration; this.monthDuration = monthDuration; + this.saturateExtraNanos = saturateExtraNanos; } @Override @@ -109,6 +112,10 @@ public Duration monthDuration() { return monthDuration; } + public boolean isSaturateExtraNanos() { + return saturateExtraNanos; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 849d4a038b..7845ded01c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -81,10 +81,12 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); ZoneId serverZoneId = serverZoneIdName == null ? null : ZoneId.of(serverZoneIdName); ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); + String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); + boolean saturateExtraNanos = "saturate".equals(extraNanos); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), - Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos); } private ZoneId getDefaultZoneId(ZoneId serverZoneId) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index ab901e26ce..4a4a3acf83 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -8,18 +8,29 @@ public class ArrayColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; + this.elementaryDescr = elementaryDescr(descriptor); } - @Override + private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override public ClickhouseColumnReader reader(int nRows) { - return new ArrayColumnReader(nRows, descriptor, md); + return new ArrayColumnReader(nRows, descriptor, elementaryDescr, md); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new ArrayColumnWriter(data, descriptor, md, columnIndex); + return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 29658b321c..345aaa891b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -30,18 +30,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; private List curLevelSlice; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementTypeDescr = elementaryDescr(descr); - } - - static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; + this.elementTypeDescr = elementTypeDescr; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 3bcde33a44..1cf50ea9fc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -16,10 +16,10 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md, int columnIndex) { super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; - this.elementTypeDescr = ArrayColumnReader.elementaryDescr(descriptor); + this.elementTypeDescr = elementTypeDescr; this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8c72b1f927..29553cafd9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -111,7 +111,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, @@ -198,19 +198,23 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64ColumnReader.ELEMENT_SIZE) { + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); precision = Integer.parseInt(modifiers[0].trim()); - zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1].trim()) - : md.getDefaultZoneId(); + if (modifiers.length == 2) { + String id = modifiers[1].trim(); + id = id.substring(1, id.length() - 1); + zoneId = ZoneId.of(id); + } else { + zoneId = md.getDefaultZoneId(); + } } else { zoneId = ZoneId.of(dateModifiers); } } else { zoneId = md.getDefaultZoneId(); } - return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, zoneId); + return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index cdc8c7dfc6..41e9e6aa34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -3,17 +3,22 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.time.Instant; import java.time.ZoneId; import java.util.List; public class DateTime64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + private final Integer precision; private final ZoneId zoneId; + private boolean saturateExtraNanos; - public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, ZoneId zoneId) { + public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { super(descriptor); this.precision = precision; this.zoneId = zoneId; + this.saturateExtraNanos = saturateExtraNanos; } @Override @@ -23,6 +28,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new DateTime64ColumnWriter(data, descriptor, precision, zoneId, saturateExtraNanos, columnIndex); + } + + @Override + public Object nullValue() { + return Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 8214d9086b..47c0668c04 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -9,7 +9,6 @@ import java.time.ZoneId; public class DateTime64ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 8; private final ZoneId zoneId; private final BigInteger invTickSize; @@ -22,7 +21,7 @@ public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= DateTime64Column.ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { @@ -32,7 +31,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(DateTime64Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java new file mode 100644 index 0000000000..fd0fa8887c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.List; + +public class DateTime64ColumnWriter extends ClickhouseColumnWriter { + private final BigInteger invTickSize; + private final long invTickLong; + private final ZoneId zoneId; + private final boolean saturateExtraNanos; + + public DateTime64ColumnWriter(List data, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { + super(data, descr, columnIndex); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + this.invTickLong = invTickSize.longValueExact(); + this.saturateExtraNanos = saturateExtraNanos; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + OffsetDateTime dt = (OffsetDateTime) val; + //TODO: maybe check zone offset + long tickCount = invTickSize.multiply(BigInteger.valueOf(dt.toEpochSecond())).longValue(); + long nanos = dt.getNano(); + if (nanos < invTickLong) { + tickCount += nanos; + } else { + if (saturateExtraNanos) { + tickCount += invTickLong - 1; + } else { + throw new IllegalArgumentException("nano adjustment " + nanos + " is too big, max " + invTickLong); + } + } + sink.writeLongLE(tickCount); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(DateTime64Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 114e849b0e..52341eaa8a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -36,7 +36,7 @@ public static Iterable dataForTest() { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 4f96443285..7d1a77d04f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -34,9 +34,9 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "java-driver") .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") - .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo"); - //.addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe%2FOslo"); - //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") + .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") + .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java new file mode 100644 index 0000000000..f22a1765aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -0,0 +1,67 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTime64Test extends AllTypesBase { + public DateTime64Test() { + super("datetime64", new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), false); + } + + @Override + public List createBatch() { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L, 300).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L, 400).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v3 = Instant.ofEpochSecond(1617120094L + 20L, 500).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v4 = Instant.ofEpochSecond(1617120094L - 10L, 600).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v5 = Instant.ofEpochSecond(1617120094L - 20L, 700).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v6 = Instant.ofEpochSecond(1617120094L - 200L, 800).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime nv = Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND, 999).atZone(zoneId).toOffsetDateTime(); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, v4}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From 4af33842ae55a6337c4f5906c9938a7ada231b8a Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 00:41:45 +0300 Subject: [PATCH 043/176] added Enum8Test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../impl/ClickhouseNativeRowImpl.java | 2 +- .../impl/codec/PacketReader.java | 20 +++--- .../impl/codec/QueryParsers.java | 11 ++- .../impl/codec/columns/ArrayColumnReader.java | 12 +++- .../impl/codec/columns/ClickhouseColumns.java | 7 +- .../impl/codec/columns/Enum16Column.java | 4 +- .../impl/codec/columns/Enum8Column.java | 10 +-- .../impl/codec/columns/Enum8ColumnReader.java | 38 +++++++++- .../impl/codec/columns/Enum8ColumnWriter.java | 59 ++++++++++++++++ .../columns/FixedStringColumnReader.java | 2 +- .../impl/codec/columns/IPv4ColumnReader.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../codec/columns/StringColumnReader.java | 2 +- .../impl/codec/columns/UInt8Column.java | 2 +- .../columns/ClickhouseColumnsTestReader.java | 6 +- .../alltypes/AllTypesBase.java | 10 ++- .../alltypes/Enum8Test.java | 70 +++++++++++++++++++ .../io/vertx/sqlclient/ColumnChecker.java | 5 +- 19 files changed, 230 insertions(+), 37 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index a36cc4146f..3e45a21c57 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -40,6 +40,7 @@ public class ClickhouseConstants { public static final String OPTION_MONTH_DURATION = "days_in_month"; public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; + public static final String OPTION_ENUM_RESOLUTION = "enum_resolution"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; @@ -48,5 +49,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 3a527c4ea1..6de8776d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -34,7 +34,7 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { - return getValue(columnIndex, String.class); + return getValue(columnIndex, Object.class); } private Object getValue(int columnIndex, Class desired) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 78f4805c51..5f211ff479 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -74,6 +74,7 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { + //TODO: find a way to expose profile block to the calling app return readProfileInfoBlock(in); } else if (packetType == ServerPacketType.LOG) { ColumnOrientedBlock block = readDataBlock(alloc, in, false); @@ -90,14 +91,17 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } private void traceServerLogs(ColumnOrientedBlock block) { - LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); - List rows = block.rows(); - LOG.info("rows: "); - StringBuilder bldr = new StringBuilder(); - for (ClickhouseNativeRowImpl row : rows) { - bldr.append(rowAsString(row, block.rowDesc())).append("\n"); - } - LOG.info(bldr); + //TODO: find a way to expose logs to the calling app + if (LOG.isDebugEnabled()) { + LOG.debug("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + List rows = block.rows(); + LOG.debug("rows: "); + StringBuilder bldr = new StringBuilder(); + for (ClickhouseNativeRowImpl row : rows) { + bldr.append(rowAsString(row, block.rowDesc())).append("\n"); + } + LOG.debug(bldr); + } } private String rowAsString(Row row, RowDesc rowDesc) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index b26882c97c..4e519176f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -132,6 +132,7 @@ public static Map parseEnumValues(String nativeType) { boolean gotEq = false; String enumElementName = null; int startEnumValPos = -1; + int signum = 1; for (int i = openBracketPos; i < nativeType.length(); ++i) { char ch = nativeType.charAt(i); if (ch == '\'') { @@ -144,21 +145,25 @@ public static Map parseEnumValues(String nativeType) { } else if (ch == '=') { gotEq = true; } else if (gotEq) { - if (Character.isDigit(ch)) { + if (ch == '-') { + signum = -1; + } if (Character.isDigit(ch)) { if (startEnumValPos == -1) { startEnumValPos = i; } else if (!Character.isDigit(nativeType.charAt(i + 1))) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)) * signum; Number key = byteOrShort(enumValue, isByte); result.put(key, enumElementName); + signum = 1; startEnumValPos = -1; enumElementName = null; gotEq = false; } } else if (startEnumValPos != -1) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)) * signum; Number key = byteOrShort(enumValue, isByte); result.put(key, enumElementName); + signum = 1; startEnumValPos = -1; enumElementName = null; gotEq = false; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 345aaa891b..39be308b6d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -125,8 +125,16 @@ private Class maybeUnwrapArrayElementType(Class desired) { } private Triplet> asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { - return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { + if (desired == String.class || desired == Object.class) { + return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + } + return new Triplet<>(false, src, desired); + } else if (nestedColumn.getClass() == Enum8Column.class) { + Object[] recoded = ((Enum8ColumnReader)nestedColumnReader).recodeValues(src, desired); + return new Triplet<>(true, recoded, desired); + } else if (nestedColumn.getClass() == Enum16Column.class) { + //((Enum16ColumnReader)nestedColumnReader).recodeValues(src, desired); } return new Triplet<>(false, src, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 29553cafd9..caa9cb09c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; @@ -238,10 +239,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new UUIDColumn(descr); } else if (nativeType.startsWith(ENUM_PREFIX)) { Map enumVals = QueryParsers.parseEnumValues(nativeType); + String enumResolutionStr = md.getProperties().getOrDefault(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name"); + boolean enumsByName = "by_name".equals(enumResolutionStr); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { - return new Enum8Column(descr, enumVals); + return new Enum8Column(descr, enumVals, enumsByName); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { - return new Enum16Column(descr, enumVals); + return new Enum16Column(descr, enumVals, enumsByName); } } else if (nativeType.startsWith(INTERVAL_PREFIX)) { Duration multiplier = getDurationMultiplier(descr, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index e52519cbae..ff0f48cc2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -8,10 +8,12 @@ public class Enum16Column extends ClickhouseColumn { private final Map enumVals; + private final boolean enumsByName; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { super(descriptor); this.enumVals = enumVals; + this.enumsByName = enumsByName; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index a54673c121..a2df9d88b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -6,21 +6,23 @@ import java.util.List; import java.util.Map; -public class Enum8Column extends ClickhouseColumn { +public class Enum8Column extends UInt8Column { private final Map enumVals; + private final boolean enumsByName; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { super(descriptor); this.enumVals = enumVals; + this.enumsByName = enumsByName; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum8ColumnReader(nRows, descriptor, enumVals); + return new Enum8ColumnReader(nRows, descriptor, enumVals, enumsByName); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Enum8ColumnWriter(data, descriptor, enumVals, columnIndex, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 44693da31b..f7ebf1f344 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -7,15 +7,47 @@ public class Enum8ColumnReader extends UInt8ColumnReader { public static final int ELEMENT_SIZE = 1; private final Map enumVals; + private final boolean enumsByName; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); this.enumVals = (Map) enumVals; + this.enumsByName = enumsByName; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { + protected Object getElementInternal(int rowIdx, Class desired) { Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + return recodeElement(key, desired); + } + + private Object recodeElement(Byte key, Class desired) { + if (Number.class.isAssignableFrom(desired)) { + return key; + } + String str = enumVals.get(key); + if (desired.isEnum()) { + if (enumsByName) { + return Enum.valueOf(desired, str); + } else { + return desired.getEnumConstants()[key]; + } + } + return str; + } + + Object[] recodeValues(Object[] src, Class desired) { + Byte[] bytes = (Byte[])src; + if (desired == Object.class) { + desired = String.class; + } + Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); + for (int idx = 0; idx < ret.length; ++idx) { + Byte el = bytes[idx]; + if (el != null) { + ret[idx] = recodeElement(el, desired); + } + } + return ret; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java new file mode 100644 index 0000000000..732e5b961d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -0,0 +1,59 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Enum8ColumnWriter extends UInt8ColumnWriter { + private final Map enumIndexToName; + private final Map enumNameToIndex; + private final boolean enumsByName; + + public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Map enumVals, + int columnIndex, boolean enumsByName) { + super(data, columnDescriptor, columnIndex); + this.enumIndexToName = enumVals; + this.enumNameToIndex = buildReverseIndex(enumVals); + this.enumsByName = enumsByName; + } + + private Map buildReverseIndex(Map enumVals) { + Map ret = new HashMap<>(); + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getValue(), entry.getKey()); + } + return ret; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number idx; + if (val.getClass() == String.class) { + idx = enumNameToIndex.get(val); + } else if (val.getClass().isEnum()) { + Enum enumVal = (Enum) val; + if (enumsByName) { + idx = enumNameToIndex.get(enumVal.name()); + } else { + Byte tmp = (byte) enumVal.ordinal(); + if (enumIndexToName.containsKey(tmp)) { + idx = tmp; + } else { + idx = null; + } + } + } else if (val instanceof Number) { + idx = (Number) val; + } else { + throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); + } + if (idx == null) { + throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToIndex.keySet()); + } + super.serializeDataElement(sink, idx); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 623c449af8..58908d1e18 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -44,7 +44,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { + if ((desired == String.class || desired == Object.class) && tmp != null) { return new String((byte[])tmp, charset); } return tmp; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 9cb58387f4..66e8b8e681 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -14,7 +14,7 @@ public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet4Address.class || desired == String.class || desired == null) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); try { return Inet4Address.getByAddress(intBytes(addr)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index debd41bae1..4afefc7d27 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -15,7 +15,7 @@ protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet6Address.class || desired == String.class || desired == null) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); try { return Inet6Address.getByAddress(addr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 61fd984492..cd87d42375 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -51,7 +51,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { + if ((desired == String.class || desired == Object.class) && tmp != null) { return new String((byte[])tmp, charset); } return tmp; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 8ec47c591e..aed243495e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -22,7 +22,7 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - if (descriptor.isUnsigned()) { + if (descriptor.isUnsigned()) { return (short) 0; } else { return (byte) 0; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 8704f656de..3d9725e0a9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -27,8 +27,8 @@ public static Iterable dataForTest() { java.util.function.Function byteConverter = Integer::byteValue; java.util.function.Function shortConverter = Integer::shortValue; return Arrays.asList(new Object[][]{ - {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", byteConverter}, - {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", shortConverter} + {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28,'neg1'=-1, 'neg2' = -22)", byteConverter}, + {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28,'neg1'=-1, 'neg2' = -22)", shortConverter} }); } @@ -47,6 +47,8 @@ public void testParseEnumVals() { expected.put(key(26), "1b3b5"); expected.put(key(27), "1b3b6"); expected.put(key(28), "1b3b7"); + expected.put(key(-1), "neg1"); + expected.put(key(-22), "neg2"); Assert.assertEquals(expected, vals); } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 3acfaa4aa6..a07b680d5d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -148,8 +148,8 @@ public void checkColumn(Row row, int index, String name, R expected) { //arrays are non-nullable if (expected != null && expected.getClass().isArray()) { boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding + if (componentType == byte[].class || componentType.isEnum()) { + //ask driver to turn off String encoding for BLOBs or force encoding for Enums checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); } else { checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); @@ -160,7 +160,11 @@ public void checkColumn(Row row, int index, String name, R expected) { } } else { //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); + Object v = expected; + if (componentType.isEnum()) { + v = expected == null ? null : (R) ((Enum)expected).name(); + } + checker = checker.returns(Tuple::getValue, Row::getValue, v); if (byIndexGetter != null) { checker = checker.returns(byIndexGetter, byNameGetter, expected); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java new file mode 100644 index 0000000000..6d0a68d6aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -0,0 +1,70 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Enum8Test extends AllTypesBase { + public Enum8Test() { + this(Test8Enum.class); + } + + private Enum8Test(Class cls) { + super("enum8", new MyColumnChecker<>(cls, + (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); + } + + @Override + public List createBatch() { + Test8Enum v1 = Test8Enum.v0; + Test8Enum v2 = Test8Enum.v1; + Test8Enum v3 = Test8Enum.v2; + Test8Enum v4 = Test8Enum.v3; + Test8Enum v5 = Test8Enum.v4; + Test8Enum v6 = Test8Enum.v5; + Test8Enum nv = Test8Enum.v0; + Test8Enum mn = Test8Enum.v3; + Test8Enum mx = Test8Enum.v6; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Test8Enum[]{v1, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Test8Enum[]{nv, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, null, v4}, new Test8Enum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Test8Enum[]{v4, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} + +enum Test8Enum { + v0, v1, v2, v3, v4, v5, v6 +} diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java index c96e354659..8ca7aa27a0 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java @@ -98,12 +98,13 @@ public ColumnChecker returns(SerializableBiFunction byInd blackList.add(byIndexMeth); Method byNameMeth = byNameGetter.method(); blackList.add(byNameMeth); + String nameIndex = name + "/" + index; expects.add(row -> { Object actual = byIndexGetter.apply(row, index); try { check.accept((R) actual); } catch (AssertionError cause) { - AssertionFailedError failure = new AssertionFailedError("Expected that " + byIndexMeth + " would not fail: " + cause.getMessage()); + AssertionFailedError failure = new AssertionFailedError("Expected that " + byIndexMeth + " would not fail for " + nameIndex + ": " + cause.getMessage()); failure.setStackTrace(failure.getStackTrace()); throw failure; } @@ -111,7 +112,7 @@ public ColumnChecker returns(SerializableBiFunction byInd try { check.accept((R) actual); } catch (AssertionError cause) { - AssertionFailedError failure = new AssertionFailedError("Expected that " + byNameMeth + " would not fail: " + cause.getMessage()); + AssertionFailedError failure = new AssertionFailedError("Expected that " + byNameMeth + " would not fail for " + nameIndex + ": " + cause.getMessage()); failure.setStackTrace(failure.getStackTrace()); throw failure; } From be34c67bab919f0c79d47a43b987ffbf2005100e Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 01:43:41 +0300 Subject: [PATCH 044/176] added Enum16Test Signed-off-by: vladimir --- .../codec/Lz4ClickhouseStreamDataSource.java | 12 +++- .../clickhousenative/impl/codec/Utils.java | 20 ------ .../impl/codec/columns/ArrayColumnReader.java | 6 +- .../impl/codec/columns/ColumnUtils.java | 12 ++++ .../codec/columns/Decimal128ColumnReader.java | 3 +- .../codec/columns/Decimal256ColumnReader.java | 3 +- .../impl/codec/columns/Enum16Column.java | 6 +- .../codec/columns/Enum16ColumnReader.java | 15 +++-- .../codec/columns/Enum16ColumnWriter.java | 24 +++++++ .../impl/codec/columns/Enum8Column.java | 2 +- .../impl/codec/columns/Enum8ColumnReader.java | 41 ++---------- .../impl/codec/columns/Enum8ColumnWriter.java | 45 ++----------- .../impl/codec/columns/EnumColumnDecoder.java | 43 +++++++++++++ .../impl/codec/columns/EnumColumnEncoder.java | 51 +++++++++++++++ .../impl/codec/columns/EnumColumnReader.java | 5 ++ .../codec/columns/Int128ColumnReader.java | 3 +- .../codec/columns/Int128ColumnWriter.java | 3 +- .../alltypes/Enum16Test.java | 12 ++++ .../alltypes/Enum8Test.java | 63 +----------------- .../alltypes/EnumTest.java | 64 +++++++++++++++++++ .../alltypes/TestEnum.java | 5 ++ 21 files changed, 260 insertions(+), 178 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index f19fced1e1..5bf1988c4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -89,8 +89,8 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + - Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + - Arrays.toString(Utils.hex(oursCityHash))); + Arrays.toString(hex(serverCityHash)) + "; ours: " + + Arrays.toString(hex(oursCityHash))); } byte[] uncompressedBytes = new byte[uncompressedSize.intValue()]; LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); @@ -189,4 +189,12 @@ public String hexdump() { public void finish() { decompressedData.release(); } + + private static String[] hex(long[] src) { + String[] result = new String[src.length]; + for (int i = 0; i < src.length; ++i) { + result[i] = "0x" + Long.toHexString(src[i]); + } + return result; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java deleted file mode 100644 index c1ddf363a3..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -public class Utils { - public static String[] hex(long[] src) { - String[] result = new String[src.length]; - for (int i = 0; i < src.length; ++i) { - result[i] = "0x" + Long.toHexString(src[i]); - } - return result; - } - - public static byte[] reverse(byte[] src) { - for (int i = 0, j = src.length - 1; i < j; ++i, --j) { - byte tmp = src[i]; - src[i] = src[j]; - src[j] = tmp; - } - return src; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 39be308b6d..0bea6ea2e8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -130,11 +130,9 @@ private Triplet> asDesiredType(Object[] src, Class(true, stringifyByteArrays(src, md.getStringCharset()), desired); } return new Triplet<>(false, src, desired); - } else if (nestedColumn.getClass() == Enum8Column.class) { - Object[] recoded = ((Enum8ColumnReader)nestedColumnReader).recodeValues(src, desired); + } else if (nestedColumnReader instanceof EnumColumnReader) { + Object[] recoded = ((EnumColumnReader)nestedColumnReader).recodeValues(src, desired); return new Triplet<>(true, recoded, desired); - } else if (nestedColumn.getClass() == Enum16Column.class) { - //((Enum16ColumnReader)nestedColumnReader).recodeValues(src, desired); } return new Triplet<>(false, src, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java new file mode 100644 index 0000000000..25cb3ce00e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -0,0 +1,12 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class ColumnUtils { + public static byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java index a5ab29014d..9952606891 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -29,7 +28,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java index e813a128c2..54edf0ab6d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -29,7 +28,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index ff0f48cc2e..8caa341db6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -public class Enum16Column extends ClickhouseColumn { +public class Enum16Column extends UInt16Column { private final Map enumVals; private final boolean enumsByName; @@ -18,11 +18,11 @@ public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 041070b7db..592595ba62 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -4,18 +4,23 @@ import java.util.Map; -public class Enum16ColumnReader extends UInt16ColumnReader { +public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 2; - private final Map enumVals; + private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); - this.enumVals = (Map) enumVals; + this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Short key = (Short) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + return columnRecoder.recodeElement(key, desired); + } + + @Override + public Object[] recodeValues(Object[] src, Class desired) { + return columnRecoder.recodeValues(src, desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java new file mode 100644 index 0000000000..cf99ad527d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; +import java.util.Map; + +public class Enum16ColumnWriter extends UInt16ColumnWriter { + private final EnumColumnEncoder columnEncoder; + + public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + Map enumVals, boolean enumsByName) { + super(data, columnDescriptor, columnIndex); + this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number idx = columnEncoder.encode(val); + super.serializeDataElement(sink, idx); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index a2df9d88b5..6fdac43c99 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -23,6 +23,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum8ColumnWriter(data, descriptor, enumVals, columnIndex, enumsByName); + return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index f7ebf1f344..e3276ecc36 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -4,50 +4,23 @@ import java.util.Map; -public class Enum8ColumnReader extends UInt8ColumnReader { +public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 1; - private final Map enumVals; - private final boolean enumsByName; + private final EnumColumnDecoder columnRecoder; public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); - this.enumVals = (Map) enumVals; - this.enumsByName = enumsByName; + this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return recodeElement(key, desired); + return columnRecoder.recodeElement(key, desired); } - private Object recodeElement(Byte key, Class desired) { - if (Number.class.isAssignableFrom(desired)) { - return key; - } - String str = enumVals.get(key); - if (desired.isEnum()) { - if (enumsByName) { - return Enum.valueOf(desired, str); - } else { - return desired.getEnumConstants()[key]; - } - } - return str; - } - - Object[] recodeValues(Object[] src, Class desired) { - Byte[] bytes = (Byte[])src; - if (desired == Object.class) { - desired = String.class; - } - Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); - for (int idx = 0; idx < ret.length; ++idx) { - Byte el = bytes[idx]; - if (el != null) { - ret[idx] = recodeElement(el, desired); - } - } - return ret; + @Override + public Object[] recodeValues(Object[] src, Class desired) { + return columnRecoder.recodeValues(src, desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 732e5b961d..b97e3cdd57 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -4,56 +4,21 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; -import java.util.HashMap; import java.util.List; import java.util.Map; public class Enum8ColumnWriter extends UInt8ColumnWriter { - private final Map enumIndexToName; - private final Map enumNameToIndex; - private final boolean enumsByName; + private final EnumColumnEncoder columnEncoder; - public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Map enumVals, - int columnIndex, boolean enumsByName) { + public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + Map enumVals, boolean enumsByName) { super(data, columnDescriptor, columnIndex); - this.enumIndexToName = enumVals; - this.enumNameToIndex = buildReverseIndex(enumVals); - this.enumsByName = enumsByName; - } - - private Map buildReverseIndex(Map enumVals) { - Map ret = new HashMap<>(); - for (Map.Entry entry : enumVals.entrySet()) { - ret.put(entry.getValue(), entry.getKey()); - } - return ret; + this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); } @Override protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number idx; - if (val.getClass() == String.class) { - idx = enumNameToIndex.get(val); - } else if (val.getClass().isEnum()) { - Enum enumVal = (Enum) val; - if (enumsByName) { - idx = enumNameToIndex.get(enumVal.name()); - } else { - Byte tmp = (byte) enumVal.ordinal(); - if (enumIndexToName.containsKey(tmp)) { - idx = tmp; - } else { - idx = null; - } - } - } else if (val instanceof Number) { - idx = (Number) val; - } else { - throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); - } - if (idx == null) { - throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToIndex.keySet()); - } + Number idx = columnEncoder.encode(val); super.serializeDataElement(sink, idx); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java new file mode 100644 index 0000000000..d0b043d01d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -0,0 +1,43 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.Map; + +class EnumColumnDecoder { + private final Map enumKeyToName; + private final boolean enumsByName; + + EnumColumnDecoder(Map enumVals, boolean enumsByName) { + this.enumKeyToName = enumVals; + this.enumsByName = enumsByName; + } + + public Object recodeElement(Number key, Class desired) { + if (Number.class.isAssignableFrom(desired)) { + return key; + } + String str = enumKeyToName.get(key); + if (desired.isEnum()) { + if (enumsByName) { + return Enum.valueOf(desired, str); + } else { + return desired.getEnumConstants()[key.intValue()]; + } + } + return str; + } + + Object[] recodeValues(Object[] src, Class desired) { + Number[] bytes = (Number[])src; + if (desired == Object.class) { + desired = String.class; + } + Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); + for (int idx = 0; idx < ret.length; ++idx) { + Number el = bytes[idx]; + if (el != null) { + ret[idx] = recodeElement(el, desired); + } + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java new file mode 100644 index 0000000000..bdadb815b0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -0,0 +1,51 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.HashMap; +import java.util.Map; + +public class EnumColumnEncoder { + private final Map enumKeyToName; + private final Map enumNameToKey; + private final boolean enumsByName; + + public EnumColumnEncoder(Map enumKeyToName, boolean enumsByName) { + this.enumKeyToName = enumKeyToName; + this.enumNameToKey = buildReverseIndex(enumKeyToName); + this.enumsByName = enumsByName; + } + + private Map buildReverseIndex(Map enumVals) { + Map ret = new HashMap<>(); + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getValue(), entry.getKey()); + } + return ret; + } + + public Number encode(Object val) { + Number idx; + if (val.getClass() == String.class) { + idx = enumNameToKey.get(val); + } else if (val.getClass().isEnum()) { + Enum enumVal = (Enum) val; + if (enumsByName) { + idx = enumNameToKey.get(enumVal.name()); + } else { + Byte tmp = (byte) enumVal.ordinal(); + if (enumKeyToName.containsKey(tmp)) { + idx = tmp; + } else { + idx = null; + } + } + } else if (val instanceof Number) { + idx = (Number) val; + } else { + throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); + } + if (idx == null) { + throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToKey.keySet()); + } + return idx; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java new file mode 100644 index 0000000000..990ea8e110 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -0,0 +1,5 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public interface EnumColumnReader { + Object[] recodeValues(Object[] src, Class desired); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index f1d24a7564..d8976952c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import java.math.BigInteger; @@ -20,7 +19,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigInteger(ColumnUtils.reverse(readBuffer)); } else { in.skipBytes(Int128Column.ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 5b80729691..34b1c10c7f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -16,7 +15,7 @@ public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor col @Override protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { BigInteger bi = (BigInteger) val; - byte[] bytes = Utils.reverse(bi.toByteArray()); + byte[] bytes = ColumnUtils.reverse(bi.toByteArray()); sink.writeBytes(bytes); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java new file mode 100644 index 0000000000..8a391480e8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -0,0 +1,12 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class Enum16Test extends EnumTest { + public Enum16Test() { + super("enum16"); + } +} + diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 6d0a68d6aa..3650819ffa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,70 +1,11 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; -import java.util.Arrays; -import java.util.List; - @RunWith(VertxUnitRunner.class) -public class Enum8Test extends AllTypesBase { +public class Enum8Test extends EnumTest { public Enum8Test() { - this(Test8Enum.class); - } - - private Enum8Test(Class cls) { - super("enum8", new MyColumnChecker<>(cls, - (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); - } - - @Override - public List createBatch() { - Test8Enum v1 = Test8Enum.v0; - Test8Enum v2 = Test8Enum.v1; - Test8Enum v3 = Test8Enum.v2; - Test8Enum v4 = Test8Enum.v3; - Test8Enum v5 = Test8Enum.v4; - Test8Enum v6 = Test8Enum.v5; - Test8Enum nv = Test8Enum.v0; - Test8Enum mn = Test8Enum.v3; - Test8Enum mx = Test8Enum.v6; - - return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t - Tuple.of((byte)1, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)2, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)3, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)4, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)5, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)6, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), - Tuple.of((byte)7, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)8, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)9, mx, mx, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)10, mn, mn, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)11, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)12, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)13, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), - Tuple.of((byte)14, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), - Tuple.of((byte)15, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), - Tuple.of((byte)16, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), - Tuple.of((byte)17, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)18, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)19, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)20, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)21, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)22, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)23, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)24, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)25, v1, v1, new Test8Enum[]{v1, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)26, nv, nv, new Test8Enum[]{nv, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, null, v4}, new Test8Enum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)27, v6, v5, new Test8Enum[]{v4, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)28, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)29, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) - ); + super("enum8"); } } - -enum Test8Enum { - v0, v1, v2, v3, v4, v5, v6 -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java new file mode 100644 index 0000000000..cc16708ba8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -0,0 +1,64 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; + +public abstract class EnumTest extends AllTypesBase { + public EnumTest(String tableSuffix) { + this(tableSuffix, TestEnum.class); + } + + private EnumTest(String tableSuffix, Class cls) { + super(tableSuffix, new MyColumnChecker<>(cls, + (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); + } + + @Override + public List createBatch() { + TestEnum v1 = TestEnum.v0; + TestEnum v2 = TestEnum.v1; + TestEnum v3 = TestEnum.v2; + TestEnum v4 = TestEnum.v3; + TestEnum v5 = TestEnum.v4; + TestEnum v6 = TestEnum.v5; + TestEnum nv = TestEnum.v0; + TestEnum mn = TestEnum.v3; + TestEnum mx = TestEnum.v6; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mn}, new TestEnum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mn}, new TestEnum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, null, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, null, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new TestEnum[]{mn, mx}, new TestEnum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mx}, new TestEnum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new TestEnum[]{mn, mx}, new TestEnum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mx}, new TestEnum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{}, new TestEnum[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{}, new TestEnum[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{null}, new TestEnum[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{null}, new TestEnum[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new TestEnum[]{v3, v1, nv, mx, v4}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, v1, null, nv, mx, v3}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new TestEnum[]{v3, v1, nv, mx, v4}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, v1, null, nv, mx, v3}, new TestEnum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new TestEnum[]{v1, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, nv, null}, new TestEnum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new TestEnum[]{nv, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, null, v4}, new TestEnum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new TestEnum[]{v4, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, nv, null}, new TestEnum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new TestEnum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} + diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java new file mode 100644 index 0000000000..c20c8fad4f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -0,0 +1,5 @@ +package io.vertx.clickhousenativeclient.alltypes; + +enum TestEnum { + v0, v1, v2, v3, v4, v5, v6 +} From 429e4de1ef8720df4e4bc4db482dc2ed1d194644 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 02:11:04 +0300 Subject: [PATCH 045/176] added Interval array tests Signed-off-by: vladimir --- .../impl/codec/columns/Float32Column.java | 5 +++ .../impl/codec/columns/IntervalColumn.java | 5 +++ .../SpecialTypesTest.java | 37 ++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 9a82e2779f..6cbd90a337 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -19,4 +19,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Float32ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return (float) 0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 96d6a319aa..a579d07699 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -24,4 +24,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); throw new IllegalStateException("not implemented"); } + + @Override + public Object nullValue() { + return multiplier.multipliedBy(0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 6fa32dba80..c7b72070dd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -13,6 +13,7 @@ import org.junit.runner.RunWith; import java.time.Duration; +import java.util.Arrays; import java.util.Optional; @RunWith(VertxUnitRunner.class) @@ -59,27 +60,57 @@ public void testIntervalWeek(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); } + @Test + public void testIntervalWeekArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalWeek(4), toIntervalWeek(1), toIntervalWeek(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 7), Duration.ofDays(7), Duration.ofDays(0)})); + } + @Test //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" public void testIntervalDay(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); } + @Test + public void testIntervalDayArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalDay(4), toIntervalDay(1), toIntervalDay(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4), Duration.ofDays(1), Duration.ofDays(0)})); + } + @Test public void testIntervalHour(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 HOUR", Duration.class, Optional.of(Duration.ofHours(4))); } + @Test + public void testIntervalHourArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalHour(4), toIntervalHour(1), toIntervalHour(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofHours(4), Duration.ofHours(1), Duration.ofHours(0)})); + } + @Test public void testIntervalMinute(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 MINUTE", Duration.class, Optional.of(Duration.ofMinutes(4))); } + @Test + public void testIntervalMinuteArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalMinute(4), toIntervalMinute(1), toIntervalMinute(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofMinutes(4), Duration.ofMinutes(1), Duration.ofMinutes(0)})); + } + @Test public void testIntervalSecond(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 SECOND", Duration.class, Optional.of(Duration.ofSeconds(4))); } + @Test + public void testIntervalSecondArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalSecond(4), toIntervalSecond(1), toIntervalSecond(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofSeconds(4), Duration.ofSeconds(1), Duration.ofSeconds(0)})); + } + private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( @@ -88,7 +119,11 @@ private void runQuery(TestContext ctx, String query, Class desiredCls, Option if (expected != null && expected.isPresent()) { Row row = res.iterator().next(); Object val = desiredCls == null ? row.getValue(0) : row.get(desiredCls, 0); - ctx.assertEquals(expected.get(), val); + if (desiredCls.isArray()) { + ctx.assertTrue(Arrays.deepEquals((Object[])expected.get(), (Object[])val)); + } else { + ctx.assertEquals(expected.get(), val); + } } })); })); From 07e3f94ee3618e91dbca094c57f3c4841a6c6600 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 13:50:10 +0300 Subject: [PATCH 046/176] added enum_resolution option Signed-off-by: vladimir --- .../impl/codec/QueryParsers.java | 11 +---- .../impl/codec/columns/ClickhouseColumns.java | 8 ++-- .../impl/codec/columns/Enum16Column.java | 10 ++--- .../codec/columns/Enum16ColumnReader.java | 4 +- .../codec/columns/Enum16ColumnWriter.java | 4 +- .../impl/codec/columns/Enum8Column.java | 10 ++--- .../impl/codec/columns/Enum8ColumnReader.java | 4 +- .../impl/codec/columns/Enum8ColumnWriter.java | 4 +- .../impl/codec/columns/EnumColumnDecoder.java | 25 ++++++++--- .../impl/codec/columns/EnumColumnEncoder.java | 44 ++++++++++++------- .../codec/columns/EnumResolutionMethod.java | 26 +++++++++++ .../impl/codec/columns/IntervalColumn.java | 1 - .../ClickhouseResource.java | 1 + 13 files changed, 98 insertions(+), 54 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 4e519176f6..2405619bd2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,14 +3,7 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.AbstractMap; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; //TODO: maybe switch to antlr4 or JavaCC + .jj file (see ClickHouseSqlParser.jj in regular ClickHouse jdbc driver) public class QueryParsers { @@ -127,7 +120,7 @@ public static Map.Entry findKeyWord(String sql, int startPos, C public static Map parseEnumValues(String nativeType) { final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); int lastQuotePos = -1; boolean gotEq = false; String enumElementName = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index caa9cb09c5..8b0b1fd923 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -239,12 +239,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new UUIDColumn(descr); } else if (nativeType.startsWith(ENUM_PREFIX)) { Map enumVals = QueryParsers.parseEnumValues(nativeType); - String enumResolutionStr = md.getProperties().getOrDefault(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name"); - boolean enumsByName = "by_name".equals(enumResolutionStr); + String enumResolutionStr = md.getProperties().get(ClickhouseConstants.OPTION_ENUM_RESOLUTION); + EnumResolutionMethod resolutionMethod = enumResolutionStr == null ? EnumResolutionMethod.ORDINAL : EnumResolutionMethod.forOpt(enumResolutionStr); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { - return new Enum8Column(descr, enumVals, enumsByName); + return new Enum8Column(descr, enumVals, resolutionMethod); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { - return new Enum16Column(descr, enumVals, enumsByName); + return new Enum16Column(descr, enumVals, resolutionMethod); } } else if (nativeType.startsWith(INTERVAL_PREFIX)) { Duration multiplier = getDurationMultiplier(descr, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 8caa341db6..5ebd0f1758 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -8,21 +8,21 @@ public class Enum16Column extends UInt16Column { private final Map enumVals; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum16ColumnReader(nRows, descriptor, enumVals, enumsByName); + return new Enum16ColumnReader(nRows, descriptor, enumVals, resolutionMethod); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); + return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, resolutionMethod); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 592595ba62..977d2d893d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -8,9 +8,9 @@ public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumn public static final int ELEMENT_SIZE = 2; private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); - this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); + this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index cf99ad527d..99237088ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -11,9 +11,9 @@ public class Enum16ColumnWriter extends UInt16ColumnWriter { private final EnumColumnEncoder columnEncoder; public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, - Map enumVals, boolean enumsByName) { + Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); - this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 6fdac43c99..7a4f17f3f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -8,21 +8,21 @@ public class Enum8Column extends UInt8Column { private final Map enumVals; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum8ColumnReader(nRows, descriptor, enumVals, enumsByName); + return new Enum8ColumnReader(nRows, descriptor, enumVals, resolutionMethod); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); + return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, resolutionMethod); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index e3276ecc36..4ee4313ad7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -8,9 +8,9 @@ public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnRe public static final int ELEMENT_SIZE = 1; private final EnumColumnDecoder columnRecoder; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); - this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); + this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index b97e3cdd57..6ab08e9dfa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -11,9 +11,9 @@ public class Enum8ColumnWriter extends UInt8ColumnWriter { private final EnumColumnEncoder columnEncoder; public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, - Map enumVals, boolean enumsByName) { + Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); - this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index d0b043d01d..22eeb055a6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,14 +1,27 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import java.util.HashMap; import java.util.Map; class EnumColumnDecoder { private final Map enumKeyToName; - private final boolean enumsByName; + private final Map enumKeyToOrdinal; + private final EnumResolutionMethod resolutionMethod; - EnumColumnDecoder(Map enumVals, boolean enumsByName) { + EnumColumnDecoder(Map enumVals, EnumResolutionMethod resolutionMethod) { this.enumKeyToName = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; + this.enumKeyToOrdinal = resolutionMethod == EnumResolutionMethod.ORDINAL ? buildEnumKeyToOrdinal(enumVals) : null; + } + + static Map buildEnumKeyToOrdinal(Map enumVals) { + Map ret = new HashMap<>(); + int idx = 0; + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getKey(), idx); + ++idx; + } + return ret; } public Object recodeElement(Number key, Class desired) { @@ -17,10 +30,12 @@ public Object recodeElement(Number key, Class desired) { } String str = enumKeyToName.get(key); if (desired.isEnum()) { - if (enumsByName) { + if (resolutionMethod == EnumResolutionMethod.NAME) { return Enum.valueOf(desired, str); - } else { + } else if (resolutionMethod == EnumResolutionMethod.KEY) { return desired.getEnumConstants()[key.intValue()]; + } else { + return desired.getEnumConstants()[enumKeyToOrdinal.get(key)]; } } return str; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index bdadb815b0..960c221cc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -4,14 +4,24 @@ import java.util.Map; public class EnumColumnEncoder { - private final Map enumKeyToName; + private final Number[] enumOrdinalToKey; private final Map enumNameToKey; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public EnumColumnEncoder(Map enumKeyToName, boolean enumsByName) { - this.enumKeyToName = enumKeyToName; - this.enumNameToKey = buildReverseIndex(enumKeyToName); - this.enumsByName = enumsByName; + public EnumColumnEncoder(Map enumKeyToName, EnumResolutionMethod resolutionMethod) { + this.resolutionMethod = resolutionMethod; + this.enumNameToKey = resolutionMethod == EnumResolutionMethod.NAME ? buildReverseIndex(enumKeyToName) : null; + this.enumOrdinalToKey = resolutionMethod == EnumResolutionMethod.NAME ? null : enumOrdinalToKey(enumKeyToName); + } + + private Number[] enumOrdinalToKey(Map enumVals) { + Number[] ret = new Number[enumVals.size()]; + int idx = 0; + for (Map.Entry entry:enumVals.entrySet()) { + ret[idx] = entry.getKey(); + ++idx; + } + return ret; } private Map buildReverseIndex(Map enumVals) { @@ -23,29 +33,29 @@ private Map buildReverseIndex(Map enumV } public Number encode(Object val) { - Number idx; + Number key; if (val.getClass() == String.class) { - idx = enumNameToKey.get(val); + key = enumNameToKey.get(val); } else if (val.getClass().isEnum()) { Enum enumVal = (Enum) val; - if (enumsByName) { - idx = enumNameToKey.get(enumVal.name()); + if (resolutionMethod == EnumResolutionMethod.NAME) { + key = enumNameToKey.get(enumVal.name()); } else { - Byte tmp = (byte) enumVal.ordinal(); - if (enumKeyToName.containsKey(tmp)) { - idx = tmp; + int ordinal = enumVal.ordinal(); + if (ordinal < enumOrdinalToKey.length) { + key = enumOrdinalToKey[ordinal]; } else { - idx = null; + throw new IllegalArgumentException("ordinal " + ordinal + " for enum val " + enumVal + " is too big, max " + (enumOrdinalToKey.length - 1)); } } } else if (val instanceof Number) { - idx = (Number) val; + key = (Number) val; } else { throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); } - if (idx == null) { + if (key == null) { throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToKey.keySet()); } - return idx; + return key; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java new file mode 100644 index 0000000000..05b3518454 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +public enum EnumResolutionMethod { + NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key"); + private static final Map index = Arrays + .stream(EnumResolutionMethod.values()) + .collect(Collectors.toMap(el -> el.optVal, el -> el)); + + String optVal; + + EnumResolutionMethod(String optVal) { + this.optVal = optVal; + } + + public static EnumResolutionMethod forOpt(String optVal) { + EnumResolutionMethod ret = index.get(optVal); + if (ret == null) { + throw new IllegalArgumentException("unknown option value " + optVal); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index a579d07699..e8c7c68727 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -21,7 +21,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); throw new IllegalStateException("not implemented"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 7d1a77d04f..551639f2a4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -36,6 +36,7 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") + .addProperty(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name") .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } From ad2c556fba641552679166f18438a0875824c180 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 07:55:20 +0300 Subject: [PATCH 047/176] added FixedString test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../ClickhouseNativeConnectionUriParser.java | 3 +- .../ClickhouseNativeDatabaseMetadata.java | 8 ++- .../impl/codec/DatabaseMetadataReader.java | 3 +- .../impl/codec/columns/ArrayColumnReader.java | 9 ++- .../impl/codec/columns/ColumnUtils.java | 7 +++ .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 5 ++ .../columns/FixedStringColumnReader.java | 6 +- .../ArraySerDesTest.java | 2 +- .../ClickhouseResource.java | 1 + .../alltypes/FixedStringTest.java | 62 +++++++++++++++++++ 12 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 3e45a21c57..6c86a1e806 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -42,6 +42,7 @@ public class ClickhouseConstants { public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; public static final String OPTION_ENUM_RESOLUTION = "enum_resolution"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final String OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS = "remove_trailing_zeros_when_encode_fixed_strings"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; public static final short COMPRESSION_METHOD_ZSTD = 0x90; @@ -49,5 +50,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION, OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 272438c081..7acfb6b429 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,6 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.json.JsonObject; import java.net.URI; @@ -18,7 +17,7 @@ public static JsonObject parse(String connectionUri) { URI location = URI.create(connectionUri); String userInfo = location.getUserInfo(); String user = userInfo; - String password = null; + String password = ""; if (userInfo.contains(":")) { String[] tokens = userInfo.split(":"); user = tokens[0]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 990d4f8001..c2c5b0230e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -24,12 +24,13 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration quarterDuration; private final Duration monthDuration; private final boolean saturateExtraNanos; + private final boolean removeTrailingZerosInFixedStrings; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, Duration yearDuration, Duration quarterDuration, Duration monthDuration, - boolean saturateExtraNanos) { + boolean saturateExtraNanos, boolean removeTrailingZerosInFixedStrings) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -46,6 +47,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.quarterDuration = quarterDuration; this.monthDuration = monthDuration; this.saturateExtraNanos = saturateExtraNanos; + this.removeTrailingZerosInFixedStrings = removeTrailingZerosInFixedStrings; } @Override @@ -116,6 +118,10 @@ public boolean isSaturateExtraNanos() { return saturateExtraNanos; } + public boolean isRemoveTrailingZerosInFixedStrings() { + return removeTrailingZerosInFixedStrings; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 7845ded01c..f334acb6e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -83,10 +83,11 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); boolean saturateExtraNanos = "saturate".equals(extraNanos); + boolean removeTrailingZerosInFixedStringsStr = Boolean.parseBoolean(properties.getOrDefault(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true")); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), - Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos); + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos, removeTrailingZerosInFixedStringsStr); } private ZoneId getDefaultZoneId(ZoneId serverZoneId) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 0bea6ea2e8..9930fed124 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -142,7 +142,14 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { for (int i = 0; i < src.length; ++i) { Object element = src[i]; if (element != null) { - ret[i] = new String((byte[]) element, charset); + int lastNonZeroIdx; + byte[] bytes = (byte[]) element; + if (md.isRemoveTrailingZerosInFixedStrings() && elementTypeDescr.getNestedType().startsWith("FixedString")) { + lastNonZeroIdx = ColumnUtils.getLastNonZeroPos(bytes); + } else { + lastNonZeroIdx = bytes.length - 1; + } + ret[i] = new String(bytes, 0, lastNonZeroIdx + 1, charset); } } return ret; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 25cb3ce00e..8b58317ad6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -9,4 +9,11 @@ public static byte[] reverse(byte[] src) { } return src; } + + public static int getLastNonZeroPos(byte[] bytes) { + int lastNonZeroPos = bytes.length - 1; + for (; lastNonZeroPos >= 0 && bytes[lastNonZeroPos] == 0; --lastNonZeroPos) { + } + return lastNonZeroPos; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index 05b3518454..fd76395e3f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; public enum EnumResolutionMethod { - NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key"); + NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key_as_ordinal"); private static final Map index = Arrays .stream(EnumResolutionMethod.values()) .collect(Collectors.toMap(el -> el.optVal, el -> el)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 8ee3af4386..c16f947f12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -23,4 +23,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new FixedStringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + @Override + public Object nullValue() { + return StringColumn.EMPTY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 58908d1e18..3028bd79d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -10,6 +10,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; + private final boolean removeTrailingZerosInStrings; private List elements; @@ -17,6 +18,7 @@ protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor co super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); + this.removeTrailingZerosInStrings = md.isRemoveTrailingZerosInFixedStrings(); } @Override @@ -45,7 +47,9 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - return new String((byte[])tmp, charset); + byte[] bytes = (byte[]) tmp; + int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(bytes) : bytes.length - 1; + return new String(bytes, 0, lastNonZeroIdx + 1, charset); } return tmp; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 52341eaa8a..f3d9a220ae 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -36,7 +36,7 @@ public static Iterable dataForTest() { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true); + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 551639f2a4..33d6fae551 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -37,6 +37,7 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") .addProperty(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name") + .addProperty(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true") .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java new file mode 100644 index 0000000000..685d2bb744 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class FixedStringTest extends AllTypesBase { + public FixedStringTest() { + super("fixedstring", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); + } + + @Override + public List createBatch() { + String v1 = "val1"; + String v2 = "val2"; + String v3 = "val3"; + String v4 = "val4"; + String v5 = "value5"; + String v6 = "v6"; + String nv = ""; + String mn = ""; + String mx = "123456789123"; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, v4}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, nv}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From c421debd6a29a372f7eefa9c58fe5516bce6ebc8 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 09:14:25 +0300 Subject: [PATCH 048/176] added UInt16/32/64 test Signed-off-by: vladimir --- .../impl/codec/columns/UInt64Column.java | 7 ++ .../codec/columns/UInt64ColumnReader.java | 3 +- .../alltypes/UInt16Test.java | 62 +++++++++++++++++ .../alltypes/UInt32Test.java | 62 +++++++++++++++++ .../alltypes/UInt64Test.java | 69 +++++++++++++++++++ .../alltypes/UInt8Test.java | 4 +- 6 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index d98bc133cb..ec2728757f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -2,10 +2,14 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigInteger; import java.util.List; public class UInt64Column extends ClickhouseColumn { + public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); + public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -21,6 +25,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { } public Object nullValue() { + if (descriptor.isUnsigned()) { + return UINT64_MIN; + } return 0L; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 4d1e641b03..caf229cf07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; @@ -32,7 +33,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { - return unsignedBi(element); + return Numeric.create(unsignedBi(element)); } return element; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java new file mode 100644 index 0000000000..1d8f4b13ba --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt16Test extends AllTypesBase { + public UInt16Test() { + super("uint16", new MyColumnChecker<>(Integer.class, Tuple::getInteger, Row::getInteger, Tuple::getArrayOfIntegers, Row::getArrayOfIntegers)); + } + + @Override + public List createBatch() { + Integer mx = 65535; + Integer v1 = 10; + Integer v2 = mx / 6; + Integer v3 = mx / 5; + Integer v4 = mx / 4; + Integer v5 = mx / 3; + Integer v6 = mx / 2; + Integer nv = 0; + Integer mn = 0; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, v4}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, nv}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java new file mode 100644 index 0000000000..0d713e4c54 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt32Test extends AllTypesBase { + public UInt32Test() { + super("uint32", new MyColumnChecker<>(Long.class, Tuple::getLong, Row::getLong, Tuple::getArrayOfLongs, Row::getArrayOfLongs)); + } + + @Override + public List createBatch() { + Long mx = 4294967295L; + Long v1 = 10L; + Long v2 = mx / 6; + Long v3 = mx / 5; + Long v4 = mx / 4; + Long v5 = mx / 3; + Long v6 = mx / 2; + Long nv = 0L; + Long mn = 0L; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, v4}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, nv}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java new file mode 100644 index 0000000000..0b843ad06f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -0,0 +1,69 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt64Test extends AllTypesBase { + public UInt64Test() { + super("uint64", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics)); + } + + private BigInteger bi(int src) { + return BigInteger.valueOf(src); + } + + @Override + public List createBatch() { + BigInteger mxBi = new BigInteger("18446744073709551615"); + Numeric mx = Numeric.create(mxBi); + Numeric v1 = Numeric.create(BigInteger.TEN); + Numeric v2 = Numeric.create(mxBi.divide( bi(6))); + Numeric v3 = Numeric.create(mxBi.divide(bi(5))); + Numeric v4 = Numeric.create(mxBi.divide(bi(4))); + Numeric v5 = Numeric.create(mxBi.divide(bi(3))); + Numeric v6 = Numeric.create(mxBi.divide(bi(2))); + Numeric nv = Numeric.create(BigInteger.ZERO); + Numeric mn = Numeric.create(BigInteger.ZERO); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, v2, null, v3, v2}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, v2, null, v3, v2}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v2, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, nv}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v2, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 8046242ede..3dfb212907 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -42,8 +42,8 @@ public List createBatch() { Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), - Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), - Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), From f68a1784b43823c72a75066a7d5b331834b5ddb1 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 17:03:32 +0300 Subject: [PATCH 049/176] added Decimal32/64 and Float32 tests Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 22 +- .../impl/codec/columns/Decimal128Column.java | 8 +- .../impl/codec/columns/Decimal256Column.java | 9 +- .../codec/columns/Decimal256ColumnReader.java | 41 -- .../impl/codec/columns/Decimal32Column.java | 21 +- .../codec/columns/Decimal32ColumnReader.java | 14 +- .../codec/columns/Decimal32ColumnWriter.java | 36 ++ .../impl/codec/columns/Decimal64Column.java | 22 +- .../codec/columns/Decimal64ColumnReader.java | 14 +- .../codec/columns/Decimal64ColumnWriter.java | 35 ++ .../impl/codec/columns/Float32Column.java | 2 +- .../codec/columns/Float32ColumnReader.java | 5 + ...r.java => GenericDecimalColumnReader.java} | 19 +- .../alltypes/AllTypesBase.java | 1 - .../alltypes/Decimal32Test.java | 82 +++ .../alltypes/Decimal64Test.java | 81 +++ .../alltypes/Float32Test.java | 62 ++ .../alltypes/Float64Test.java | 8 +- .../alltypes/UInt64Test.java | 2 +- .../src/test/python/all_types_table.sql | 84 +-- .../src/test/python/gen_all_types_tables.py | 7 +- .../src/test/resources/init.sql | 586 +++++++++--------- 22 files changed, 707 insertions(+), 454 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{Decimal128ColumnReader.java => GenericDecimalColumnReader.java} (60%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8b0b1fd923..b7c22f5751 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -155,14 +155,14 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } private static int decimalSize(int precision) { - if (precision <= Decimal32ColumnReader.MAX_PRECISION) { - return Decimal32ColumnReader.ELEMENT_SIZE; - } else if (precision <= Decimal64ColumnReader.MAX_PRECISION) { - return Decimal64ColumnReader.ELEMENT_SIZE; - } else if (precision <= Decimal128ColumnReader.MAX_PRECISION) { - return Decimal128ColumnReader.ELEMENT_SIZE; + if (precision <= Decimal32Column.MAX_PRECISION) { + return Decimal32Column.ELEMENT_SIZE; + } else if (precision <= Decimal64Column.MAX_PRECISION) { + return Decimal64Column.ELEMENT_SIZE; + } else if (precision <= Decimal128Column.MAX_PRECISION) { + return Decimal128Column.ELEMENT_SIZE; } else { - return Decimal256ColumnReader.ELEMENT_SIZE; + return Decimal256Column.ELEMENT_SIZE; } } @@ -218,13 +218,13 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { return new Decimal32Column(descr); - } else if (descr.getElementSize() == Decimal64ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { return new Decimal64Column(descr); - } else if (descr.getElementSize() == Decimal128ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { return new Decimal128Column(descr); - } else if (descr.getElementSize() == Decimal256ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(descr); } } else if (jdbcType == JDBCType.REAL) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 7d4b29df8e..b5bc8ba857 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -3,16 +3,22 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal128ColumnReader(nRows, descriptor); + return new GenericDecimalColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 2c60ee025a..b2c435974c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -3,16 +3,23 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; +//Looks like support is experimental at the moment public class Decimal256Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal256ColumnReader(nRows, descriptor); + return new GenericDecimalColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java deleted file mode 100644 index 54edf0ab6d..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; - -//Looks like support is experimental at the moment -public class Decimal256ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 32; - public static final int MAX_PRECISION = 76; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - - protected Decimal256ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 08661ed7c8..091b2d9412 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -2,21 +2,38 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public final static MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + public final Numeric zeroValue; + public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal32ColumnReader(nRows, descriptor); + return new Decimal32ColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Decimal32ColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 9a9b0307cd..5ff0bd43cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -7,28 +7,26 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; public class Decimal32ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 4; - public static final int MAX_PRECISION = 9; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final MathContext mc; - protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mc) { super(nRows, columnDescriptor); + this.mc = mc; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Decimal32Column.ELEMENT_SIZE * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { int item = in.readIntLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Decimal32Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java new file mode 100644 index 0000000000..4989be1f61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class Decimal32ColumnWriter extends ClickhouseColumnWriter { + public Decimal32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + //TODO: rework loss of precision checks across all DecimalXX columns + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + BigInteger bi = bd.unscaledValue(); + sink.writeIntLE(bi.intValueExact()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Decimal32Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 6c5d66038d..e727b66ba2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -2,21 +2,39 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + + public final Numeric zeroValue; + public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal64ColumnReader(nRows, descriptor); + return new Decimal64ColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Decimal64ColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 841fd543e2..839e8e63c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -7,28 +7,26 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; public class Decimal64ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 8; - public static final int MAX_PRECISION = 18; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final MathContext mc; - protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); + this.mc = mathContext; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Decimal64Column.ELEMENT_SIZE * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { long item = in.readLongLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Decimal64Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java new file mode 100644 index 0000000000..bbf1c99d61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class Decimal64ColumnWriter extends ClickhouseColumnWriter { + public Decimal64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + BigInteger bi = bd.unscaledValue(); + sink.writeLongLE(bi.longValueExact()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Decimal64Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 6cbd90a337..df9e957637 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -22,6 +22,6 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return (float) 0; + return 0.0f; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index 41afde279e..a691364c1e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -25,4 +25,9 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java similarity index 60% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 9952606891..784d8c257d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -7,31 +7,30 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; //TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 -public class Decimal128ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; - public static final int MAX_PRECISION = 38; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); +public class GenericDecimalColumnReader extends ClickhouseColumnReader { + private final MathContext mc; - protected Decimal128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected GenericDecimalColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); + this.mc = mathContext; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int elementSize = columnDescriptor.getElementSize(); + if (in.readableBytes() >= elementSize * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; + byte[] readBuffer = new byte[elementSize]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(bi, scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(elementSize); } } return data; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index a07b680d5d..a040cbf6aa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -82,7 +82,6 @@ protected void doTest(TestContext ctx, List batch) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java new file mode 100644 index 0000000000..950e549c29 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -0,0 +1,82 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Decimal32Test extends AllTypesBase { + public static final int SCALE = 4; + + public static final MathContext MATH_CONTEXT = new MathContext(Decimal32Column.MAX_PRECISION, RoundingMode.HALF_EVEN); + + public Decimal32Test() { + super("decimal32", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + } + + private Numeric nm(Integer src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, MATH_CONTEXT); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + int mni = Integer.MAX_VALUE / 3; + int mxi = Integer.MIN_VALUE / 3; + + Numeric v1 = nm(mxi / 3); + Numeric v2 = nm(mni / 3); + Numeric v3 = nm(mxi / 4); + Numeric v4 = nm(mni / 4); + Numeric v5 = nm(mxi / 5); + Numeric v6 = nm(mni / 5); + Numeric nv = nm(0); + + Numeric mn = nm(mni); + Numeric mx = nm(mxi); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java new file mode 100644 index 0000000000..90a942a18f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -0,0 +1,81 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Decimal64Test extends AllTypesBase { + public static final int SCALE = 4; + + public static final MathContext MATH_CONTEXT = new MathContext(Decimal64Column.MAX_PRECISION, RoundingMode.HALF_EVEN); + + public Decimal64Test() { + super("decimal64", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + } + + private Numeric nm(Long src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, MATH_CONTEXT); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + long mnl = Long.MIN_VALUE / 10; + long mxl = Long.MAX_VALUE / 10; + + Numeric v1 = nm(mxl / 3); + Numeric v2 = nm(mnl / 4); + Numeric v3 = nm(mxl / 5); + Numeric v4 = nm(mnl / 6); + Numeric v5 = nm(mxl / 7); + Numeric v6 = nm(mnl / 7); + Numeric nv = nm(0L); + Numeric mn = nm(mnl); + Numeric mx = nm(mxl); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java new file mode 100644 index 0000000000..ff13539fda --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Float32Test extends AllTypesBase { + public Float32Test() { + super("float32", new MyColumnChecker<>(Float.class, Tuple::getFloat, Row::getFloat, Tuple::getArrayOfFloats, Row::getArrayOfFloats)); + } + + @Override + public List createBatch() { + Float v1 = Float.MAX_VALUE / 2; + Float v2 = Float.MIN_VALUE / 2; + Float v3 = Float.MAX_VALUE / 3; + Float v4 = Float.NaN; + Float v5 = Float.NEGATIVE_INFINITY; + Float v6 = Float.POSITIVE_INFINITY; + Float nv = 0.0f; + Float mn = Float.MIN_VALUE; + Float mx = Float.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, mx}, new Float[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, v1, null, nv, mx, v3}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, v2, null, v3, v2}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, v1, null, nv, mx, v3}, new Float[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, v2, null, v3, v2}, new Float[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Float[]{v1, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Float[]{v1, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v2, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Float[]{nv, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, null, v4}, new Float[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Float[]{nv, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, null, nv}, new Float[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Float[]{v4, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v4, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v2, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 4a2897df00..a3a930efd3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -18,10 +18,10 @@ public Float64Test() { public List createBatch() { Double v1 = Double.MAX_VALUE / 2; Double v2 = Double.MIN_VALUE / 2; - Double v3 = 30.0; - Double v4 = -40.0; - Double v5 = 60.0; - Double v6 = -70.0; + Double v3 = Double.MAX_VALUE / 3; + Double v4 = Double.NaN; + Double v5 = Double.NEGATIVE_INFINITY; + Double v6 = Double.POSITIVE_INFINITY; Double nv = 0.0; Double mn = Double.MIN_VALUE; Double mx = Double.MAX_VALUE; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 0b843ad06f..9c1da11c66 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -34,7 +34,7 @@ public List createBatch() { Numeric mn = Numeric.create(BigInteger.ZERO); return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index beedfaa555..ac5b7550bf 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -15,8 +15,7 @@ CREATE TABLE vertx_test_int8 ( array3_lc_t Array(Array(Array(LowCardinality(Int8)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint8; CREATE TABLE vertx_test_uint8 ( id Int8, @@ -32,8 +31,7 @@ CREATE TABLE vertx_test_uint8 ( array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int16; CREATE TABLE vertx_test_int16 ( id Int8, @@ -49,8 +47,7 @@ CREATE TABLE vertx_test_int16 ( array3_lc_t Array(Array(Array(LowCardinality(Int16)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint16; CREATE TABLE vertx_test_uint16 ( id Int8, @@ -66,8 +63,7 @@ CREATE TABLE vertx_test_uint16 ( array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int32; CREATE TABLE vertx_test_int32 ( id Int8, @@ -83,8 +79,7 @@ CREATE TABLE vertx_test_int32 ( array3_lc_t Array(Array(Array(LowCardinality(Int32)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint32; CREATE TABLE vertx_test_uint32 ( id Int8, @@ -100,8 +95,7 @@ CREATE TABLE vertx_test_uint32 ( array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int64; CREATE TABLE vertx_test_int64 ( id Int8, @@ -117,8 +111,7 @@ CREATE TABLE vertx_test_int64 ( array3_lc_t Array(Array(Array(LowCardinality(Int64)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint64; CREATE TABLE vertx_test_uint64 ( id Int8, @@ -134,8 +127,7 @@ CREATE TABLE vertx_test_uint64 ( array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int128; CREATE TABLE vertx_test_int128 ( id Int8, @@ -151,8 +143,7 @@ CREATE TABLE vertx_test_int128 ( array3_lc_t Array(Array(Array(LowCardinality(Int128)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( id Int8, @@ -168,8 +159,7 @@ CREATE TABLE vertx_test_string ( array3_lc_t Array(Array(Array(LowCardinality(String)))), nullable_array_lc_t Array(LowCardinality(Nullable(String))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_fixedstring; CREATE TABLE vertx_test_fixedstring ( id Int8, @@ -185,8 +175,7 @@ CREATE TABLE vertx_test_fixedstring ( array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime; CREATE TABLE vertx_test_datetime ( id Int8, @@ -202,19 +191,17 @@ CREATE TABLE vertx_test_datetime ( array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime64; CREATE TABLE vertx_test_datetime64 ( id Int8, - simple_t DateTime64, - nullable_t Nullable(DateTime64), - array_t Array(DateTime64), - array3_t Array(Array(Array(DateTime64))), - nullable_array_t Array(Nullable(DateTime64)), - nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) -) engine = MergeTree() - ORDER BY (id); + simple_t DateTime64(3), + nullable_t Nullable(DateTime64(3)), + array_t Array(DateTime64(3)), + array3_t Array(Array(Array(DateTime64(3)))), + nullable_array_t Array(Nullable(DateTime64(3))), + nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_date; CREATE TABLE vertx_test_date ( id Int8, @@ -230,8 +217,7 @@ CREATE TABLE vertx_test_date ( array3_lc_t Array(Array(Array(LowCardinality(Date)))), nullable_array_lc_t Array(LowCardinality(Nullable(Date))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uuid; CREATE TABLE vertx_test_uuid ( id Int8, @@ -241,8 +227,7 @@ CREATE TABLE vertx_test_uuid ( array3_t Array(Array(Array(UUID))), nullable_array_t Array(Nullable(UUID)), nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal32; CREATE TABLE vertx_test_decimal32 ( id Int8, @@ -252,8 +237,7 @@ CREATE TABLE vertx_test_decimal32 ( array3_t Array(Array(Array(Decimal32(4)))), nullable_array_t Array(Nullable(Decimal32(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal64; CREATE TABLE vertx_test_decimal64 ( id Int8, @@ -263,8 +247,7 @@ CREATE TABLE vertx_test_decimal64 ( array3_t Array(Array(Array(Decimal64(4)))), nullable_array_t Array(Nullable(Decimal64(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal128; CREATE TABLE vertx_test_decimal128 ( id Int8, @@ -274,8 +257,7 @@ CREATE TABLE vertx_test_decimal128 ( array3_t Array(Array(Array(Decimal128(4)))), nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, @@ -285,8 +267,7 @@ CREATE TABLE vertx_test_enum8 ( array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum16; CREATE TABLE vertx_test_enum16 ( id Int8, @@ -296,8 +277,7 @@ CREATE TABLE vertx_test_enum16 ( array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float32; CREATE TABLE vertx_test_float32 ( id Int8, @@ -313,8 +293,7 @@ CREATE TABLE vertx_test_float32 ( array3_lc_t Array(Array(Array(LowCardinality(Float32)))), nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float64; CREATE TABLE vertx_test_float64 ( id Int8, @@ -330,8 +309,7 @@ CREATE TABLE vertx_test_float64 ( array3_lc_t Array(Array(Array(LowCardinality(Float64)))), nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv6; CREATE TABLE vertx_test_ipv6 ( id Int8, @@ -347,8 +325,7 @@ CREATE TABLE vertx_test_ipv6 ( array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv4; CREATE TABLE vertx_test_ipv4 ( id Int8, @@ -364,5 +341,4 @@ CREATE TABLE vertx_test_ipv4 ( array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index 868832856c..6010fbc4eb 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -2,7 +2,7 @@ ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', {'table': 'FixedString', 'type': 'FixedString(12)'}, - 'DateTime', 'DateTime64', 'Date', 'UUID', + 'DateTime', {'table': 'datetime64', 'type': 'DateTime64(3)'}, 'Date', 'UUID', {'table': 'Decimal32', 'type': 'Decimal32(4)'}, {'table': 'Decimal64', 'type': 'Decimal64(4)'}, {'table': 'Decimal128', 'type': 'Decimal128(4)'}, @@ -21,7 +21,7 @@ print('DROP TABLE IF EXISTS {0};'.format(table_name)); print('CREATE TABLE {0} ('.format(table_name)); columns = ['id Int8']; - low_cardinality = type_name != 'UUID' and type_name != 'DateTime64' \ + low_cardinality = type_name != 'UUID' and not type_name.startswith('DateTime64') \ and not type_name.startswith('Decimal32(') and not type_name.startswith('Decimal64(') \ and not type_name.startswith('Decimal128(') \ and not type_name.startswith('Decimal256(') \ @@ -41,5 +41,4 @@ columns.append('nullable_array_lc_t Array(LowCardinality(Nullable({0})))'.format(type_name)); columns.append('nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable({0})))))'.format(type_name)); print(' ', ',\n '.join(columns)); - print(') engine = MergeTree()'); - print(" ORDER BY (id);"); + print(') engine = Memory();'); diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 68b2ea09e4..c87bbcdf67 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -141,140 +141,132 @@ set allow_suspicious_low_cardinality_types=true; set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( - id Int8, - simple_t Int8, - nullable_t Nullable(Int8), - array_t Array(Int8), - array3_t Array(Array(Array(Int8))), - nullable_array_t Array(Nullable(Int8)), - nullable_array3_t Array(Array(Array(Nullable(Int8)))), - simple_lc_t LowCardinality(Int8), - nullable_lc_t LowCardinality(Nullable(Int8)), - array_lc_t Array(LowCardinality(Int8)), - array3_lc_t Array(Array(Array(LowCardinality(Int8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint8; CREATE TABLE vertx_test_uint8 ( - id Int8, - simple_t UInt8, - nullable_t Nullable(UInt8), - array_t Array(UInt8), - array3_t Array(Array(Array(UInt8))), - nullable_array_t Array(Nullable(UInt8)), - nullable_array3_t Array(Array(Array(Nullable(UInt8)))), - simple_lc_t LowCardinality(UInt8), - nullable_lc_t LowCardinality(Nullable(UInt8)), - array_lc_t Array(LowCardinality(UInt8)), - array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int16; CREATE TABLE vertx_test_int16 ( - id Int8, - simple_t Int16, - nullable_t Nullable(Int16), - array_t Array(Int16), - array3_t Array(Array(Array(Int16))), - nullable_array_t Array(Nullable(Int16)), - nullable_array3_t Array(Array(Array(Nullable(Int16)))), - simple_lc_t LowCardinality(Int16), - nullable_lc_t LowCardinality(Nullable(Int16)), - array_lc_t Array(LowCardinality(Int16)), - array3_lc_t Array(Array(Array(LowCardinality(Int16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint16; CREATE TABLE vertx_test_uint16 ( - id Int8, - simple_t UInt16, - nullable_t Nullable(UInt16), - array_t Array(UInt16), - array3_t Array(Array(Array(UInt16))), - nullable_array_t Array(Nullable(UInt16)), - nullable_array3_t Array(Array(Array(Nullable(UInt16)))), - simple_lc_t LowCardinality(UInt16), - nullable_lc_t LowCardinality(Nullable(UInt16)), - array_lc_t Array(LowCardinality(UInt16)), - array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int32; CREATE TABLE vertx_test_int32 ( - id Int8, - simple_t Int32, - nullable_t Nullable(Int32), - array_t Array(Int32), - array3_t Array(Array(Array(Int32))), - nullable_array_t Array(Nullable(Int32)), - nullable_array3_t Array(Array(Array(Nullable(Int32)))), - simple_lc_t LowCardinality(Int32), - nullable_lc_t LowCardinality(Nullable(Int32)), - array_lc_t Array(LowCardinality(Int32)), - array3_lc_t Array(Array(Array(LowCardinality(Int32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint32; CREATE TABLE vertx_test_uint32 ( - id Int8, - simple_t UInt32, - nullable_t Nullable(UInt32), - array_t Array(UInt32), - array3_t Array(Array(Array(UInt32))), - nullable_array_t Array(Nullable(UInt32)), - nullable_array3_t Array(Array(Array(Nullable(UInt32)))), - simple_lc_t LowCardinality(UInt32), - nullable_lc_t LowCardinality(Nullable(UInt32)), - array_lc_t Array(LowCardinality(UInt32)), - array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int64; CREATE TABLE vertx_test_int64 ( - id Int8, - simple_t Int64, - nullable_t Nullable(Int64), - array_t Array(Int64), - array3_t Array(Array(Array(Int64))), - nullable_array_t Array(Nullable(Int64)), - nullable_array3_t Array(Array(Array(Nullable(Int64)))), - simple_lc_t LowCardinality(Int64), - nullable_lc_t LowCardinality(Nullable(Int64)), - array_lc_t Array(LowCardinality(Int64)), - array3_lc_t Array(Array(Array(LowCardinality(Int64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint64; CREATE TABLE vertx_test_uint64 ( - id Int8, - simple_t UInt64, - nullable_t Nullable(UInt64), - array_t Array(UInt64), - array3_t Array(Array(Array(UInt64))), - nullable_array_t Array(Nullable(UInt64)), - nullable_array3_t Array(Array(Array(Nullable(UInt64)))), - simple_lc_t LowCardinality(UInt64), - nullable_lc_t LowCardinality(Nullable(UInt64)), - array_lc_t Array(LowCardinality(UInt64)), - array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int128; CREATE TABLE vertx_test_int128 ( id Int8, @@ -290,218 +282,202 @@ CREATE TABLE vertx_test_int128 ( array3_lc_t Array(Array(Array(LowCardinality(Int128)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( - id Int8, - simple_t String, - nullable_t Nullable(String), - array_t Array(String), - array3_t Array(Array(Array(String))), - nullable_array_t Array(Nullable(String)), - nullable_array3_t Array(Array(Array(Nullable(String)))), - simple_lc_t LowCardinality(String), - nullable_lc_t LowCardinality(Nullable(String)), - array_lc_t Array(LowCardinality(String)), - array3_lc_t Array(Array(Array(LowCardinality(String)))), - nullable_array_lc_t Array(LowCardinality(Nullable(String))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_fixedstring; CREATE TABLE vertx_test_fixedstring ( - id Int8, - simple_t FixedString(12), - nullable_t Nullable(FixedString(12)), - array_t Array(FixedString(12)), - array3_t Array(Array(Array(FixedString(12)))), - nullable_array_t Array(Nullable(FixedString(12))), - nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), - simple_lc_t LowCardinality(FixedString(12)), - nullable_lc_t LowCardinality(Nullable(FixedString(12))), - array_lc_t Array(LowCardinality(FixedString(12))), - array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), - nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime; CREATE TABLE vertx_test_datetime ( - id Int8, - simple_t DateTime, - nullable_t Nullable(DateTime), - array_t Array(DateTime), - array3_t Array(Array(Array(DateTime))), - nullable_array_t Array(Nullable(DateTime)), - nullable_array3_t Array(Array(Array(Nullable(DateTime)))), - simple_lc_t LowCardinality(DateTime), - nullable_lc_t LowCardinality(Nullable(DateTime)), - array_lc_t Array(LowCardinality(DateTime)), - array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), - nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime64; CREATE TABLE vertx_test_datetime64 ( - id Int8, - simple_t DateTime64, - nullable_t Nullable(DateTime64), - array_t Array(DateTime64), - array3_t Array(Array(Array(DateTime64))), - nullable_array_t Array(Nullable(DateTime64)), - nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t DateTime64(3), + nullable_t Nullable(DateTime64(3)), + array_t Array(DateTime64(3)), + array3_t Array(Array(Array(DateTime64(3)))), + nullable_array_t Array(Nullable(DateTime64(3))), + nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_date; CREATE TABLE vertx_test_date ( - id Int8, - simple_t Date, - nullable_t Nullable(Date), - array_t Array(Date), - array3_t Array(Array(Array(Date))), - nullable_array_t Array(Nullable(Date)), - nullable_array3_t Array(Array(Array(Nullable(Date)))), - simple_lc_t LowCardinality(Date), - nullable_lc_t LowCardinality(Nullable(Date)), - array_lc_t Array(LowCardinality(Date)), - array3_lc_t Array(Array(Array(LowCardinality(Date)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Date))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uuid; CREATE TABLE vertx_test_uuid ( - id Int8, - simple_t UUID, - nullable_t Nullable(UUID), - array_t Array(UUID), - array3_t Array(Array(Array(UUID))), - nullable_array_t Array(Nullable(UUID)), - nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal32; CREATE TABLE vertx_test_decimal32 ( - id Int8, - simple_t Decimal32(4), - nullable_t Nullable(Decimal32(4)), - array_t Array(Decimal32(4)), - array3_t Array(Array(Array(Decimal32(4)))), - nullable_array_t Array(Nullable(Decimal32(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal64; CREATE TABLE vertx_test_decimal64 ( - id Int8, - simple_t Decimal64(4), - nullable_t Nullable(Decimal64(4)), - array_t Array(Decimal64(4)), - array3_t Array(Array(Array(Decimal64(4)))), - nullable_array_t Array(Nullable(Decimal64(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal128; CREATE TABLE vertx_test_decimal128 ( - id Int8, - simple_t Decimal128(4), - nullable_t Nullable(Decimal128(4)), - array_t Array(Decimal128(4)), - array3_t Array(Array(Array(Decimal128(4)))), - nullable_array_t Array(Nullable(Decimal128(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( - id Int8, - simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), - nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), - nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), - nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum16; CREATE TABLE vertx_test_enum16 ( - id Int8, - simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), - nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), - nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), - nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float32; CREATE TABLE vertx_test_float32 ( - id Int8, - simple_t Float32, - nullable_t Nullable(Float32), - array_t Array(Float32), - array3_t Array(Array(Array(Float32))), - nullable_array_t Array(Nullable(Float32)), - nullable_array3_t Array(Array(Array(Nullable(Float32)))), - simple_lc_t LowCardinality(Float32), - nullable_lc_t LowCardinality(Nullable(Float32)), - array_lc_t Array(LowCardinality(Float32)), - array3_lc_t Array(Array(Array(LowCardinality(Float32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float64; CREATE TABLE vertx_test_float64 ( - id Int8, - simple_t Float64, - nullable_t Nullable(Float64), - array_t Array(Float64), - array3_t Array(Array(Array(Float64))), - nullable_array_t Array(Nullable(Float64)), - nullable_array3_t Array(Array(Array(Nullable(Float64)))), - simple_lc_t LowCardinality(Float64), - nullable_lc_t LowCardinality(Nullable(Float64)), - array_lc_t Array(LowCardinality(Float64)), - array3_lc_t Array(Array(Array(LowCardinality(Float64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv6; CREATE TABLE vertx_test_ipv6 ( - id Int8, - simple_t IPv6, - nullable_t Nullable(IPv6), - array_t Array(IPv6), - array3_t Array(Array(Array(IPv6))), - nullable_array_t Array(Nullable(IPv6)), - nullable_array3_t Array(Array(Array(Nullable(IPv6)))), - simple_lc_t LowCardinality(IPv6), - nullable_lc_t LowCardinality(Nullable(IPv6)), - array_lc_t Array(LowCardinality(IPv6)), - array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv4; CREATE TABLE vertx_test_ipv4 ( - id Int8, - simple_t IPv4, - nullable_t Nullable(IPv4), - array_t Array(IPv4), - array3_t Array(Array(Array(IPv4))), - nullable_array_t Array(Nullable(IPv4)), - nullable_array3_t Array(Array(Array(Nullable(IPv4)))), - simple_lc_t LowCardinality(IPv4), - nullable_lc_t LowCardinality(Nullable(IPv4)), - array_lc_t Array(LowCardinality(IPv4)), - array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = Memory(); From 108a9655471ec042f7142983b3cdd2b697b42932 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 22:25:12 +0300 Subject: [PATCH 050/176] added Decimal128/256 tests Signed-off-by: vladimir --- .../impl/codec/ClickhouseStreamDataSink.java | 1 + .../codec/Lz4ClickhouseStreamDataSink.java | 5 ++ .../codec/RawClickhouseStreamDataSink.java | 5 ++ .../impl/codec/columns/ArrayColumn.java | 5 ++ .../impl/codec/columns/ClickhouseColumn.java | 4 +- .../impl/codec/columns/ColumnUtils.java | 14 ++++ .../impl/codec/columns/Decimal128Column.java | 12 ++- .../impl/codec/columns/Decimal256Column.java | 12 ++- .../impl/codec/columns/Decimal32Column.java | 2 +- .../codec/columns/Decimal32ColumnWriter.java | 5 +- .../impl/codec/columns/Decimal64Column.java | 4 +- .../codec/columns/Decimal64ColumnWriter.java | 4 +- .../columns/GenericDecimalColumnWriter.java | 75 +++++++++++++++++ .../alltypes/Decimal128Test.java | 15 ++++ .../alltypes/Decimal256Test.java | 15 ++++ .../alltypes/HugeDecimalTest.java | 80 +++++++++++++++++++ .../src/test/python/all_types_table.sql | 10 +++ .../src/test/python/gen_all_types_tables.py | 2 +- .../src/test/resources/init.sql | 10 +++ 19 files changed, 263 insertions(+), 17 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index b7276845de..762fa4724a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -9,6 +9,7 @@ public interface ClickhouseStreamDataSink { void writeFloatLE(float value); void writeDoubleLE(double value); void writeBytes(byte[] value); + void writeBytes(byte[] value, int index, int length); void writeBoolean(boolean value); void writeZero(int length); void writePascalString(String value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 187a2f1af8..b700d4dd44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -67,6 +67,11 @@ public void writeBytes(byte[] value) { tmpStorage.writeBytes(value); } + @Override + public void writeBytes(byte[] value, int index, int length) { + tmpStorage.writeBytes(value, index, length); + } + @Override public void writeBoolean(boolean value) { tmpStorage.writeBoolean(value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index c8e224bace..93297777ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -49,6 +49,11 @@ public void writeBytes(byte[] value) { sink.writeBytes(value); } + @Override + public void writeBytes(byte[] value, int index, int length) { + sink.writeBytes(value, index, length); + } + @Override public void writeBoolean(boolean value) { sink.writeBoolean(value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 4a4a3acf83..a63f3047c6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -33,4 +33,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); } + + @Override + public Object nullValue() { + throw new IllegalArgumentException("arrays are not nullable"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index b40a949c40..55089b7591 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -16,7 +16,5 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); - public Object nullValue() { - throw new IllegalStateException("not implemented for " + this.getClass()); - } + public abstract Object nullValue(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 8b58317ad6..7f092af502 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,5 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigDecimal; + public class ColumnUtils { public static byte[] reverse(byte[] src) { for (int i = 0, j = src.length - 1; i < j; ++i, --j) { @@ -16,4 +20,14 @@ public static int getLastNonZeroPos(byte[] bytes) { } return lastNonZeroPos; } + + //TODO: rework checks + public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + if (columnDescriptor.getPrecision() < bd.precision()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getPrecision() + ", got " + bd.precision()); + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index b5bc8ba857..266af50f42 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -2,7 +2,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; import java.math.MathContext; import java.math.RoundingMode; import java.util.List; @@ -11,9 +14,11 @@ public class Decimal128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final Numeric zeroValue; public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override @@ -23,6 +28,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new GenericDecimalColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index b2c435974c..9f01dac6aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -2,7 +2,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; import java.math.MathContext; import java.math.RoundingMode; import java.util.List; @@ -13,8 +16,11 @@ public class Decimal256Column extends ClickhouseColumn { public static final int MAX_PRECISION = 76; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final Numeric zeroValue; + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override @@ -24,6 +30,10 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new GenericDecimalColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 091b2d9412..bf8a91b863 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -15,7 +15,7 @@ public class Decimal32Column extends ClickhouseColumn { public static final int MAX_PRECISION = 9; public final static MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - public final Numeric zeroValue; + private final Numeric zeroValue; public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index 4989be1f61..4136f7beec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -21,10 +21,7 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { serializeDataNull(sink); return; } - //TODO: rework loss of precision checks across all DecimalXX columns - if (columnDescriptor.getScale() < bd.scale()) { - throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); - } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); BigInteger bi = bd.unscaledValue(); sink.writeIntLE(bi.intValueExact()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index e727b66ba2..53f57bc9c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -14,9 +14,7 @@ public class Decimal64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; public static final int MAX_PRECISION = 18; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - - - public final Numeric zeroValue; + private final Numeric zeroValue; public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index bbf1c99d61..e2c7aa71a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -21,9 +21,7 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { serializeDataNull(sink); return; } - if (columnDescriptor.getScale() < bd.scale()) { - throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); - } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); BigInteger bi = bd.unscaledValue(); sink.writeLongLE(bi.longValueExact()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java new file mode 100644 index 0000000000..f95def64cd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -0,0 +1,75 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class GenericDecimalColumnWriter extends ClickhouseColumnWriter { + private final BigInteger negAddon; + + public GenericDecimalColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, int columnIndex) { + super(data, descriptor, columnIndex); + this.negAddon = BigInteger.ONE.shiftLeft(columnDescriptor.getElementSize() * 8); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); + BigInteger bi = bd.unscaledValue(); + boolean negative = bi.signum() == -1; + if (negative) { + bi = bi.add(negAddon); + } + byte[] bytes = ColumnUtils.reverse(bi.toByteArray()); + sink.writeBytes(bytes, 0, negative ? bytes.length - 1 : bytes.length); + int extraZeros = negative ? 0 : columnDescriptor.getElementSize() - bytes.length; + sink.writeZero(extraZeros); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(columnDescriptor.getElementSize()); + } + + private static void traceBytes(byte[] bytes) { + for (byte b : bytes) { + System.err.print(Integer.toHexString(Byte.toUnsignedInt(b))); + System.err.print(","); + } + System.err.println(); + } + + public static BigInteger parseBigIntegerPositive(String num, int bitlen) { + BigInteger b = new BigInteger(num); + if (b.compareTo(BigInteger.ZERO) < 0) + b = b.add(BigInteger.ONE.shiftLeft(bitlen)); + return b; + } + + public static void main(String[] args) { + BigInteger bi = parseBigIntegerPositive("-2", 16); + System.err.println(bi); + System.err.println("bytes1:"); + traceBytes(bi.toByteArray()); + System.err.println("bytes2:"); + traceBytes(BigInteger.valueOf(65534).toByteArray()); + + BigInteger bi2 = parseBigIntegerPositive("-1", 16); + System.err.println("bytes3_1"); + traceBytes(bi2.toByteArray()); + + bi2 = parseBigIntegerPositive("-1", 15); + System.err.println("bytes3_2"); + traceBytes(bi2.toByteArray()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java new file mode 100644 index 0000000000..1aad85076a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -0,0 +1,15 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +import java.math.MathContext; +import java.math.RoundingMode; + +@RunWith(VertxUnitRunner.class) +public class Decimal128Test extends HugeDecimalTest { + public Decimal128Test() { + super("decimal128", new MathContext(Decimal128Column.MAX_PRECISION, RoundingMode.HALF_EVEN)); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java new file mode 100644 index 0000000000..af927fd2ec --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -0,0 +1,15 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +import java.math.MathContext; +import java.math.RoundingMode; + +@RunWith(VertxUnitRunner.class) +public class Decimal256Test extends HugeDecimalTest { + public Decimal256Test() { + super("decimal256", new MathContext(Decimal256Column.MAX_PRECISION, RoundingMode.HALF_EVEN)); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java new file mode 100644 index 0000000000..c644d4503c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -0,0 +1,80 @@ +package io.vertx.clickhousenativeclient.alltypes; + + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public abstract class HugeDecimalTest extends AllTypesBase { + public static final int SCALE = 4; + public final MathContext mc; + + public HugeDecimalTest(String tableSuffix, MathContext mc) { + super(tableSuffix, new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + this.mc = mc; + } + + private Numeric nm(Long src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, mc); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + long mnl = Long.MIN_VALUE; + long mxl = Long.MAX_VALUE; + + Numeric v1 = nm(mxl / 3); + Numeric v2 = nm(mnl / 4); + Numeric v3 = nm(mxl / 5); + Numeric v4 = nm(mnl / 6); + Numeric v5 = nm(mxl / 7); + Numeric v6 = nm(mnl / 7); + Numeric nv = nm(0L); + Numeric mn = nm(mnl); + Numeric mx = nm(mxl); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index ac5b7550bf..c92839a52f 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -258,6 +258,16 @@ CREATE TABLE vertx_test_decimal128 ( nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) ) engine = Memory(); +DROP TABLE IF EXISTS vertx_test_decimal256; +CREATE TABLE vertx_test_decimal256 ( + id Int8, + simple_t Decimal256(4), + nullable_t Nullable(Decimal256(4)), + array_t Array(Decimal256(4)), + array3_t Array(Array(Array(Decimal256(4)))), + nullable_array_t Array(Nullable(Decimal256(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index 6010fbc4eb..8326f78aab 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -6,7 +6,7 @@ {'table': 'Decimal32', 'type': 'Decimal32(4)'}, {'table': 'Decimal64', 'type': 'Decimal64(4)'}, {'table': 'Decimal128', 'type': 'Decimal128(4)'}, - #{'table': 'Decimal256', 'type': 'Decimal256(4)'}, + {'table': 'Decimal256', 'type': 'Decimal256(4)'}, {'table': 'Enum8', 'type': 'Enum8(\'v0\' = -128, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 127)'}, {'table': 'Enum16', 'type': 'Enum16(\'v0\' = -32768, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 32767)'}, 'Float32', 'Float64', 'IPv6', 'IPv4']; diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index c87bbcdf67..ac72d61c21 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -397,6 +397,16 @@ CREATE TABLE vertx_test_decimal128 ( nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) ) engine = Memory(); +DROP TABLE IF EXISTS vertx_test_decimal256; +CREATE TABLE vertx_test_decimal256 ( + id Int8, + simple_t Decimal256(4), + nullable_t Nullable(Decimal256(4)), + array_t Array(Decimal256(4)), + array3_t Array(Array(Array(Decimal256(4)))), + nullable_array_t Array(Nullable(Decimal256(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, From 7f8e10a198e1ca3a59c3ebcecb181d23cd93ae30 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 08:15:06 +0300 Subject: [PATCH 051/176] fixed TODO: reuse cached key columns for LowCardinality reader Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 1 - ...ickhouseNativeConnectOptionsConverter.java | 3 --- .../ClickhouseNativeConnectOptions.java | 6 ----- .../ClickhouseNativeConnectionFactory.java | 8 ++----- .../ClickhouseNativeSocketConnection.java | 3 +-- .../impl/RowOrientedBlock.java | 2 +- .../impl/codec/ExtendedQueryCommandCodec.java | 1 - .../impl/codec/columns/ArrayColumnReader.java | 5 ++++- .../impl/codec/columns/ClickhouseColumns.java | 9 ++++++-- .../columns/GenericDecimalColumnReader.java | 1 - .../columns/LowCardinalityColumnReader.java | 22 +++++++++++-------- .../columns/LowCardinalityColumnWriter.java | 2 +- 12 files changed, 29 insertions(+), 34 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 1fc77e8634..dffb133d29 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -74,7 +74,6 @@ test - com.fasterxml.jackson.dataformat jackson-dataformat-yaml diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 1c910b6ffd..b9db59e66f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -16,8 +16,6 @@ public class ClickhouseNativeConnectOptionsConverter { public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { for (java.util.Map.Entry member : json) { switch (member.getKey()) { - case "pipeliningLimit": - break; } } } @@ -27,6 +25,5 @@ public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { } public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { - json.put("pipeliningLimit", obj.getPipeliningLimit()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 716487ccd7..0de9f4fb3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -7,9 +7,6 @@ @DataObject(generateConverter = true) public class ClickhouseNativeConnectOptions extends SqlConnectOptions { - public static final int DEFAULT_PIPELINING_LIMIT = 256; - - private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); @@ -33,7 +30,4 @@ public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { super(other); } - public int getPipeliningLimit() { - return pipeliningLimit; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index c4a0d6d828..ae1bcfaf0b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -19,7 +19,6 @@ public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); - private int pipeliningLimit; private final LZ4Factory lz4Factory; ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { @@ -47,8 +46,6 @@ private LZ4Factory lz4FactoryForName(String name) { @Override protected void initializeConfiguration(SqlConnectOptions connectOptions) { - ClickhouseNativeConnectOptions options = (ClickhouseNativeConnectOptions) connectOptions; - this.pipeliningLimit = options.getPipeliningLimit(); } @Override @@ -74,12 +71,11 @@ private Future doConnect() { // Client is closed return context.failedFuture(e); } - Future connFut = soFut.map(so -> newSocketConnection((NetSocketInternal) so)); - return connFut; + return soFut.map(so -> newSocketConnection((NetSocketInternal) so)); } private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, pipeliningLimit, context, lz4Factory); + preparedStatementCacheSqlFilter, context, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 48f95b1d8e..8924104464 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -27,10 +27,9 @@ public ClickhouseNativeSocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, int preparedStatementCacheSize, Predicate preparedStatementCacheSqlFilter, - int pipeliningLimit, EventLoopContext context, LZ4Factory lz4Factory) { - super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, 1, context); this.lz4Factory = lz4Factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 58472bcc18..0e5d622f44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -45,7 +45,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //n_rows int nRows = toRow - fromRow; sink.writeULeb128(nRows); - //TODO smagellan + //TODO smagellan: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index e6e414700f..9c22429196 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -40,7 +40,6 @@ protected String sql() { void encode(ClickhouseNativeEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); - //TODO smagellan: introduce lock() method if (ourCursorId != null) { conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 9930fed124..3f4411a1f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -109,7 +109,10 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //reslicing for every row can be slow (for BLOBS and Enums if recoding requested), maybe store resliced array into Phantom/Weak reference + //TODO smagellan: + //reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe + // 1) store resliced array into Phantom/Weak reference or + // 2) split master-splice into nRows splices (1 per row) reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } return reslicedRet[rowIdx]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b7c22f5751..384539106f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -53,7 +53,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); //TODO smagellan: get rid of recursion - //TODO smagellan: introduce arrays dimensions size + //TODO smagellan: introduce arrays depth size into ClickhouseNativeColumnDescriptor + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, nested); @@ -166,6 +167,11 @@ private static int decimalSize(int precision) { } } + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); + return columnForSpec(descr, md); + } + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { return new ArrayColumn(descr, md); @@ -217,7 +223,6 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { - //TODO smagellan: merge into one statement after introducing column readers if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { return new Decimal32Column(descr); } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 784d8c257d..24d25ae02b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -8,7 +8,6 @@ import java.math.BigInteger; import java.math.MathContext; -//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class GenericDecimalColumnReader extends ClickhouseColumnReader { private final MathContext mc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 4a1e0faf79..b6306e1ab0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -8,6 +8,11 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { public static final long SUPPORTED_SERIALIZATION_VERSION = 1; + public static final ClickhouseColumn UINT8_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null); + public static final ClickhouseColumn UINT16_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null); + public static final ClickhouseColumn UINT32_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null); + public static final ClickhouseColumn UINT64_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null); + private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; private ClickhouseColumnReader indexColumn; @@ -74,7 +79,7 @@ protected void readData(ClickhouseStreamDataSource in) { } int keyType = (int)(serType & 0xf); if (keysColumn == null) { - keysColumn = uintColumn(columnDescriptor.name(), keyType).reader(nRows); + keysColumn = uintColumn(keyType).reader(nRows); } keysColumn.readColumn(in); } @@ -107,20 +112,19 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } - static ClickhouseColumn uintColumn(String name, int code) { - ClickhouseNativeColumnDescriptor tmp; - //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances + static ClickhouseColumn uintColumn(int code) { + ClickhouseColumn tmp; if (code == 0) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + tmp = UINT8_KEY_COLUMN; } else if (code == 1) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + tmp = UINT16_KEY_COLUMN; } else if (code == 2) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + tmp = UINT32_KEY_COLUMN; } else if (code == 3) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + tmp = UINT64_KEY_COLUMN; } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, null); + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 85c9fac8fe..78f7ae9e24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -48,7 +48,7 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, return; } int intType = (int) (log2(dictionarySize) / 8); - ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(columnDescriptor.name(), intType); + ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(intType); int serializationType = SERIALIZATION_TYPE | intType; sink.writeLongLE(serializationType); From 225ced803a20ffb4197751f14ee7fc4e7e16b9ee Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 09:29:20 +0300 Subject: [PATCH 052/176] fixed TODO: do not store array descriptor as lined list of nested types Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 21 ++++++--- .../impl/codec/columns/ArrayColumn.java | 6 +-- .../impl/codec/columns/ArrayColumnReader.java | 20 ++++----- .../impl/codec/columns/ArrayColumnWriter.java | 44 +++++++++---------- .../impl/codec/columns/ClickhouseColumns.java | 9 ++-- .../alltypes/Int16Test.java | 2 +- 6 files changed, 52 insertions(+), 50 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 29a5a27f3d..fd87419f8c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -23,6 +23,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; + private final int arrayDepth; private final ClickhouseNativeColumnDescriptor nested; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -30,16 +31,16 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, null); + minValue, maxValue, null, null, -1, null); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - ClickhouseNativeColumnDescriptor nested) { + int arrayDepth, ClickhouseNativeColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, nested); + minValue, maxValue, null, null, arrayDepth, nested); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -48,14 +49,15 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, precision, scale, null); + minValue, maxValue, precision, scale, -1, null); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - Integer precision, Integer scale, ClickhouseNativeColumnDescriptor nested) { + Integer precision, Integer scale, + int arrayDepth, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -69,6 +71,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; + this.arrayDepth = arrayDepth; this.nested = nested; } @@ -89,6 +92,10 @@ public boolean isArray() { return isArray; } + public int arrayDepth() { + return arrayDepth; + } + @Override public JDBCType jdbcType() { return jdbcType; @@ -140,7 +147,7 @@ public Integer getScale() { public ClickhouseNativeColumnDescriptor copyAsNestedArray() { return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, this); + JDBCType.ARRAY, false, false, false, null, null, arrayDepth + 1, nested); } public ClickhouseNativeColumnDescriptor copyAsNonArray() { @@ -149,7 +156,7 @@ public ClickhouseNativeColumnDescriptor copyAsNonArray() { public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, nested); + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); } public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index a63f3047c6..b7b98f033b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -8,12 +8,10 @@ public class ArrayColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; - this.elementaryDescr = elementaryDescr(descriptor); } private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { @@ -26,12 +24,12 @@ private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNative @Override public ClickhouseColumnReader reader(int nRows) { - return new ArrayColumnReader(nRows, descriptor, elementaryDescr, md); + return new ArrayColumnReader(nRows, descriptor, md); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); + return new ArrayColumnWriter(data, descriptor, md, columnIndex); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 3f4411a1f3..fb4a73e17a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,7 +19,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private List> slicesSeries; - private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private Integer curNestedColumnDepth; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; private Class elementClass; @@ -30,10 +30,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; private List curLevelSlice; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementTypeDescr = elementTypeDescr; + this.elementTypeDescr = descr.getNestedDescr(); } @Override @@ -49,21 +49,21 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDescr = columnDescriptor.getNestedDescr(); + curNestedColumnDepth = 1; nItems = 0; } if (statePrefix == null) { return null; } - if (curNestedColumnDescr.isArray()) { + if (curNestedColumnDepth < columnDescriptor.arrayDepth()) { readSlices(in); } if (nestedColumnReader == null) { - nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); + nestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); nestedColumnReader = nestedColumn.reader(nItems); elementClass = nestedColumn.nullValue().getClass(); } - if (curNestedColumnDescr.isNullable()) { + if (elementTypeDescr.isNullable()) { nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); } if (nItems > 0) { @@ -184,12 +184,12 @@ private void readSlices(ClickhouseStreamDataSource in) { curLevelSliceSize = nRows; } if (nRows == 0) { - curNestedColumnDescr = elementTypeDescr; + curNestedColumnDepth = columnDescriptor.arrayDepth(); return; } long lastSliceSize = 0; - while (curNestedColumnDescr.isArray()) { + while (curNestedColumnDepth < columnDescriptor.arrayDepth()) { if (curLevelSlice == null) { curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); curLevelSlice.add(0); @@ -207,7 +207,7 @@ private void readSlices(ClickhouseStreamDataSource in) { slicesSeries.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curNestedColumnDescr = curNestedColumnDescr.getNestedDescr(); + curNestedColumnDepth += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 1cf50ea9fc..4091005e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -16,51 +16,51 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; - this.elementTypeDescr = elementTypeDescr; + this.elementTypeDescr = descriptor.getNestedDescr(); this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { writeSizes(sink, false, fromRow, toRow); - writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); - writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeNullsInfo(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); } private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } - ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); - if (localNested.isArray()) { + + if (localDepth < descr.arrayDepth()) { localData = flattenArrays(localData, fromRow, toRow, colIndex); colIndex = 0; fromRow = 0; toRow = localData.size(); } - ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(localNested, md); - ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); - if (localWriter.getClass() == ArrayColumnWriter.class) { - ArrayColumnWriter localArrayWriter = (ArrayColumnWriter)localWriter; - localArrayWriter.writeElementData(sink, localDepth + 1, localNested, localData, fromRow, toRow, colIndex); + + if (localDepth < descr.arrayDepth()) { + this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); } else { + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); localWriter.serializeDataInternal(sink, fromRow, toRow); } } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } - ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); - if (localNested.isArray()) { + + if (localDepth < descr.arrayDepth()) { List flattened = flattenArrays(localData, fromRow, toRow, colIndex); - writeNullsInfo(sink, localDepth + 1, localNested, flattened, 0, flattened.size(), 0); + writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); } else { - if (localNested.isNullable()) { + if (elementTypeDescr.isNullable()) { elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); } } @@ -85,7 +85,6 @@ private static List flattenArrays(List data, int fromRow, int toRo private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, int fromRow, int toRow) { int nRows = toRow - fromRow; - ClickhouseNativeColumnDescriptor column = columnDescriptor; List sizes = new ArrayList<>(); if (writeTotalSize) { sizes.add(nRows); @@ -93,20 +92,21 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; - ClickhouseNativeColumnDescriptor nestedColumn; - while ((nestedColumn = column.getNestedDescr()).isArray()) { + int localDepth = 1; + while (localDepth < columnDescriptor.arrayDepth()) { int offset = 0; List newValue = new ArrayList<>(); for (int i = fromRow; i < toRow; ++i) { Object valObj = values.get(i); - Object[] val = (Object[]) maybeUnwrapTuple(valObj, localColumnIndex); + Object tmp = maybeUnwrapTuple(valObj, localColumnIndex); + Object[] val = (Object[]) tmp; offset += val.length; sizes.add(offset); List newTuples = Arrays.asList(val); newValue.addAll(newTuples); } values = newValue; - column = nestedColumn; + ++localDepth; localColumnIndex = 0; fromRow = 0; toRow = newValue.size(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 384539106f..aac86509de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -51,13 +51,10 @@ private static Map buildConstDurationMultipliers() { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; if (spec.startsWith(ARRAY_PREFIX)) { - spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); - //TODO smagellan: get rid of recursion - //TODO smagellan: introduce arrays depth size into ClickhouseNativeColumnDescriptor - - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); + Map.Entry arrayDepthInfo = unwrapArrayModifiers(spec); + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDepthInfo.getValue(), name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, nested); + JDBCType.ARRAY, false, false, false, null, null, arrayDepthInfo.getKey(), nested); } boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index 8a53198a18..49cbdd84eb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -27,7 +27,7 @@ public List createBatch() { Short mx = Short.MAX_VALUE; return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), From f0005e4f7c320759c9e0fda9d7a353b128078df5 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 09:46:45 +0300 Subject: [PATCH 053/176] do not do extra nested array copy Signed-off-by: vladimir --- .../codec/ClickhouseNativeColumnDescriptor.java | 9 --------- .../impl/codec/PrepareStatementCodec.java | 1 - .../impl/codec/columns/ArrayColumnReader.java | 9 ++++----- .../impl/codec/columns/ArrayColumnWriter.java | 14 ++++++++------ .../impl/codec/columns/ColumnUtils.java | 2 +- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index fd87419f8c..826201ec1d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -145,15 +145,6 @@ public Integer getScale() { return scale; } - public ClickhouseNativeColumnDescriptor copyAsNestedArray() { - return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, arrayDepth + 1, nested); - } - - public ClickhouseNativeColumnDescriptor copyAsNonArray() { - return copyWithModifiers(false, lowCardinality, nullable); - } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 113624e91e..29f5e8c3f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -34,7 +34,6 @@ void encode(ClickhouseNativeEncoder encoder) { boolean endsWithValues = sql.toLowerCase().endsWith("values"); boolean realInsertBatch = isInsert && (endsWithValues || (valuesIndex = valuesPos(sql, queryType.getValue())) != -1); if (realInsertBatch) { - //TODO smagellan: lock connection with prepared statement id encoder.getConn().lockPsOrThrow(psId); String truncatedSql = endsWithValues ? sql : sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index fb4a73e17a..540bb9b74d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -31,7 +31,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private List curLevelSlice; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr.copyAsNestedArray()); + super(nRows, descr); this.md = md; this.elementTypeDescr = descr.getNestedDescr(); } @@ -49,7 +49,7 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDepth = 1; + curNestedColumnDepth = 0; nItems = 0; } if (statePrefix == null) { @@ -109,9 +109,8 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //TODO smagellan: - //reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe - // 1) store resliced array into Phantom/Weak reference or + //TODO smagellan: reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe + // 1) store resliced master-array into Phantom/Weak reference or // 2) split master-splice into nRows splices (1 per row) reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 4091005e20..f9ce6c3dbc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -17,7 +17,7 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseColumn elementTypeColumn; public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { - super(data, descriptor.copyAsNestedArray(), columnIndex); + super(data, descriptor, columnIndex); this.md = md; this.elementTypeDescr = descriptor.getNestedDescr(); this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -26,12 +26,12 @@ public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor desc @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { writeSizes(sink, false, fromRow, toRow); - writeNullsInfo(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); - writeElementData(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); + writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); } private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } @@ -43,6 +43,7 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli } if (localDepth < descr.arrayDepth()) { + //TODO: maybe get rid of recursion this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); } else { ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -52,12 +53,13 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } if (localDepth < descr.arrayDepth()) { List flattened = flattenArrays(localData, fromRow, toRow, colIndex); + //TODO: maybe get rid of recursion writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); } else { if (elementTypeDescr.isNullable()) { @@ -92,7 +94,7 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; - int localDepth = 1; + int localDepth = 0; while (localDepth < columnDescriptor.arrayDepth()) { int offset = 0; List newValue = new ArrayList<>(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 7f092af502..3f02c14908 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -21,7 +21,7 @@ public static int getLastNonZeroPos(byte[] bytes) { return lastNonZeroPos; } - //TODO: rework checks + //TODO: maybe rework checks public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { if (columnDescriptor.getScale() < bd.scale()) { throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); From 66e62128dc349ed7988bbe426c95396b64438700 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 10:50:31 +0300 Subject: [PATCH 054/176] removed recursion from ArrayColumnWriter Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 16 ++++----- .../impl/codec/columns/ArrayColumnReader.java | 12 +++---- .../impl/codec/columns/ArrayColumnWriter.java | 34 ++++++++----------- .../impl/codec/columns/ClickhouseColumns.java | 10 +++--- 4 files changed, 34 insertions(+), 38 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 826201ec1d..92f9abb822 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -23,7 +23,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; - private final int arrayDepth; + private final int arrayDimensionsCount; private final ClickhouseNativeColumnDescriptor nested; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -38,9 +38,9 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - int arrayDepth, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, arrayDepth, nested); + minValue, maxValue, null, null, arrayDimensionsCount, nested); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -57,7 +57,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale, - int arrayDepth, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -71,7 +71,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; - this.arrayDepth = arrayDepth; + this.arrayDimensionsCount = arrayDimensionsCount; this.nested = nested; } @@ -92,8 +92,8 @@ public boolean isArray() { return isArray; } - public int arrayDepth() { - return arrayDepth; + public int arrayDimensionsCount() { + return arrayDimensionsCount; } @Override @@ -147,7 +147,7 @@ public Integer getScale() { public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDimensionsCount, nested); } public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 540bb9b74d..024c11f33c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,7 +19,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private List> slicesSeries; - private Integer curNestedColumnDepth; + private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; private Class elementClass; @@ -49,13 +49,13 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDepth = 0; + curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } - if (curNestedColumnDepth < columnDescriptor.arrayDepth()) { + if (curDimension < columnDescriptor.arrayDimensionsCount()) { readSlices(in); } if (nestedColumnReader == null) { @@ -183,12 +183,12 @@ private void readSlices(ClickhouseStreamDataSource in) { curLevelSliceSize = nRows; } if (nRows == 0) { - curNestedColumnDepth = columnDescriptor.arrayDepth(); + curDimension = columnDescriptor.arrayDimensionsCount(); return; } long lastSliceSize = 0; - while (curNestedColumnDepth < columnDescriptor.arrayDepth()) { + while (curDimension < columnDescriptor.arrayDimensionsCount()) { if (curLevelSlice == null) { curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); curLevelSlice.add(0); @@ -206,7 +206,7 @@ private void readSlices(ClickhouseStreamDataSource in) { slicesSeries.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curNestedColumnDepth += 1; + curDimension += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index f9ce6c3dbc..5a3555c6f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -35,21 +35,16 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli localData = Collections.emptyList(); } - if (localDepth < descr.arrayDepth()) { + while (localDepth < descr.arrayDimensionsCount()) { localData = flattenArrays(localData, fromRow, toRow, colIndex); colIndex = 0; fromRow = 0; toRow = localData.size(); + localDepth += 1; } - - if (localDepth < descr.arrayDepth()) { - //TODO: maybe get rid of recursion - this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); - } else { - ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); - ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); - localWriter.serializeDataInternal(sink, fromRow, toRow); - } + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); + localWriter.serializeDataInternal(sink, fromRow, toRow); } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { @@ -57,14 +52,15 @@ private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, Click localData = Collections.emptyList(); } - if (localDepth < descr.arrayDepth()) { - List flattened = flattenArrays(localData, fromRow, toRow, colIndex); - //TODO: maybe get rid of recursion - writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); - } else { - if (elementTypeDescr.isNullable()) { - elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); - } + while (localDepth < descr.arrayDimensionsCount()) { + localData = flattenArrays(localData, fromRow, toRow, colIndex); + colIndex = 0; + fromRow = 0; + toRow = localData.size(); + localDepth += 1; + } + if (elementTypeDescr.isNullable()) { + elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); } } @@ -95,7 +91,7 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; int localDepth = 0; - while (localDepth < columnDescriptor.arrayDepth()) { + while (localDepth < columnDescriptor.arrayDimensionsCount()) { int offset = 0; List newValue = new ArrayList<>(); for (int i = fromRow; i < toRow; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index aac86509de..5d2caea968 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -50,11 +50,11 @@ private static Map buildConstDurationMultipliers() { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; - if (spec.startsWith(ARRAY_PREFIX)) { - Map.Entry arrayDepthInfo = unwrapArrayModifiers(spec); - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDepthInfo.getValue(), name); + Map.Entry arrayDimensionsInfo = maybeUnwrapArrayDimensions(spec); + if (arrayDimensionsInfo.getKey() > 0) { + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, arrayDepthInfo.getKey(), nested); + JDBCType.ARRAY, false, false, false, null, null, arrayDimensionsInfo.getKey(), nested); } boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { @@ -69,7 +69,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } - private static Map.Entry unwrapArrayModifiers(String spec) { + private static Map.Entry maybeUnwrapArrayDimensions(String spec) { int arrayDepth = 0; while (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); From e9136d53f97f50d3b56067b6e277c7d60d5fc156 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 14:15:59 +0300 Subject: [PATCH 055/176] do not reslice every row if recoding is required Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 107 ++++++++++++++---- .../columns/LowCardinalityColumnReader.java | 27 ++--- .../ArraySerDesTest.java | 19 +++- 3 files changed, 111 insertions(+), 42 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 024c11f33c..e47d6590e7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -3,22 +3,28 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.lang.reflect.Array; import java.nio.charset.Charset; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private List> slicesSeries; + private List> masterSlice; + private List>> perRowsSlice; + private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; @@ -48,15 +54,26 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - slicesSeries = new ArrayList<>(); + masterSlice = new ArrayList<>(); curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } + boolean maybeRequiresExtraEncoding = elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || elementTypeDescr.getNestedType().startsWith("Enum"); if (curDimension < columnDescriptor.arrayDimensionsCount()) { - readSlices(in); + if (maybeRequiresExtraEncoding) { + readAsPerRowSlices(in); + LOG.info("per row slices: " + perRowsSlice); + } else { + readAsMasterSlice(in); + LOG.info("master slice: " + masterSlice); + } + if (curDimension < columnDescriptor.arrayDimensionsCount()) { + return null; + } } if (nestedColumnReader == null) { nestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -69,7 +86,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (nItems > 0) { assert nItems == nestedColumnReader.nRows; if (nestedColumnReader.getClass() == LowCardinalityColumnReader.class) { - ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = (Long) statePrefix; } if (nestedColumnReader.isPartial()) { nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); @@ -77,22 +94,19 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } } - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || nestedColumnReader.getClass() == Enum8ColumnReader.class - || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + if (maybeRequiresExtraEncoding) { return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); + return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, masterSlice, elementClass); } + Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || nestedColumnReader.getClass() == Enum8ColumnReader.class - || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + if (maybeRequiresExtraEncoding) { return emptyData; } resliced = true; - return resliceIntoArray(emptyData, elementClass); + return resliceIntoArray(emptyData, masterSlice, elementClass); } @Override @@ -101,6 +115,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { Object[] reslicedRet; if (resliced) { reslicedRet = objectsArray; + return reslicedRet[rowIdx]; } else { desired = maybeUnwrapArrayElementType(desired); Triplet> maybeRecoded = asDesiredType(objectsArray, desired); @@ -109,12 +124,9 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //TODO smagellan: reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe - // 1) store resliced master-array into Phantom/Weak reference or - // 2) split master-splice into nRows splices (1 per row) - reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); + reslicedRet = resliceIntoArray(maybeRecoded.middle(), perRowsSlice.get(rowIdx), desired); + return reslicedRet; } - return reslicedRet[rowIdx]; } private Class maybeUnwrapArrayElementType(Class desired) { @@ -157,10 +169,10 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { return ret; } - private Object[] resliceIntoArray(Object[] data, Class elementClass) { + private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { Object[] intermData = data; - for (int i = slicesSeries.size() - 1; i >= 0; --i) { - List slices = slicesSeries.get(i); + for (int i = sliceToUse.size() - 1; i >= 0; --i) { + List slices = sliceToUse.get(i); Iterator> paired = PairedIterator.of(slices); Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); int tmpSliceIdx = 0; @@ -177,12 +189,59 @@ private Object[] resliceIntoArray(Object[] data, Class elementClass) { return (Object[]) intermData[0]; } - private void readSlices(ClickhouseStreamDataSource in) { - if (slicesSeries.isEmpty()) { - slicesSeries.add(Arrays.asList(0, nRows)); + private void readAsPerRowSlices(ClickhouseStreamDataSource in) { + if (nRows == 0) { + masterSlice = Collections.emptyList(); + perRowsSlice = Collections.emptyList(); + curDimension = columnDescriptor.arrayDimensionsCount(); + return; + } + + perRowsSlice = new ArrayList<>(nRows); + for (int i = 0; i < nRows; ++i) { + perRowsSlice.add(new ArrayList<>()); + } + curLevelSliceSize = nRows; + while (curDimension < columnDescriptor.arrayDimensionsCount()) { + if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { + return; + } + long prevSliceElement = 0; + for (int rowIdx = 0; rowIdx < nRows; ++rowIdx) { + int rowSliceElementsToReadAtDimension; + if (curDimension == 0) { + rowSliceElementsToReadAtDimension = 1; + } else { + List rowSliceAtPrevDimension = perRowsSlice.get(rowIdx).get(curDimension - 1); + rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension.get(rowSliceAtPrevDimension.size() - 1) - rowSliceAtPrevDimension.get(0); + } + List rowSliceAtDimension = new ArrayList<>(rowSliceElementsToReadAtDimension + 1); + //offsets at last dimension are absolute + boolean lastDimension = curDimension == columnDescriptor.arrayDimensionsCount() - 1; + int firstElementInSlice = (int) prevSliceElement; + rowSliceAtDimension.add(firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); + for (int i = 0; i < rowSliceElementsToReadAtDimension; ++i) { + prevSliceElement = in.readLongLE(); + if (prevSliceElement > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + prevSliceElement + "), max " + Integer.MAX_VALUE); + } + rowSliceAtDimension.add((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); + } + perRowsSlice.get(rowIdx).add(rowSliceAtDimension); + } + ++curDimension; + curLevelSliceSize = (int)prevSliceElement; + } + nItems = curLevelSliceSize; + } + + private void readAsMasterSlice(ClickhouseStreamDataSource in) { + if (masterSlice.isEmpty()) { + masterSlice.add(Arrays.asList(0, nRows)); curLevelSliceSize = nRows; } if (nRows == 0) { + perRowsSlice = Collections.emptyList(); curDimension = columnDescriptor.arrayDimensionsCount(); return; } @@ -203,7 +262,7 @@ private void readSlices(ClickhouseStreamDataSource in) { } curLevelSlice.add((int) lastSliceSize); } - slicesSeries.add(curLevelSlice); + masterSlice.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; curDimension += 1; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index b6306e1ab0..aafcf93df2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -8,10 +8,13 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { public static final long SUPPORTED_SERIALIZATION_VERSION = 1; - public static final ClickhouseColumn UINT8_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null); - public static final ClickhouseColumn UINT16_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null); - public static final ClickhouseColumn UINT32_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null); - public static final ClickhouseColumn UINT64_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null); + + private static final ClickhouseColumn[] KEY_COLUMNS = new ClickhouseColumn[] { + ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null) + }; private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; @@ -105,26 +108,18 @@ public boolean isPartial() { @Override public Object getElement(int rowIdx, Class desired) { - int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); + int key = ((Number)keysColumn.getElement(rowIdx, Number.class)).intValue(); if (columnDescriptor.isNullable() && key == 0) { return null; } + //TODO: maybe introduce cache here if String encoding was requested (for VARCHAR where desired == String.class || desired == Object.class) return indexColumn.getElementInternal(key, desired); } static ClickhouseColumn uintColumn(int code) { - ClickhouseColumn tmp; - if (code == 0) { - tmp = UINT8_KEY_COLUMN; - } else if (code == 1) { - tmp = UINT16_KEY_COLUMN; - } else if (code == 2) { - tmp = UINT32_KEY_COLUMN; - } else if (code == 3) { - tmp = UINT64_KEY_COLUMN; - } else { + if (code < 0 || code >= KEY_COLUMNS.length) { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return tmp; + return KEY_COLUMNS[code]; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index f3d9a220ae..19b61560d6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -9,6 +9,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; import org.junit.Assert; import org.junit.Test; @@ -23,6 +25,8 @@ @RunWith(Parameterized.class) public class ArraySerDesTest { + private static final Logger LOG = LoggerFactory.getLogger(ArraySerDesTest.class); + private final ClickhouseColumn col; private final List data; @@ -38,12 +42,22 @@ public static Iterable dataForTest() { 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); - List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + List data = Arrays.asList( + //row slice: [[0, 2], [0, 1, 2], [0, 0, 0]] (master slice for 2 similar rows: [0,2],[0,2,4],[0,1,2,3,4],[0,0,0,0,0]) + Tuple.of(new String[][][]{ {{}}, {{}} } ), + //row slice: [[0, 1], [0, 3], [0, 0, 1, 3]] + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}}, {{}} } ), Tuple.of(new String[][][]{ {{}}, {{}} } ), Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ), - Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ) + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ), + //master slice for 2 rows: [[0, 2], [0, 1, 3], [0, 3, 5, 6], [0, 0, 1, 3, 6, 7, 7]] + //per row slices: [[[0, 1], [0, 3], [0, 0, 1, 3]], [[0, 2], [0, 2, 3], [0, 3, 4, 4]]] + //[0, 1], [0, 3], [0, 0, 1, 3] + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + //[0, 2], [0, 2, 3], [0, 3, 4, 4] + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ) ); return Arrays.asList(new Object[][]{ @@ -65,6 +79,7 @@ public void doSerDes() { ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); reader.readColumn(ds); for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { + LOG.info("rowIdx: " + rowIdx); Object actual = reader.getElement(rowIdx, String.class); Object expected = data.get(rowIdx).getValue(0); Assert.assertArrayEquals((Object[])expected, (Object[])actual); From 1395271ad7bf31659ed2f3830e1f322a61a8251c Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 20:16:09 +0300 Subject: [PATCH 056/176] added StringCache for LowCardinality columns Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 ++++++-- .../impl/codec/columns/FixedStringColumn.java | 6 ++-- .../columns/FixedStringColumnReader.java | 15 ++++++--- .../impl/codec/columns/IPv6Column.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../columns/LowCardinalityColumnReader.java | 5 +-- .../columns/LowCardinalityColumnWriter.java | 1 + .../impl/codec/columns/StringCache.java | 32 +++++++++++++++++++ .../impl/codec/columns/StringColumn.java | 6 ++-- .../codec/columns/StringColumnReader.java | 8 +++-- 10 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 5d2caea968..a4ec839424 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -165,11 +165,19 @@ private static int decimalSize(int precision) { } public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + return columnForSpec(spec, name, md, false); + } + + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); - return columnForSpec(descr, md); + return columnForSpec(descr, md, enableStringCache); } public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + return columnForSpec(descr, md, false); + } + + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { if (descr.isArray()) { return new ArrayColumn(descr, md); } @@ -191,9 +199,9 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(descr, md); + return new StringColumn(descr, md, enableStringCache); } else { - return new FixedStringColumn(descr, md); + return new FixedStringColumn(descr, md, enableStringCache); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index c16f947f12..7f692bb474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -8,15 +8,17 @@ public class FixedStringColumn extends ClickhouseColumn { protected final ClickhouseNativeDatabaseMetadata md; + private final boolean enableStringCache; - public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; + this.enableStringCache = enableStringCache; } @Override public ClickhouseColumnReader reader(int nRows) { - return new FixedStringColumnReader(nRows, descriptor, md); + return new FixedStringColumnReader(nRows, descriptor, enableStringCache, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 3028bd79d4..4bdb6014d5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -11,14 +11,18 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; private final boolean removeTrailingZerosInStrings; + private final boolean enableStringCache; + private final StringCache cache; private List elements; - protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); this.removeTrailingZerosInStrings = md.isRemoveTrailingZerosInFixedStrings(); + this.enableStringCache = enableStringCache; + this.cache = enableStringCache ? new StringCache(nRows) : null; } @Override @@ -47,10 +51,13 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - byte[] bytes = (byte[]) tmp; - int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(bytes) : bytes.length - 1; - return new String(bytes, 0, lastNonZeroIdx + 1, charset); + return enableStringCache ? cache.get(rowIdx, () -> buildStringFromElement((byte[]) tmp)) : buildStringFromElement((byte[]) tmp); } return tmp; } + + private String buildStringFromElement(byte[] tmp) { + int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(tmp) : tmp.length - 1; + return new String(tmp, 0, lastNonZeroIdx + 1, charset); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 6beeba5fe0..8238e472cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -33,7 +33,7 @@ private static Inet6Address ipv6(byte[] src) { } public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(descr, md); + super(descr, md, false); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 4afefc7d27..294158f43a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -10,7 +10,7 @@ public class IPv6ColumnReader extends FixedStringColumnReader { protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, columnDescriptor, md); + super(nRows, columnDescriptor, false, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index aafcf93df2..60e68491c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -66,7 +66,8 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md).reader(indexSize.intValue()); + int sz = indexSize.intValue(); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md, true).reader(sz); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -112,7 +113,7 @@ public Object getElement(int rowIdx, Class desired) { if (columnDescriptor.isNullable() && key == 0) { return null; } - //TODO: maybe introduce cache here if String encoding was requested (for VARCHAR where desired == String.class || desired == Object.class) + //caveat: caller may change index contents for byte[] elements return indexColumn.getElementInternal(key, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 78f7ae9e24..7ffafb87dc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -78,6 +78,7 @@ private Object maybeWrapArray(Object val) { if (val.getClass() == byte[].class) { val = new ArrayWrapper((byte[]) val); } else if (val.getClass() == String.class) { + //TODO: maybe introduce cache with already observed Strings to skip getBytes() or mimic String.hashCode for byte[] val = new ArrayWrapper(((String) val).getBytes(md.getStringCharset())); } return val; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java new file mode 100644 index 0000000000..d9fc77c7f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.lang.ref.SoftReference; +import java.util.function.Supplier; + +public class StringCache { + private final int nElements; + private SoftReference stringCache; + + public StringCache(int nElements) { + this.nElements = nElements; + this.stringCache = new SoftReference<>(new String[nElements]); + } + + public String get(int rowIdx, Supplier supplier) { + String[] cache = stringCache.get(); + String ret; + if (cache == null) { + cache = new String[nElements]; + stringCache = new SoftReference<>(cache); + ret = supplier.get(); + cache[rowIdx] = ret; + } else { + ret = cache[rowIdx]; + if (ret == null) { + ret = supplier.get(); + cache[rowIdx] = ret; + } + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index ccf1045879..a189e13bcc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -8,16 +8,18 @@ public class StringColumn extends ClickhouseColumn { public static final byte[] EMPTY = new byte[0]; + private final boolean enableStringCache; private final ClickhouseNativeDatabaseMetadata md; - public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; + this.enableStringCache = enableStringCache; } @Override public ClickhouseColumnReader reader(int nRows) { - return new StringColumnReader(nRows, descriptor, md); + return new StringColumnReader(nRows, descriptor, enableStringCache, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index cd87d42375..a118062139 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -12,11 +12,15 @@ public class StringColumnReader extends ClickhouseColumnReader { private Integer curStrLength; private List elements; private final Charset charset; + private final boolean enableStringCache; + private final StringCache cache; - protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); + this.enableStringCache = enableStringCache; + this.cache = enableStringCache ? new StringCache(nRows) : null; } @Override @@ -52,7 +56,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - return new String((byte[])tmp, charset); + return enableStringCache ? cache.get(rowIdx, () -> new String((byte[])tmp, charset)) : new String((byte[])tmp, charset); } return tmp; } From 6fdbe02b782821d5eff3c118932d0aa06c2f2f73 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 21:34:10 +0300 Subject: [PATCH 057/176] added IntervalArray tests Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 1 - .../SpecialTypesTest.java | 20 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 9994619827..65c1354811 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -73,7 +73,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } - //TODO smagellan: handle parse Exceptions, if any Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index c7b72070dd..6ddc86d390 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -45,16 +45,34 @@ public void testIntervalYear(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 YEAR", Duration.class, Optional.of(Duration.ofDays(365 * 4))); } + @Test + public void testIntervalYearArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalYear(4), toIntervalYear(1), toIntervalYear(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 365), Duration.ofDays(365), Duration.ofDays(0)})); + } + @Test public void testIntervalQuarter(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 QUARTER", Duration.class, Optional.of(Duration.ofDays(120 * 4))); } + @Test + public void testIntervalQuarterArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalQuarter(4), toIntervalQuarter(1), toIntervalQuarter(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 120), Duration.ofDays(120), Duration.ofDays(0)})); + } + @Test public void testIntervalMonth(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 MONTH", Duration.class, Optional.of(Duration.ofDays(30 * 4))); } + @Test + public void testIntervalMonthArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalMonth(4), toIntervalMonth(1), toIntervalMonth(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 30), Duration.ofDays(30), Duration.ofDays(0)})); + } + @Test public void testIntervalWeek(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); @@ -66,8 +84,6 @@ public void testIntervalWeekArray(TestContext ctx) { Optional.of(new Duration[]{Duration.ofDays(4 * 7), Duration.ofDays(7), Duration.ofDays(0)})); } - @Test - //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" public void testIntervalDay(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); } From 225dd3d699b72c46767bcb0adb434c709fadde68 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 22:47:11 +0300 Subject: [PATCH 058/176] added array deduplication test Signed-off-by: vladimir --- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/PacketReader.java | 4 +++- .../impl/codec/columns/ArrayColumnReader.java | 6 ++++- .../impl/codec/columns/StringCache.java | 9 ++++++++ .../alltypes/AllTypesBase.java | 10 +++++--- .../alltypes/StringTest.java | 23 +++++++++++++++++++ 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 1c7178089e..de4c92d39c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -91,7 +91,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { - LOG.info("reading column " + colName + " of type " + colType); + LOG.info("reading column " + colName + "[" + nRows + "] of type " + colType); columnData.readColumn(in); if (columnData.isPartial()) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 5f211ff479..5d489e331f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -12,6 +12,7 @@ import net.jpountz.lz4.LZ4Factory; import java.sql.JDBCType; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -214,7 +215,8 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo ds.moreData(in, alloc); ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); + List colNames = new ArrayList<>(block.getColumnsWithTypes().keySet()); + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); columnBlockReader = null; packetType = null; ds.finish(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index e47d6590e7..12bec830dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -141,7 +141,11 @@ private Class maybeUnwrapArrayElementType(Class desired) { private Triplet> asDesiredType(Object[] src, Class desired) { if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { if (desired == String.class || desired == Object.class) { - return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + //TODO smagellan: rewrite asObjectsArray in String, FixedString and EnumX columns + Object[] dt = nestedColumnReader.getClass() == LowCardinalityColumnReader.class + ? nestedColumnReader.asObjectsArray(desired) + : stringifyByteArrays(src, md.getStringCharset()); + return new Triplet<>(true, dt, desired); } return new Triplet<>(false, src, desired); } else if (nestedColumnReader instanceof EnumColumnReader) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index d9fc77c7f1..33a77c9c87 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,9 +1,14 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + import java.lang.ref.SoftReference; import java.util.function.Supplier; public class StringCache { + private static final Logger LOG = LoggerFactory.getLogger(StringCache.class); + private final int nElements; private SoftReference stringCache; @@ -20,11 +25,15 @@ public String get(int rowIdx, Supplier supplier) { stringCache = new SoftReference<>(cache); ret = supplier.get(); cache[rowIdx] = ret; + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } else { ret = cache[rowIdx]; if (ret == null) { ret = supplier.get(); cache[rowIdx] = ret; + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); + } else { + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } } return ret; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index a040cbf6aa..8b3ade8541 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -33,8 +33,8 @@ public abstract class AllTypesBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; - private Vertx vertx; + protected ClickhouseNativeConnectOptions options; + protected Vertx vertx; public AllTypesBase(String tableSuffix, MyColumnChecker checker) { this(tableSuffix, checker, true); @@ -78,7 +78,7 @@ private List columnsList(boolean hasLowCardinality) { } protected void doTest(TestContext ctx, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; + String tableName = tableName(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( ctx.asyncAssertSuccess(res1 -> { @@ -109,6 +109,10 @@ protected void doTest(TestContext ctx, List batch) { })); })); } + + protected String tableName() { + return TABLE_PREFIX + tableSuffix; + } } class MyColumnChecker { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 9ff654d963..cbaa727abd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,8 +1,13 @@ package io.vertx.clickhousenativeclient.alltypes; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; +import org.junit.Ignore; +import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; @@ -14,6 +19,24 @@ public StringTest() { super("string", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } + @Test + public void testArrayDeduplication(TestContext ctx) { + String tp = "Array(Array(LowCardinality(Nullable(String))))"; + //String query = String.format("select CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr", tp); + String query = String.format("select arr1 from ( " + + "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr1 UNION ALL " + + "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3', 'arrqq')), '%s') as arr1" + + ") t1 order by id", tp, tp); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query(query).execute( + ctx.asyncAssertSuccess(res1 -> { + RowIterator rows = res1.iterator(); + String[][] a1 = rows.next().get(String[][].class, 0); + ctx.assertTrue(a1[0][0] == a1[3][0]); + })); + })); + } + @Override public List createBatch() { String v1 = "val1"; From b7be85234bae36448688c873a64d7e695c24c74a Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 23:47:22 +0300 Subject: [PATCH 059/176] reworked array deduplication test Signed-off-by: vladimir --- .../alltypes/AllTypesBase.java | 51 +++++++++---------- .../alltypes/FixedStringTest.java | 7 +++ .../StringArrayDeduplicationTester.java | 47 +++++++++++++++++ .../alltypes/StringTest.java | 18 +------ 4 files changed, 80 insertions(+), 43 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 8b3ade8541..775d483d28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -50,6 +50,9 @@ public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasL public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName()).execute(ctx.asyncAssertSuccess()); + })); } @After @@ -80,32 +83,28 @@ private List columnsList(boolean hasLowCardinality) { protected void doTest(TestContext ctx, List batch) { String tableName = tableName(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Number id = row.get(Number.class, "id"); - Tuple expectedRow = batch.get(batchIdx); - LOG.info("checking row " + tableSuffix + ":" + id); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); - } - ++batchIdx; - } - })); - })); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess(res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); + } + ++batchIdx; + } + })); })); })); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 685d2bb744..b7b64127aa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,8 +1,10 @@ package io.vertx.clickhousenativeclient.alltypes; +import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; +import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; @@ -14,6 +16,11 @@ public FixedStringTest() { super("fixedstring", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } + @Test + public void testArrayDeduplication(TestContext ctx) { + new StringArrayDeduplicationTester(tableName(), vertx, options).test(ctx); + } + @Override public List createBatch() { String v1 = "val1"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java new file mode 100644 index 0000000000..dcbb7c5104 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -0,0 +1,47 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; + +public class StringArrayDeduplicationTester { + private final String tableName; + private final ClickhouseNativeConnectOptions options; + private final Vertx vertx; + + public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseNativeConnectOptions options) { + this.tableName = tableName; + this.options = options; + this.vertx = vertx; + } + + public void test(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), + Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), + Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) + ); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { + conn.query("SELECT nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + RowIterator rows = res3.iterator(); + String[][][] r1 = rows.next().get(String[][][].class, 0); + String[][][] r2 = rows.next().get(String[][][].class, 0); + String[][][] r3 = rows.next().get(String[][][].class, 0); + ctx.assertTrue(r1[0][0][3] == r3[0][2][0]);//dedup3 + ctx.assertTrue(r1[0][0][4] == r2[0][1][1]);//dedup1 + ctx.assertTrue(r1[1][1][1] == r2[0][0][3]);//dedup2 + })); + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index cbaa727abd..9fe684a4c4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,12 +1,9 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,20 +18,7 @@ public StringTest() { @Test public void testArrayDeduplication(TestContext ctx) { - String tp = "Array(Array(LowCardinality(Nullable(String))))"; - //String query = String.format("select CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr", tp); - String query = String.format("select arr1 from ( " + - "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr1 UNION ALL " + - "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3', 'arrqq')), '%s') as arr1" + - ") t1 order by id", tp, tp); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query(query).execute( - ctx.asyncAssertSuccess(res1 -> { - RowIterator rows = res1.iterator(); - String[][] a1 = rows.next().get(String[][].class, 0); - ctx.assertTrue(a1[0][0] == a1[3][0]); - })); - })); + new StringArrayDeduplicationTester(tableName(), vertx, options).test(ctx); } @Override From cef98c25e3edf9a2bde34cf272b81a7090553e87 Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 9 Apr 2021 21:25:49 +0300 Subject: [PATCH 060/176] use columnreader as accessor if array recoding is reqired Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 2 - .../impl/codec/columns/ArrayColumnReader.java | 124 +++++++++--------- .../codec/columns/ClickhouseColumnReader.java | 3 + .../columns/LowCardinalityColumnReader.java | 7 +- .../impl/codec/columns/StringCache.java | 9 -- .../codec/columns/UInt64ColumnReader.java | 1 + 6 files changed, 70 insertions(+), 76 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 65c1354811..f583e09bdf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -89,7 +89,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { - //TODO smagellan: handle connection errors (e.g. table does not exist, wrong password, no column with given name, etc) String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { @@ -97,7 +96,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.error("unknown packet type", t); notifyOperationUpdate(false, t); } - //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { notifyOperationUpdate(false, null); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 12bec830dd..62fbf56d02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -3,11 +3,8 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import java.lang.reflect.Array; -import java.nio.charset.Charset; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; @@ -15,10 +12,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.function.Function; public class ArrayColumnReader extends ClickhouseColumnReader { - private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); - private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; @@ -66,10 +62,8 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (curDimension < columnDescriptor.arrayDimensionsCount()) { if (maybeRequiresExtraEncoding) { readAsPerRowSlices(in); - LOG.info("per row slices: " + perRowsSlice); } else { readAsMasterSlice(in); - LOG.info("master slice: " + masterSlice); } if (curDimension < columnDescriptor.arrayDimensionsCount()) { return null; @@ -89,7 +83,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = (Long) statePrefix; } if (nestedColumnReader.isPartial()) { - nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); + nestedColumnReader.itemsArray = nestedColumnReader.readItems(in); if (nestedColumnReader.isPartial()) { return null; } @@ -98,7 +92,8 @@ protected Object readItems(ClickhouseStreamDataSource in) { return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, masterSlice, elementClass); + Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); + return resliceIntoArray(tmp, masterSlice, elementClass); } Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); @@ -111,20 +106,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - Object[] objectsArray = (Object[]) this.itemsArray; Object[] reslicedRet; if (resliced) { - reslicedRet = objectsArray; + reslicedRet = (Object[]) this.itemsArray; return reslicedRet[rowIdx]; } else { desired = maybeUnwrapArrayElementType(desired); - Triplet> maybeRecoded = asDesiredType(objectsArray, desired); - if (maybeRecoded.left()) { - desired = maybeRecoded.right(); - } else { - desired = elementClass; - } - reslicedRet = resliceIntoArray(maybeRecoded.middle(), perRowsSlice.get(rowIdx), desired); + Class forRecode = desired; + Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); + reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice.get(rowIdx), desired); return reslicedRet; } } @@ -138,59 +128,65 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Triplet> asDesiredType(Object[] src, Class desired) { - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { - if (desired == String.class || desired == Object.class) { - //TODO smagellan: rewrite asObjectsArray in String, FixedString and EnumX columns - Object[] dt = nestedColumnReader.getClass() == LowCardinalityColumnReader.class - ? nestedColumnReader.asObjectsArray(desired) - : stringifyByteArrays(src, md.getStringCharset()); - return new Triplet<>(true, dt, desired); - } - return new Triplet<>(false, src, desired); - } else if (nestedColumnReader instanceof EnumColumnReader) { - Object[] recoded = ((EnumColumnReader)nestedColumnReader).recodeValues(src, desired); - return new Triplet<>(true, recoded, desired); + private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { + Object[] intermData = data; + for (int i = sliceToUse.size() - 1; i >= 0; --i) { + List slices = sliceToUse.get(i); + intermData = resliceArray(intermData, slices, intermData.getClass()); } - return new Triplet<>(false, src, desired); + return (Object[]) intermData[0]; } - private Object[] stringifyByteArrays(Object[] src, Charset charset) { - String[] ret = new String[src.length]; - for (int i = 0; i < src.length; ++i) { - Object element = src[i]; - if (element != null) { - int lastNonZeroIdx; - byte[] bytes = (byte[]) element; - if (md.isRemoveTrailingZerosInFixedStrings() && elementTypeDescr.getNestedType().startsWith("FixedString")) { - lastNonZeroIdx = ColumnUtils.getLastNonZeroPos(bytes); - } else { - lastNonZeroIdx = bytes.length - 1; - } - ret[i] = new String(bytes, 0, lastNonZeroIdx + 1, charset); - } + + private Object[] resliceIntoArray(Function dataAccessor, List> sliceToUse, Class elementClass) { + int i = sliceToUse.size() - 1; + List slices = sliceToUse.get(i); + Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); + + for (i = sliceToUse.size() - 2; i >= 0; --i) { + slices = sliceToUse.get(i); + intermData = resliceArray(intermData, slices, intermData.getClass()); } - return ret; + return (Object[]) intermData[0]; } - private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { - Object[] intermData = data; - for (int i = sliceToUse.size() - 1; i >= 0; --i) { - List slices = sliceToUse.get(i); - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); - int tmpSliceIdx = 0; - while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass().getComponentType(), newSliceSz); - System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); - newDataList[tmpSliceIdx] = reslicedArray; - ++tmpSliceIdx; - } - intermData = newDataList; + private Object[] resliceArray(Function dataAccessor, List slices, Class upperClass) { + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); + copyWithAccessor(dataAccessor, slice.getKey(), reslicedArray, 0, newSliceSz); + + newDataList[tmpSliceIdx] = reslicedArray; + ++tmpSliceIdx; } - return (Object[]) intermData[0]; + return newDataList; + } + + private void copyWithAccessor(Function srcAccessor, int srcPos, Object[] dest, int destPos, int length) { + for (int remaining = length; remaining > 0; --remaining) { + dest[destPos] = srcAccessor.apply(srcPos); + ++destPos; + ++srcPos; + } + } + + private Object[] resliceArray(Object[] dataElements, List slices, Class upperClass) { + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); + System.arraycopy(dataElements, slice.getKey(), reslicedArray, 0, newSliceSz); + newDataList[tmpSliceIdx] = reslicedArray; + ++tmpSliceIdx; + } + return newDataList; } private void readAsPerRowSlices(ClickhouseStreamDataSource in) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index f15a3a3203..b686647713 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -57,6 +57,9 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { itemsArray = readItems(in); + if (itemsArray == null) { + return null; + } return asObjectsArray(desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 60e68491c1..be3e617712 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -15,6 +15,7 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null), ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null) }; + public static final Object[] EMPTY_ARRAY = new Object[0]; private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; @@ -86,6 +87,7 @@ protected void readData(ClickhouseStreamDataSource in) { keysColumn = uintColumn(keyType).reader(nRows); } keysColumn.readColumn(in); + itemsArray = EMPTY_ARRAY; } //called by Array column @@ -93,8 +95,11 @@ protected void readData(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (isPartial()) { readData(in); + if (isPartial()) { + return null; + } } - return null; + return itemsArray; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 33a77c9c87..d9fc77c7f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,14 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; - import java.lang.ref.SoftReference; import java.util.function.Supplier; public class StringCache { - private static final Logger LOG = LoggerFactory.getLogger(StringCache.class); - private final int nElements; private SoftReference stringCache; @@ -25,15 +20,11 @@ public String get(int rowIdx, Supplier supplier) { stringCache = new SoftReference<>(cache); ret = supplier.get(); cache[rowIdx] = ret; - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } else { ret = cache[rowIdx]; if (ret == null) { ret = supplier.get(); cache[rowIdx] = ret; - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); - } else { - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } } return ret; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index caf229cf07..13f7b113b3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,6 +15,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { + //TODO: maybe read elements if we have enough data (> ELEMENT_SIZE) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { From da9062cc4998d0d46dfc9e4fba21818db4930c6b Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 9 Apr 2021 22:23:07 +0300 Subject: [PATCH 061/176] use less reflection for empty arrays Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumn.java | 15 ++++++--------- .../impl/codec/columns/ArrayColumnReader.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 1 + .../impl/codec/columns/DateColumn.java | 5 +++++ .../impl/codec/columns/DateColumnReader.java | 2 ++ .../impl/codec/columns/DateTime64Column.java | 9 ++++++++- .../impl/codec/columns/DateTimeColumn.java | 9 ++++++++- .../impl/codec/columns/Decimal128Column.java | 7 +++++++ .../impl/codec/columns/Decimal256Column.java | 5 +++++ .../impl/codec/columns/Decimal32Column.java | 5 +++++ .../impl/codec/columns/Decimal64Column.java | 5 +++++ .../impl/codec/columns/FixedStringColumn.java | 7 ++++++- .../impl/codec/columns/Float32Column.java | 10 +++++++++- .../impl/codec/columns/Float64Column.java | 10 +++++++++- .../impl/codec/columns/IPv4Column.java | 7 +++++++ .../impl/codec/columns/IPv6Column.java | 8 ++++++++ .../impl/codec/columns/Int128Column.java | 8 ++++++++ .../impl/codec/columns/IntervalColumn.java | 10 +++++++++- .../impl/codec/columns/LowCardinalityColumn.java | 15 +++++++++------ .../impl/codec/columns/StringColumn.java | 10 ++++++++-- .../impl/codec/columns/UInt16Column.java | 12 ++++++++++++ .../impl/codec/columns/UInt32Column.java | 10 ++++++++++ .../impl/codec/columns/UInt64Column.java | 10 ++++++++++ .../impl/codec/columns/UInt8Column.java | 11 +++++++++++ .../impl/codec/columns/UUIDColumn.java | 8 ++++++++ 25 files changed, 177 insertions(+), 24 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index b7b98f033b..9719769cfa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -14,15 +14,7 @@ public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNative this.md = md; } - private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; - } - - @Override + @Override public ClickhouseColumnReader reader(int nRows) { return new ArrayColumnReader(nRows, descriptor, md); } @@ -36,4 +28,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { throw new IllegalArgumentException("arrays are not nullable"); } + + @Override + public Object[] emptyArray() { + throw new IllegalArgumentException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 62fbf56d02..fb2297c4f4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -96,7 +96,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { return resliceIntoArray(tmp, masterSlice, elementClass); } - Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); + Object[] emptyData = nestedColumn.emptyArray(); if (maybeRequiresExtraEncoding) { return emptyData; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 55089b7591..51300e05e0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -17,4 +17,5 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); public abstract Object nullValue(); + public abstract Object[] emptyArray(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 77161c5996..f3da896429 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -24,4 +24,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return DateColumnReader.MIN_VALUE; } + + @Override + public Object[] emptyArray() { + return DateColumnReader.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index cd26e98987..51286a312a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -5,6 +5,8 @@ import java.time.LocalDate; public class DateColumnReader extends UInt16ColumnReader { + public static final LocalDate[] EMPTY_ARRAY = new LocalDate[0]; + public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 41e9e6aa34..36b842c7f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -9,6 +9,8 @@ public class DateTime64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; + public static final Instant ZERO_INSTANT = Instant.EPOCH; + public static final Instant[] EMPTY_ARRAY = new Instant[0]; private final Integer precision; private final ZoneId zoneId; @@ -33,6 +35,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + return ZERO_INSTANT.atZone(zoneId).toOffsetDateTime(); + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index e31c2f49b5..a59fa805b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -9,13 +9,15 @@ import java.util.List; public class DateTimeColumn extends ClickhouseColumn { + public static final OffsetDateTime[] EMPTY_ARRAY = new OffsetDateTime[0]; + private final ZoneId zoneId; private final OffsetDateTime nullValue; public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; - this.nullValue = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + this.nullValue = Instant.EPOCH.atZone(zoneId).toOffsetDateTime(); } @Override @@ -32,4 +34,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return nullValue; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 266af50f42..0df3a50072 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -11,6 +11,8 @@ import java.util.List; public class Decimal128Column extends ClickhouseColumn { + public static final Numeric[] EMPTY_ARRAY = new Numeric[0]; + public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); @@ -35,4 +37,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 9f01dac6aa..6ec5c8281a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -36,4 +36,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index bf8a91b863..86b0cf5984 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -36,4 +36,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 53f57bc9c5..2a69bbb98e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -35,4 +35,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 7f692bb474..e43ba3cf3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -28,6 +28,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return StringColumn.EMPTY; + return StringColumn.ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return StringColumn.EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index df9e957637..85ab677398 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -6,6 +6,9 @@ import java.util.List; public class Float32Column extends ClickhouseColumn { + public static final Float[] EMPTY_FLOAT_ARRAY = new Float[0]; + public static final Float ZERO_VALUE = 0.0f; + public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -22,6 +25,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return 0.0f; + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_FLOAT_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index db3846812a..4a01a5a650 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -6,6 +6,9 @@ import java.util.List; public class Float64Column extends ClickhouseColumn { + public static final Double[] EMPTY_FLOAT_ARRAY = new Double[0]; + public static final Double ZERO_DOUBLE = 0d; + public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -21,6 +24,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { } public Object nullValue() { - return (double)0; + return ZERO_DOUBLE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_FLOAT_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index d06ae238a1..7e2fdaa3b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -10,6 +10,8 @@ public class IPv4Column extends UInt32Column { public static final int ELEMENT_SIZE = 4; + public static final Inet4Address[] EMPTY_ARRAY = new Inet4Address[0]; + public static final Inet4Address ZERO_VALUE = ipv4(new byte[]{0, 0, 0, 0}); public static final Inet4Address MAX_VALUE = ipv4(new byte[]{Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE}); public static final Inet4Address MIN_VALUE = ipv4(new byte[]{Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE}); @@ -40,4 +42,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 8238e472cc..8d0ba48b8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -10,6 +10,8 @@ public class IPv6Column extends FixedStringColumn { public static final int ELEMENT_SIZE = 16; + public static final Inet6Address EMPTY_ARRAY[] = new Inet6Address[0]; + public static final Inet6Address ZERO_VALUE = ipv6(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); public static final Inet6Address MIN_VALUE = ipv6(new byte[]{ Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, @@ -46,7 +48,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + @Override public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 1e1387b73a..5b4bd47145 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -8,6 +8,8 @@ public class Int128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; + public static final BigInteger[] EMPTY_ARRAY = new BigInteger[0]; + public static final BigInteger ZERO_VALUE = new BigInteger(new byte[ELEMENT_SIZE]); public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); @@ -26,7 +28,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Int128ColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index e8c7c68727..84735f3e75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -7,6 +7,9 @@ import java.util.List; public class IntervalColumn extends ClickhouseColumn { + public static final Duration[] EMPTY_ARRAY = new Duration[0]; + + public static final Duration ZERO_VALUE = Duration.ZERO; private final Duration multiplier; public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { @@ -26,6 +29,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return multiplier.multipliedBy(0); + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 123572f506..4d232b29a5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -7,12 +7,14 @@ import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { + private final ClickhouseColumn nested; private final ClickhouseNativeDatabaseMetadata md; - private Object nullValue; public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; + ClickhouseNativeColumnDescriptor tmp = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); + nested = ClickhouseColumns.columnForSpec(tmp, md); } @Override @@ -27,10 +29,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - if (nullValue == null) { - ClickhouseNativeColumnDescriptor nested = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); - nullValue = ClickhouseColumns.columnForSpec(nested, md).nullValue(); - } - return nullValue; + return nested.nullValue(); + } + + @Override + public Object[] emptyArray() { + return nested.emptyArray(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a189e13bcc..84d6638225 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -7,7 +7,8 @@ import java.util.List; public class StringColumn extends ClickhouseColumn { - public static final byte[] EMPTY = new byte[0]; + public static final byte[][] EMPTY_ARRAY = new byte[0][]; + public static final byte[] ZERO_VALUE = new byte[0]; private final boolean enableStringCache; private final ClickhouseNativeDatabaseMetadata md; @@ -29,6 +30,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return EMPTY; + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index b294dbdc46..2d8c55fc4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -6,6 +6,9 @@ import java.util.List; public class UInt16Column extends ClickhouseColumn { + public static final Integer[] EMPTY_INT_ARRAY = new Integer[0]; + public static final Short[] EMPTY_SHORT_ARRAY = new Short[0]; + public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -28,4 +31,13 @@ public Object nullValue() { return (short) 0; } } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_INT_ARRAY; + } else { + return EMPTY_SHORT_ARRAY; + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index d99c183eb1..408ec87564 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -6,6 +6,8 @@ import java.util.List; public class UInt32Column extends ClickhouseColumn { + public static final Long[] EMPTY_LONG_ARRAY = new Long[0]; + public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -27,4 +29,12 @@ public Object nullValue() { } return 0; } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_LONG_ARRAY; + } + return UInt16Column.EMPTY_INT_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index ec2728757f..e4dce6a41d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -8,6 +8,7 @@ import java.util.List; public class UInt64Column extends ClickhouseColumn { + public static final Numeric[] EMPTY_NUMERIC_ARRAY = new Numeric[0]; public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { @@ -24,10 +25,19 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt64ColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { if (descriptor.isUnsigned()) { return UINT64_MIN; } return 0L; } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_NUMERIC_ARRAY; + } + return UInt32Column.EMPTY_LONG_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index aed243495e..cd4a682756 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -6,6 +6,8 @@ import java.util.List; public class UInt8Column extends ClickhouseColumn { + public static final Byte[] EMPTY_BYTE_ARRAY = new Byte[0]; + public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -28,4 +30,13 @@ public Object nullValue() { return (byte) 0; } } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return UInt16Column.EMPTY_SHORT_ARRAY; + } else { + return EMPTY_BYTE_ARRAY; + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 8e661638b1..ccfa171dea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -7,6 +7,8 @@ import java.util.UUID; public class UUIDColumn extends ClickhouseColumn { + public static final UUID[] EMPTY_UUID_ARRAY = new UUID[0]; + public static final UUID ZERO_UUID = new UUID(0, 0); public static final int ELEMENT_SIZE = 16; @@ -24,7 +26,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UUIDColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { return ZERO_UUID; } + + @Override + public Object[] emptyArray() { + return EMPTY_UUID_ARRAY; + } } From 831b3a16fcfdd7ae10994f5d483933d9dcc09178 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 00:15:27 +0300 Subject: [PATCH 062/176] added more LowCardinality checks, fixed TODOs Signed-off-by: vladimir --- .../impl/RowOrientedBlock.java | 2 +- .../codec/Lz4ClickhouseStreamDataSource.java | 23 +++++++-------- .../impl/codec/PacketForge.java | 4 +-- .../impl/codec/columns/ArrayColumnReader.java | 2 +- .../impl/codec/columns/ClickhouseColumns.java | 12 ++++---- .../codec/columns/LowCardinalityColumn.java | 13 +++++---- .../columns/LowCardinalityColumnReader.java | 4 +-- .../codec/columns/UInt64ColumnReader.java | 2 +- .../StringArrayDeduplicationTester.java | 28 +++++++++++-------- 9 files changed, 50 insertions(+), 40 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 0e5d622f44..448b7f1447 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -45,7 +45,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //n_rows int nRows = toRow - fromRow; sink.writeULeb128(nRows); - //TODO smagellan: maybe serialize into tiny sinks/blocks here, then return to caller + //TODO: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 5bf1988c4b..cba9e7b2f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -15,14 +15,16 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSource.class); + //compression method byte + sizeWithHeader + decompressed size + public static final int CHECKSUMED_HEADER_LENGTH = 1 + 4 + 4; //cityhash size + compression method byte + sizeWithHeader + decompressed size - public static final int MIN_BLOCK_PREFIX = 16 + 1 + 4 + 4; + public static final int HEADER_LENGTH = 16 + CHECKSUMED_HEADER_LENGTH; + private final LZ4Factory lz4Factory; private final ByteBuf decompressedData; private long[] serverCityHash; private Long sizeWithHeader; - private Long compressedAndSizeSize; private Long uncompressedSize; private ByteBuf arrayBb; @@ -34,10 +36,10 @@ public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator all @Override public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (serverCityHash == null) { - if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { + if (buf.readableBytes() >= HEADER_LENGTH) { serverCityHash = new long[2]; dumpHeader(buf); - LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); @@ -55,7 +57,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (sizeWithHeader > Integer.MAX_VALUE) { throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); } - compressedAndSizeSize = sizeWithHeader - 1 - 4; + long compressedAndSizeSize = sizeWithHeader - 1 - 4; uncompressedSize = buf.readUnsignedIntLE(); if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); @@ -64,14 +66,14 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); arrayBb = alloc.buffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); - buf.readBytes(arrayBb, 1 + 4 + 4); + buf.readBytes(arrayBb, CHECKSUMED_HEADER_LENGTH); } } if (uncompressedSize == null) { return; } - //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) - int compressedDataSize = compressedAndSizeSize.intValue() - 4; + + int compressedDataSize = sizeWithHeader.intValue() - CHECKSUMED_HEADER_LENGTH; if (buf.readableBytes() < compressedDataSize) { //NB: fragmented read return; @@ -80,13 +82,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { buf.readBytes(arrayBb); long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size - arrayBb.readerIndex(1 + 4 + 4); + arrayBb.readerIndex(CHECKSUMED_HEADER_LENGTH); if (!Arrays.equals(serverCityHash, oursCityHash)) { LOG.error("cityhash mismatch"); LOG.error("all available data: " + ByteBufUtil.hexDump(buf, 0, buf.readerIndex() + buf.readableBytes())); LOG.error("data from reader index(" + buf.readerIndex() + "): " + ByteBufUtil.hexDump(buf)); - LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); + LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - CHECKSUMED_HEADER_LENGTH, sizeWithHeader.intValue())); LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(hex(serverCityHash)) + "; ours: " + @@ -102,7 +104,6 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.release(); serverCityHash = null; sizeWithHeader = null; - compressedAndSizeSize = null; uncompressedSize = null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 573fd0b150..bc715af22c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -54,7 +54,7 @@ public void writeSettings(Map settings, boolean settingsAsString } } } else { - //TODO smagellan + //TODO: implement (required for old clickhouse versions) throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); } //end of settings @@ -64,7 +64,7 @@ public void writeSettings(Map settings, boolean settingsAsString public void sendExternalTables(ByteBuf buf, Collection blocks) { ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { - //TODO smagellan + //TODO implement external tables support sendData(buf, block, null); } sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index fb2297c4f4..24914f513e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -4,7 +4,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import java.lang.reflect.Array; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; @@ -93,6 +92,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } resliced = true; Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); + nestedColumnReader.itemsArray = null; return resliceIntoArray(tmp, masterSlice, elementClass); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index a4ec839424..0bac601e0c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -106,12 +106,12 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int bytesLength = Integer.parseInt(lengthStr); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); - } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, - spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); - } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { + } else if (spec.startsWith("DateTime64")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.startsWith("DateTime")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); @@ -159,8 +159,10 @@ private static int decimalSize(int precision) { return Decimal64Column.ELEMENT_SIZE; } else if (precision <= Decimal128Column.MAX_PRECISION) { return Decimal128Column.ELEMENT_SIZE; - } else { + } else if (precision <= Decimal256Column.MAX_PRECISION ){ return Decimal256Column.ELEMENT_SIZE; + } else { + throw new IllegalArgumentException("precision is too large: " + precision); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 4d232b29a5..6faf441029 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -7,19 +7,20 @@ import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - private final ClickhouseColumn nested; + private final ClickhouseNativeColumnDescriptor indexDescriptor; + private final ClickhouseColumn indexColumn; private final ClickhouseNativeDatabaseMetadata md; public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; - ClickhouseNativeColumnDescriptor tmp = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); - nested = ClickhouseColumns.columnForSpec(tmp, md); + this.indexDescriptor = descriptor.copyWithModifiers(false, false); + this.indexColumn = ClickhouseColumns.columnForSpec(indexDescriptor, md); } @Override public ClickhouseColumnReader reader(int nRows) { - return new LowCardinalityColumnReader(nRows, descriptor, md); + return new LowCardinalityColumnReader(nRows, descriptor, indexDescriptor, md); } @Override @@ -29,11 +30,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return nested.nullValue(); + return indexColumn.nullValue(); } @Override public Object[] emptyArray() { - return nested.emptyArray(); + return indexColumn.emptyArray(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index be3e617712..87131f0efd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -27,9 +27,9 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { private ClickhouseColumnReader keysColumn; - public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexColumn, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); - this.indexDescr = descr.copyWithModifiers(false, false); + this.indexDescr = indexColumn; this.md = md; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 13f7b113b3..c0e4f879ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,7 +15,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { - //TODO: maybe read elements if we have enough data (> ELEMENT_SIZE) + //TODO: maybe read elements as soon as they arrive if we have enough data (> ELEMENT_SIZE) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index dcbb7c5104..0944ec554b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -24,22 +24,28 @@ public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseN public void test(TestContext ctx) { List batch = Arrays.asList( - Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), - Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), - Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) + Tuple.of(1, "dedup", (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), + Tuple.of(2, "val", (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), + Tuple.of(3, "dedup", (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) ); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { - conn.query("SELECT nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_lc_t, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { + conn.query("SELECT nullable_lc_t, nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); RowIterator rows = res3.iterator(); - String[][][] r1 = rows.next().get(String[][][].class, 0); - String[][][] r2 = rows.next().get(String[][][].class, 0); - String[][][] r3 = rows.next().get(String[][][].class, 0); - ctx.assertTrue(r1[0][0][3] == r3[0][2][0]);//dedup3 - ctx.assertTrue(r1[0][0][4] == r2[0][1][1]);//dedup1 - ctx.assertTrue(r1[1][1][1] == r2[0][0][3]);//dedup2 + Row row1 = rows.next(); + Row row2 = rows.next(); + Row row3 = rows.next(); + String val1 = row1.getString(0); + String val2 = row3.getString(0); + ctx.assertTrue(val1 == val2); + String[][][] arr1 = row1.get(String[][][].class, 1); + String[][][] arr2 = row2.get(String[][][].class, 1); + String[][][] arr3 = row3.get(String[][][].class, 1); + ctx.assertTrue(arr1[0][0][3] == arr3[0][2][0]);//dedup3 + ctx.assertTrue(arr1[0][0][4] == arr2[0][1][1]);//dedup1 + ctx.assertTrue(arr1[1][1][1] == arr2[0][0][3]);//dedup2 })); })); })); From ce4fdf0d3b49ac61348a639307e193b8cd494590 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 01:31:28 +0300 Subject: [PATCH 063/176] moved INSERT info extraction into QueryInfo Signed-off-by: vladimir --- .../impl/codec/ClickhouseNativeEncoder.java | 16 +++-- .../ClickhouseNativePreparedStatement.java | 10 ++-- .../impl/codec/ExtendedQueryCommandCodec.java | 6 +- .../impl/codec/PrepareStatementCodec.java | 42 ++++--------- .../impl/codec/QueryInfo.java | 60 +++++++++++++++++++ .../impl/codec/QueryParsers.java | 11 ++++ .../impl/codec/SimpleQueryCommandCodec.java | 8 +-- 7 files changed, 103 insertions(+), 50 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index d37e74af9b..1e617795c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -9,7 +9,6 @@ import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; -import java.util.Map; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); @@ -74,22 +73,21 @@ void write(CommandBase cmd) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { PrepareStatementCommand ps = (PrepareStatementCommand) cmd; - Map.Entry queryType = QueryParsers.findKeyWord(ps.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); - return new PrepareStatementCodec(ps, queryType); + QueryInfo queryInfo = QueryInfo.parse(ps.sql()); + return new PrepareStatementCodec(ps, queryInfo); } else if (cmd instanceof ExtendedQueryCommand) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; - Map.Entry queryType; + QueryInfo queryInfo; if (ecmd.preparedStatement() != null) { - queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); + queryInfo = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryInfo(); } else { - queryType = QueryParsers.findKeyWord(ecmd.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); + queryInfo = QueryInfo.parse(ecmd.sql()); } - if (queryType != null && !"insert".equalsIgnoreCase(queryType.getKey()) && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + if (queryInfo != null && !queryInfo.isInsert() && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); deliverError(cmd, ex); - throw ex; } - return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); + return new ExtendedQueryCommandCodec<>(queryInfo, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } else if (cmd instanceof CloseStatementCommand) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index fe8b325844..30a29599fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -13,16 +13,16 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; - private final Map.Entry queryType; + private final QueryInfo queryInfo; private final boolean sentQuery; private final UUID psId; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - Map.Entry queryType, boolean sentQuery, UUID psId) { + QueryInfo queryInfo, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; - this.queryType = queryType; + this.queryInfo = queryInfo; this.sentQuery = sentQuery; this.psId = psId; } @@ -47,8 +47,8 @@ public String prepare(TupleInternal values) { return null; } - public Map.Entry queryType() { - return queryType; + public QueryInfo queryInfo() { + return queryInfo; } public boolean isSentQuery() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 9c22429196..7433997457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -23,14 +23,14 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(Map.Entry queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); + public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(queryInfo, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - if ((queryType != null && !"insert".equalsIgnoreCase(queryType.getKey())) || !ecmd.isBatch()) { + if ((queryInfo != null && !queryInfo.isInsert()) || !ecmd.isBatch()) { return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } return ecmd.sql(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 29f5e8c3f6..ac8dab04e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -3,24 +3,25 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; -public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ - private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); - private final Map.Entry queryType; +public class PrepareStatementCodec extends ClickhouseNativeCommandCodec { + private final QueryInfo queryInfo; private final UUID psId; private PacketReader packetReader; - protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { + protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryInfo queryInfo) { super(cmd); - this.queryType = queryType; + this.queryInfo = queryInfo; this.psId = UUID.randomUUID(); } @@ -28,14 +29,10 @@ protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry pos = QueryParsers.findKeyWord(sql, fromPos, Collections.singleton("$")); - if (pos == null) { - return -1; - } - return sqlLoCase.lastIndexOf("values", pos.getValue()); - } - @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { @@ -81,7 +65,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { List columnTypes = new ArrayList<>(data.values()); ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true, psId))); + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java new file mode 100644 index 0000000000..e3246d9607 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import java.util.Map; + +public class QueryInfo { + public static final int VALUES_LENGTH = "values".length(); + + private final String typeKeyword; + private final Integer typeKeywordPos; + private final boolean isInsert; + private final String queryEndingWithValues; + + QueryInfo(String sql, String typeKeyword, Integer typeKeywordPos) { + this.typeKeyword = typeKeyword; + this.typeKeywordPos = typeKeywordPos; + this.isInsert = "insert".equalsIgnoreCase(typeKeyword); + this.queryEndingWithValues = isInsert ? findValuesAndTruncate(sql, typeKeywordPos) : null; + } + + public String typeKeyword() { + return typeKeyword; + } + + public Integer typeKeywordPos() { + return typeKeywordPos; + } + + public boolean isInsert() { + return isInsert; + } + + public boolean hasValues() { + return queryEndingWithValues != null; + } + + public String queryEndingWithValues() { + return queryEndingWithValues; + } + + private String findValuesAndTruncate(String sql, int typeKeywordPos) { + String loCaseSql = sql.toLowerCase(); + boolean endsWithVals = loCaseSql.endsWith("values"); + if (endsWithVals) { + return sql; + } else { + //TODO: make sure there are placeholders only, maybe count placeholders count + int valuesIndex = QueryParsers.valuesPosForLoCaseSql(loCaseSql, typeKeywordPos); + if (valuesIndex != -1) { + return sql.substring(0, valuesIndex + VALUES_LENGTH); + } else { + return null; + } + } + } + + public static QueryInfo parse(String query) { + Map.Entry qInfo = QueryParsers.findKeyWord(query, QueryParsers.SELECT_AND_MUTATE_KEYWORDS); + return new QueryInfo(query, qInfo == null ? null : qInfo.getKey(), qInfo == null ? null : qInfo.getValue()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 2405619bd2..8a716d63ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -172,4 +172,15 @@ private static Number byteOrShort(int number, boolean isByte) { } return (short) number; } + + static int valuesPosForLoCaseSql(String sqlLoCase, int fromPos) { + if (sqlLoCase.endsWith("values")) { + return sqlLoCase.length() - "values".length(); + } + Map.Entry pos = findKeyWord(sqlLoCase, fromPos, Collections.singleton("$")); + if (pos == null) { + return -1; + } + return sqlLoCase.lastIndexOf("values", pos.getValue()); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index f583e09bdf..db4a41bf2a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -14,7 +14,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; - protected final Map.Entry queryType; + protected final QueryInfo queryInfo; protected final int batchSize; private RowResultDecoder rowResultDecoder; @@ -25,9 +25,9 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(Map.Entry queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); - this.queryType = queryType; + this.queryInfo = queryInfo; this.batchSize = batchSize; this.conn = conn; this.commandRequiresUpdatesDelivery = requireUpdatesDelivery; @@ -117,7 +117,7 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { - if (queryType != null && "insert".equalsIgnoreCase(queryType.getKey())) { + if (queryInfo != null && queryInfo.isInsert()) { rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); From 0643b1f9988de6688526712c09a3a9977aa64696 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 10:26:37 +0300 Subject: [PATCH 064/176] added NestedExceptionsTest Signed-off-by: vladimir --- .../impl/ClickhouseServerException.java | 19 +- .../impl/codec/ClickhouseExceptionReader.java | 93 ++++-- .../clickhouse/util/ClickHouseCityHash.java | 274 ++++++++++++++++++ .../NestedExceptionsTest.java | 41 +++ .../PacketReaderReplayTest.java | 21 +- .../clickhousenativeclient/PacketUtil.java | 23 ++ .../resources/forged_nested_exception.yaml | 30 ++ 7 files changed, 457 insertions(+), 44 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 0b497d830b..16273d24c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -6,14 +6,29 @@ public class ClickhouseServerException extends RuntimeException { private final String message; private final String stacktrace; - public ClickhouseServerException(Integer code, String name, String message, String stacktrace, boolean hasNested) { - super(message); + private ClickhouseServerException(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause, boolean unused) { + super(message, cause, false, true); this.code = code; this.name = name; this.message = message; this.stacktrace = stacktrace; } + private ClickhouseServerException(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause) { + super(message, cause, false, false); + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public static ClickhouseServerException build(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause, boolean first) { + if (first) { + return new ClickhouseServerException(code, name, message, stacktrace, cause, first); + } + return new ClickhouseServerException(code, name, message, stacktrace, cause); + } + public int getCode() { return code; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 8ee99cf2c2..4b67457e49 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -3,47 +3,90 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import java.util.ArrayList; +import java.util.List; + public class ClickhouseExceptionReader { + private final List exceptionBlocks = new ArrayList<>(); + private Integer code; private String name; private String message; private String stacktrace; private Boolean hasNested; + public ClickhouseServerException readFrom(ByteBuf in) { - if (code == null) { - if (in.readableBytes() >= 4) { - code = in.readIntLE(); - } else { - return null; + boolean hadNested; + do { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return null; + } } - } - if (name == null) { - name = ByteBufUtils.readPascalString(in); if (name == null) { - return null; + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return null; + } } - } - if (message == null) { - message = ByteBufUtils.readPascalString(in); if (message == null) { - return null; + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return null; + } } - } - if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); if (stacktrace == null) { - return null; + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return null; + } } - } - if (hasNested == null) { - if (in.readableBytes() >= 1) { - hasNested = in.readByte() != 0; - } else { - return null; + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readBoolean(); + } else { + return null; + } } + hadNested = hasNested; + ExceptionBlock tmp = new ExceptionBlock(code, name, message, stacktrace, hasNested); + code = null; + name = null; + message = null; + stacktrace = null; + hasNested = null; + exceptionBlocks.add(tmp); + } while (hadNested); + + boolean isFirst = exceptionBlocks.size() == 1; + ClickhouseServerException prevException = exceptionBlocks.get(exceptionBlocks.size() - 1).toException(null, isFirst); + if (!isFirst) { + for (int idx = exceptionBlocks.size() - 2; idx >= 0; --idx) { + isFirst = idx == 0; + prevException = exceptionBlocks.get(idx).toException(prevException, isFirst); + } + } + return prevException; + } + + private static class ExceptionBlock { + private final Integer code; + private final String name; + private final String message; + private final String stacktrace; + + private ExceptionBlock(Integer code, String name, String message, String stacktrace, Boolean hasNested) { + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public ClickhouseServerException toException(ClickhouseServerException cause, boolean first) { + return ClickhouseServerException.build(code, name, message, stacktrace, cause, first); } - //TODO smagellan: read nested exception - return new ClickhouseServerException(code, name, message, stacktrace, hasNested); } } diff --git a/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java b/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java new file mode 100644 index 0000000000..b509b11cb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java @@ -0,0 +1,274 @@ +/* + * Copyright 2017 YANDEX LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (C) 2012 tamtam180 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ru.yandex.clickhouse.util; + +/** + * @author tamtam180 - kirscheless at gmail.com + * @see http://google-opensource.blogspot.jp/2011/04/introducing-cityhash.html + * @see http://code.google.com/p/cityhash/ + * + */ + +/** + * NOTE: The code is modified to be compatible with CityHash128 used in ClickHouse + */ +public class ClickHouseCityHash { + + private static final long k0 = 0xc3a5c85c97cb3127L; + private static final long k1 = 0xb492b66fbe98f273L; + private static final long k2 = 0x9ae16a3b2f90404fL; + private static final long k3 = 0xc949d7c7509e6557L; + + private static long toLongLE(byte[] b, int i) { + return (((long)b[i+7] << 56) + + ((long)(b[i+6] & 255) << 48) + + ((long)(b[i+5] & 255) << 40) + + ((long)(b[i+4] & 255) << 32) + + ((long)(b[i+3] & 255) << 24) + + ((b[i+2] & 255) << 16) + + ((b[i+1] & 255) << 8) + + ((b[i+0] & 255) << 0)); + } + private static long toIntLE(byte[] b, int i) { + return (((b[i+3] & 255L) << 24) + ((b[i+2] & 255L) << 16) + ((b[i+1] & 255L) << 8) + ((b[i+0] & 255L) << 0)); + } + + private static long fetch64(byte[] s, int pos) { + return toLongLE(s, pos); + } + + private static long fetch32(byte[] s, int pos) { + return toIntLE(s, pos); + } + + private static int staticCastToInt(byte b) { + return b & 0xFF; + } + + private static long rotate(long val, int shift) { + return shift == 0 ? val : (val >>> shift) | (val << (64 - shift)); + } + + private static long rotateByAtLeast1(long val, int shift) { + return (val >>> shift) | (val << (64 - shift)); + } + + private static long shiftMix(long val) { + return val ^ (val >>> 47); + } + + private static final long kMul = 0x9ddfea08eb382d69L; + private static long hash128to64(long u, long v) { + long a = (u ^ v) * kMul; + a ^= (a >>> 47); + long b = (v ^ a) * kMul; + b ^= (b >>> 47); + b *= kMul; + return b; + } + + private static long hashLen16(long u, long v) { + return hash128to64(u, v); + } + + private static long hashLen0to16(byte[] s, int pos, int len) { + if (len > 8) { + long a = fetch64(s, pos + 0); + long b = fetch64(s, pos + len - 8); + return hashLen16(a, rotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + long a = fetch32(s, pos + 0); + return hashLen16((a << 3) + len, fetch32(s, pos + len - 4)); + } + if (len > 0) { + byte a = s[pos + 0]; + byte b = s[pos + (len >>> 1)]; + byte c = s[pos + len - 1]; + int y = staticCastToInt(a) + (staticCastToInt(b) << 8); + int z = len + (staticCastToInt(c) << 2); + return shiftMix(y * k2 ^ z * k3) * k2; + } + return k2; + } + + + private static long[] weakHashLen32WithSeeds( + long w, long x, long y, long z, + long a, long b) { + + a += w; + b = rotate(b + a + z, 21); + long c = a; + a += x; + a += y; + b += rotate(a, 44); + return new long[]{ a + z, b + c }; + } + + private static long[] weakHashLen32WithSeeds(byte[] s, int pos, long a, long b) { + return weakHashLen32WithSeeds( + fetch64(s, pos + 0), + fetch64(s, pos + 8), + fetch64(s, pos + 16), + fetch64(s, pos + 24), + a, + b + ); + } + + private static long[] cityMurmur(byte[] s, int pos, int len, long seed0, long seed1) { + + long a = seed0; + long b = seed1; + long c = 0; + long d = 0; + + int l = len - 16; + if (l <= 0) { + a = shiftMix(a * k1) * k1; + c = b * k1 + hashLen0to16(s, pos, len); + d = shiftMix(a + (len >= 8 ? fetch64(s, pos + 0) : c)); + } else { + + c = hashLen16(fetch64(s, pos + len - 8) + k1, a); + d = hashLen16(b + len, c + fetch64(s, pos + len - 16)); + a += d; + + do { + a ^= shiftMix(fetch64(s, pos + 0) * k1) * k1; + a *= k1; + b ^= a; + c ^= shiftMix(fetch64(s, pos + 8) * k1) * k1; + c *= k1; + d ^= c; + pos += 16; + l -= 16; + } while (l > 0); + } + + a = hashLen16(a, c); + b = hashLen16(d, b); + + return new long[]{ a ^ b, hashLen16(b, a) }; + } + + private static long[] cityHash128WithSeed(byte[] s, int pos, int len, long seed0, long seed1) { + if (len < 128) { + return cityMurmur(s, pos, len, seed0, seed1); + } + + long[] v = new long[2], w = new long[2]; + long x = seed0; + long y = seed1; + long z = k1 * len; + v[0] = rotate(y ^ k1, 49) * k1 + fetch64(s, pos); + v[1] = rotate(v[0], 42) * k1 + fetch64(s, pos + 8); + w[0] = rotate(y + z, 35) * k1 + x; + w[1] = rotate(x + fetch64(s, pos + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = rotate(x + y + v[0] + fetch64(s, pos + 16), 37) * k1; + y = rotate(y + v[1] + fetch64(s, pos + 48), 42) * k1; + + x ^= w[1]; + y ^= v[0] ; + + z = rotate(z ^ w[0], 33); + v = weakHashLen32WithSeeds(s, pos, v[1] * k1, x + w[0]); + w = weakHashLen32WithSeeds(s, pos + 32, z + w[1], y); + + { long swap = z; z = x; x = swap; } + pos += 64; + x = rotate(x + y + v[0] + fetch64(s, pos + 16), 37) * k1; + y = rotate(y + v[1] + fetch64(s, pos + 48), 42) * k1; + x ^= w[1]; + y ^= v[0]; + z = rotate(z ^ w[0], 33); + v = weakHashLen32WithSeeds(s, pos, v[1] * k1, x + w[0]); + w = weakHashLen32WithSeeds(s, pos + 32, z + w[1], y); + { long swap = z; z = x; x = swap; } + pos += 64; + len -= 128; + } while (len >= 128); + + y += rotate(w[0], 37) * k0 + z; + x += rotate(v[0] + z, 49) * k0; + + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (int tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = rotate(y - x, 42) * k0 + v[1]; + w[0] += fetch64(s, pos + len - tail_done + 16); + x = rotate(x, 49) * k0 + w[0]; + w[0] += v[0]; + v = weakHashLen32WithSeeds(s, pos + len - tail_done, v[0], v[1]); + } + + // At this point our 48 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 48-byte-to-8-byte hashes to get a 16-byte final result. + + x = hashLen16(x, v[0]); + y = hashLen16(y, w[0]); + + return new long[]{ + hashLen16(x + v[1], w[1]) + y, + hashLen16(x + w[1], y + v[1]) + }; + } + + + //TODO: switch to external jar, see https://github.com/ClickHouse/clickhouse-jdbc/issues/600 + public static long[] cityHash128(byte[] s, int pos, int len) { + + if (len >= 16) { + return cityHash128WithSeed( + s, pos + 16, + len - 16, + fetch64(s, pos) ^ k3, + fetch64(s, pos + 8) + ); + } else if (len >= 8) { + return cityHash128WithSeed( + new byte[0], 0, 0, + fetch64(s, pos ) ^ (len * k0), + fetch64(s, pos + len -8) ^ k1 + ); + } else { + return cityHash128WithSeed(s, pos, len, k0, k1); + } + } + +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java new file mode 100644 index 0000000000..7eea72ecaf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -0,0 +1,41 @@ +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import org.junit.Assert; + +public class NestedExceptionsTest { + @Test + public void checkExceptions() throws IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + ByteBuf buf; + try (InputStream is = NestedExceptionsTest.class.getResourceAsStream("/forged_nested_exception.yaml")) { + Map map = mapper.readValue(is, Map.class); + List queryAnswers = PacketUtil.filterServerBlocks(map); + byte[][] arrays = PacketUtil.asPrimitiveByteArray(queryAnswers); + buf = Unpooled.wrappedBuffer(arrays); + } + + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + PacketReader rdr = new PacketReader(null, "none", Collections.emptyMap(), null); + ClickhouseServerException exception = (ClickhouseServerException)rdr.receivePacket(allocator, buf); + Assert.assertEquals("DB::Exception", exception.getName()); + ClickhouseServerException nested = (ClickhouseServerException) exception.getCause(); + Assert.assertNotNull(nested); + Assert.assertEquals("DB::Dxception", nested.getName()); + Assert.assertNull(nested.getCause()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 53eda45627..9df9d02072 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.io.InputStream; import java.util.*; -import java.util.stream.Collectors; @RunWith(Parameterized.class) public class PacketReaderReplayTest { @@ -57,12 +56,8 @@ public static Iterable dataForTest() throws IOException { try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); - List queryAnswers = map.entrySet() - .stream() - .filter(packet -> !packet.getKey().startsWith("peer0_")) - .map(Map.Entry::getValue) - .collect(Collectors.toList()); - byte[][] arrays = asPrimitiveByteArray(queryAnswers); + List queryAnswers = PacketUtil.filterServerBlocks(map); + byte[][] arrays = PacketUtil.asPrimitiveByteArray(queryAnswers); ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]) .writerIndex(0); @@ -96,11 +91,11 @@ public void doReplayTest() { String fullName = "Clickhouse jython-driver"; LOG.info("all bytes: " + ByteBufUtil.hexDump(buf)); while (buf.readableBytes() > 0) { - readConnIteraction(allocator, fullName); + readConnInteraction(allocator, fullName); } } - private void readConnIteraction(PooledByteBufAllocator allocator, String fullName) { + private void readConnInteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); @@ -121,12 +116,4 @@ private static Map buildProperties(boolean withCompression) { props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); return props; } - - private static byte[][] asPrimitiveByteArray(List src) { - byte[][] ret = new byte[src.size()][]; - for (int i = 0; i < src.size(); ++i) { - ret[i] = src.get(i); - } - return ret; - } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java new file mode 100644 index 0000000000..1b14fa83f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -0,0 +1,23 @@ +package io.vertx.clickhousenativeclient; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class PacketUtil { + public static List filterServerBlocks(Map map) { + return map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + } + + public static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml b/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml new file mode 100644 index 0000000000..21f4bdfc38 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml @@ -0,0 +1,30 @@ +# Packet 136 +peer0_0: !!binary | + AE1DbGlja0hvdXNlIENsaWNraG91c2VOYXRpdmVQcmVwYXJlZFF1ZXJ5Q2FjaGVkVGVzdC50ZXN0 + Q29ubmVjdEludmFsaWREYXRhYmFzZRQKqakDD2ludmFsaWREYXRhYmFzZQdkZWZhdWx0B2RlZmF1 + bHQ= +# Packet 138 +peer1_0: !!binary | + AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi + YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi + NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm + OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u + ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv + Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv + YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg + aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5 + KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl + YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3 + LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv + CgFRAAAADURCOjpEeGNlcHRpb243REI6OkV4Y2VwdGlvbjogRGF0YWJhc2UgYGludmFsaWREYXRh + YmFzZWAgZG9lc24ndCBleGlzdKcEMC4gREI6OlRDUEhhbmRsZXI6OnJ1bkltcGwoKSBAIDB4Zjhi + YjZkZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjEuIERCOjpUQ1BIYW5kbGVyOjpydW4oKSBAIDB4 + ZjhjYmVjOSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjIuIFBvY286Ok5ldDo6VENQU2VydmVyQ29u + bmVjdGlvbjo6c3RhcnQoKSBAIDB4MTFmODAxYWYgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQozLiBQ + b2NvOjpOZXQ6OlRDUFNlcnZlckRpc3BhdGNoZXI6OnJ1bigpIEAgMHgxMWY4MWJjMSBpbiAvdXNy + L2Jpbi9jbGlja2hvdXNlCjQuIFBvY286OlBvb2xlZFRocmVhZDo6cnVuKCkgQCAweDEyMGI4MmU5 + IGluIC91c3IvYmluL2NsaWNraG91c2UKNS4gUG9jbzo6VGhyZWFkSW1wbDo6cnVubmFibGVFbnRy + eSh2b2lkKikgQCAweDEyMGI0MTRhIGluIC91c3IvYmluL2NsaWNraG91c2UKNi4gc3RhcnRfdGhy + ZWFkIEAgMHg4ZWE3IGluIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJwdGhyZWFkLTIuMzEuc28K + Ny4gX19jbG9uZSBAIDB4ZmRkZWYgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMtMi4zMS5z + bwoA From ee306642c0d58e9b8c57945ab102febaefa9847c Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 11:28:02 +0300 Subject: [PATCH 065/176] replaced LOG.info with LOG.debug where needed Signed-off-by: vladimir --- .../clickhousenative/impl/BlockInfo.java | 13 +++++--- .../impl/codec/ClickhouseNativeEncoder.java | 4 ++- .../codec/CloseConnectionCommandCodec.java | 5 +-- .../impl/codec/ColumnOrientedBlockReader.java | 5 +-- .../impl/codec/ExtendedQueryCommandCodec.java | 4 ++- .../impl/codec/InitCommandCodec.java | 8 +++-- .../codec/Lz4ClickhouseStreamDataSource.java | 26 ++++++++++----- .../impl/codec/PacketForge.java | 8 +++-- .../impl/codec/PacketReader.java | 33 ++++++++++++++----- .../impl/codec/SimpleQueryCommandCodec.java | 19 +++++++---- 10 files changed, 88 insertions(+), 37 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 1e9f631acf..d918d704fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -47,8 +47,9 @@ public void readFrom(ClickhouseStreamDataSource in) { return; } } - - LOG.info("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); + if (LOG.isDebugEnabled()) { + LOG.debug("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); + } if (fieldNum == 0) { complete = true; return; @@ -57,7 +58,9 @@ public void readFrom(ClickhouseStreamDataSource in) { if (in.readableBytes() >= 1) { isOverflows = in.readBoolean(); fieldNum = null; - LOG.info("isOverflows: " + isOverflows); + if (LOG.isDebugEnabled()) { + LOG.debug("isOverflows: " + isOverflows); + } } else { return; } @@ -66,7 +69,9 @@ public void readFrom(ClickhouseStreamDataSource in) { if (readable >= 4) { bucketNum = in.readIntLE(); fieldNum = null; - LOG.info("bucketNum: " + bucketNum); + if (LOG.isDebugEnabled()) { + LOG.debug("bucketNum: " + bucketNum); + } } else { return; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 1e617795c0..0f1229905e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -53,7 +53,9 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) } void write(CommandBase cmd) { - LOG.info("got command: " + cmd.getClass()); + if (LOG.isDebugEnabled()) { + LOG.debug("got command: " + cmd.getClass()); + } ClickhouseNativeCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { ClickhouseNativeCommandCodec c = inflight.poll(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 1d3b4f5da1..335c294524 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -22,8 +22,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { @Override public void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); - LOG.info("closing channel"); - //encoder.chctx().channel().close(); + if (LOG.isDebugEnabled()) { + LOG.debug("closing channel"); + } ChannelHandlerContext ctx = encoder.chctx(); SocketChannel channel = (SocketChannel) ctx.channel(); ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(v -> channel.shutdownOutput()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index de4c92d39c..0cb1090b73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -91,8 +91,9 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { - LOG.info("reading column " + colName + "[" + nRows + "] of type " + colType); - + if (LOG.isDebugEnabled()) { + LOG.debug("reading column " + colName + "[" + nRows + "] of type " + colType); + } columnData.readColumn(in); if (columnData.isPartial()) { return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 7433997457..c561c85af9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -58,7 +58,9 @@ void encode(ClickhouseNativeEncoder encoder) { } forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); chctx.writeAndFlush(buf, chctx.voidPromise()); - LOG.info("sent columns"); + if (LOG.isDebugEnabled()) { + LOG.debug("sent columns"); + } } catch (Throwable t) { buf.release(); throw t; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6f10258d4b..19fc857f75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -37,7 +37,9 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBufUtils.writePascalString(cmd.username(), buf); ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); - LOG.info("sent hello packet "); + if (LOG.isDebugEnabled()) { + LOG.debug("sent hello packet "); + } } @Override @@ -50,7 +52,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; encoder.getConn().setDatabaseMetadata(md); - LOG.info("connected to server: " + md); + if (LOG.isDebugEnabled()) { + LOG.debug("connected to server: " + md); + } completionHandler.handle(CommandResponse.success(null)); } else if (packet.getClass() == ClickhouseServerException.class) { ClickhouseServerException exc = (ClickhouseServerException)packet; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index cba9e7b2f8..3982fa7bde 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -38,11 +38,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (serverCityHash == null) { if (buf.readableBytes() >= HEADER_LENGTH) { serverCityHash = new long[2]; - dumpHeader(buf); - LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + - "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); - LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + if (LOG.isDebugEnabled()) { + dumpHeader(buf); + LOG.debug(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); + LOG.debug("full dump: " + ByteBufUtil.hexDump(buf)); + } serverCityHash[0] = buf.readLongLE(); serverCityHash[1] = buf.readLongLE(); int checkSummedReaderIndex = buf.readerIndex(); @@ -62,8 +64,10 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); } - LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + if (LOG.isDebugEnabled()) { + LOG.debug(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + } arrayBb = alloc.buffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb, CHECKSUMED_HEADER_LENGTH); @@ -98,7 +102,9 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); //LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb)); decompressor.decompress(arrayBb.array(), arrayBb.arrayOffset() + arrayBb.readerIndex(), uncompressedBytes, 0, uncompressedBytes.length); - LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); + if (LOG.isDebugEnabled()) { + LOG.debug("decompressed " + uncompressedBytes.length + " bytes of data"); + } //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); decompressedData.writeBytes(uncompressedBytes); arrayBb.release(); @@ -113,7 +119,9 @@ private void dumpHeader(ByteBuf buf) { String method = ByteBufUtil.hexDump(buf, buf.readerIndex() + 16, 1); String sizeWithHeader = ByteBufUtil.hexDump(buf, buf.readerIndex() + 17, 4); String uncompressedSize = ByteBufUtil.hexDump(buf, buf.readerIndex() + 21, 4); - LOG.info(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + if (LOG.isDebugEnabled()) { + LOG.debug(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + } } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index bc715af22c..00dbf4b7bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -22,7 +22,9 @@ public PacketForge(ClickhouseNativeSocketConnection conn, ChannelHandlerContext } public void sendQuery(String query, ByteBuf buf) { - LOG.info("running query: " + query); + if (LOG.isDebugEnabled()) { + LOG.debug("running query: " + query); + } ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); //query id ByteBufUtils.writePascalString("", buf); @@ -47,7 +49,9 @@ public void writeSettings(Map settings, boolean settingsAsString if (settingsAsStrings) { for (Map.Entry entry : settings.entrySet()) { if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { - LOG.info("writing query setting: " + entry); + if (LOG.isDebugEnabled()) { + LOG.debug("writing query setting: " + entry); + } ByteBufUtils.writePascalString(entry.getKey(), buf); buf.writeBoolean(settingsAreImportant); ByteBufUtils.writePascalString(entry.getValue(), buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 5d489e331f..d902446fb6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -56,9 +56,12 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } try { packetType = ServerPacketType.fromCode(packetTypeCode); - LOG.info("packet type: " + packetType); + if (LOG.isDebugEnabled()) { + LOG.debug("packet type: " + packetType); + } } catch (IllegalArgumentException ex) { LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in), ex); + throw ex; } } @@ -71,7 +74,9 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } else if (packetType == ServerPacketType.PROGRESS) { return readProgressBlock(in); } else if (packetType == ServerPacketType.END_OF_STREAM) { - LOG.info("decoded: END_OF_STREAM"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: END_OF_STREAM"); + } packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { @@ -134,7 +139,9 @@ private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser TableColumns ret = null; if (block != null) { ret = new TableColumns(multistringMessage, block); - LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + } multistringReader = null; packetType = null; tableColumnsPacketReader = null; @@ -149,7 +156,9 @@ private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { - LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + } metadataReader = null; packetType = null; } @@ -162,7 +171,9 @@ private BlockStreamProfileInfo readProfileInfoBlock(ByteBuf in) { } BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); if (profileInfo != null) { - LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + } blockStreamProfileReader = null; packetType = null; } @@ -175,7 +186,9 @@ private QueryProgressInfo readProgressBlock(ByteBuf in) { } QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); if (queryProgressInfo != null) { - LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + } queryProgressInfoReader = null; packetType = null; } @@ -188,7 +201,9 @@ private ClickhouseServerException readExceptionBlock(ByteBuf in) { } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { - LOG.info("decoded: EXCEPTION/ClickhouseServerException"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: EXCEPTION/ClickhouseServerException"); + } exceptionReader = null; packetType = null; } @@ -216,7 +231,9 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { List colNames = new ArrayList<>(block.getColumnsWithTypes().keySet()); - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); + } columnBlockReader = null; packetType = null; ds.finish(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index db4a41bf2a..28a0d15809 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -69,7 +69,9 @@ protected void checkIfBusy() { @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - LOG.info("decode, readable bytes: " + in.readableBytes()); + if (LOG.isDebugEnabled()) { + LOG.debug("decode, readable bytes: " + in.readableBytes()); + } if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } @@ -77,7 +79,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; - LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); + } if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); @@ -89,11 +93,12 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { - String msg = "unknown packet type: " + packet.getClass(); - LOG.error(msg); + if (LOG.isDebugEnabled()) { + LOG.error("non-data packet type: " + packet.getClass()); + } if (packet instanceof Throwable) { Throwable t = (Throwable) packet; - LOG.error("unknown packet type", t); + LOG.error("unknown packet type or server exception", t); notifyOperationUpdate(false, t); } } @@ -114,7 +119,9 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); + if (LOG.isDebugEnabled()) { + LOG.debug("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); + } cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { if (queryInfo != null && queryInfo.isInsert()) { From da8e34c96c08365b884569416a53c822bafd0072 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 13:41:29 +0300 Subject: [PATCH 066/176] added copyright headers Signed-off-by: vladimir --- .../ClickhouseNativeConnectOptionsConverter.java | 13 +++++++++++++ .../src/main/java/examples/SqlClientExamples.java | 13 +++++++++++++ .../clickhousenative/ClickhouseConstants.java | 13 +++++++++++++ .../ClickhouseNativeConnectOptions.java | 13 +++++++++++++ .../ClickhouseNativeConnection.java | 13 +++++++++++++ .../clickhousenative/ClickhouseNativePool.java | 13 +++++++++++++ .../clickhousenative/impl/BaseBlock.java | 13 +++++++++++++ .../clickhousenative/impl/BlockInfo.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionFactory.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionUriParser.java | 13 +++++++++++++ .../impl/ClickhouseNativeDatabaseMetadata.java | 13 +++++++++++++ .../impl/ClickhouseNativePoolImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeRowDesc.java | 13 +++++++++++++ .../impl/ClickhouseNativeRowImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeSocketConnection.java | 13 +++++++++++++ .../impl/ClickhouseServerException.java | 13 +++++++++++++ .../clickhousenative/impl/ColumnOrientedBlock.java | 13 +++++++++++++ .../clickhousenative/impl/RowOrientedBlock.java | 13 +++++++++++++ .../impl/codec/BlockStreamProfileInfo.java | 13 +++++++++++++ .../impl/codec/BlockStreamProfileInfoReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/ByteBufUtils.java | 13 +++++++++++++ .../impl/codec/ClickhouseExceptionReader.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeCodec.java | 13 +++++++++++++ .../codec/ClickhouseNativeColumnDescriptor.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeCommandCodec.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeDecoder.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeEncoder.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeParamDesc.java | 13 +++++++++++++ .../codec/ClickhouseNativePreparedStatement.java | 13 +++++++++++++ .../ClickhouseNativeQueryCommandBaseCodec.java | 13 +++++++++++++ .../impl/codec/ClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/ClickhouseStreamDataSource.java | 13 +++++++++++++ .../clickhousenative/impl/codec/ClientInfo.java | 13 +++++++++++++ .../impl/codec/ClientPacketTypes.java | 13 +++++++++++++ .../impl/codec/CloseConnectionCommandCodec.java | 13 +++++++++++++ .../impl/codec/CloseCursorCommandCodec.java | 13 +++++++++++++ .../impl/codec/CloseStatementCommandCodec.java | 13 +++++++++++++ .../impl/codec/ColumnOrientedBlockReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/Compression.java | 13 +++++++++++++ .../impl/codec/DatabaseMetadataReader.java | 13 +++++++++++++ .../impl/codec/ExtendedQueryCommandCodec.java | 13 +++++++++++++ .../impl/codec/InitCommandCodec.java | 13 +++++++++++++ .../impl/codec/Lz4ClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/Lz4ClickhouseStreamDataSource.java | 13 +++++++++++++ .../impl/codec/MultistringMessageReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/PacketForge.java | 13 +++++++++++++ .../clickhousenative/impl/codec/PacketReader.java | 13 +++++++++++++ .../impl/codec/PrepareStatementCodec.java | 13 +++++++++++++ .../clickhousenative/impl/codec/QueryInfo.java | 13 +++++++++++++ .../clickhousenative/impl/codec/QueryParsers.java | 13 +++++++++++++ .../impl/codec/QueryProcessingStage.java | 13 +++++++++++++ .../impl/codec/QueryProgressInfo.java | 13 +++++++++++++ .../impl/codec/QueryProgressInfoReader.java | 13 +++++++++++++ .../impl/codec/RawClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/RawClickhouseStreamDataSource.java | 13 +++++++++++++ .../impl/codec/RowResultDecoder.java | 13 +++++++++++++ .../impl/codec/ServerPacketType.java | 13 +++++++++++++ .../impl/codec/SimpleQueryCommandCodec.java | 13 +++++++++++++ .../clickhousenative/impl/codec/TableColumns.java | 13 +++++++++++++ .../impl/codec/columns/ArrayColumn.java | 13 +++++++++++++ .../impl/codec/columns/ArrayColumnReader.java | 14 ++++++++++++++ .../impl/codec/columns/ArrayColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumns.java | 13 +++++++++++++ .../impl/codec/columns/ColumnUtils.java | 13 +++++++++++++ .../impl/codec/columns/DateColumn.java | 13 +++++++++++++ .../impl/codec/columns/DateColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64Column.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumn.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Decimal128Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal256Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Enum16Column.java | 13 +++++++++++++ .../impl/codec/columns/Enum16ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Enum16ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Enum8Column.java | 13 +++++++++++++ .../impl/codec/columns/Enum8ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Enum8ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnDecoder.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnEncoder.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/EnumResolutionMethod.java | 13 +++++++++++++ .../impl/codec/columns/FixedStringColumn.java | 13 +++++++++++++ .../codec/columns/FixedStringColumnReader.java | 13 +++++++++++++ .../codec/columns/FixedStringColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Float32Column.java | 13 +++++++++++++ .../impl/codec/columns/Float32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Float32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Float64Column.java | 13 +++++++++++++ .../impl/codec/columns/Float64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Float64ColumnWriter.java | 13 +++++++++++++ .../codec/columns/GenericDecimalColumnReader.java | 13 +++++++++++++ .../codec/columns/GenericDecimalColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IPv4Column.java | 13 +++++++++++++ .../impl/codec/columns/IPv4ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/IPv4ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IPv6Column.java | 13 +++++++++++++ .../impl/codec/columns/IPv6ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/IPv6ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Int128Column.java | 13 +++++++++++++ .../impl/codec/columns/Int128ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Int128ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IntervalColumn.java | 13 +++++++++++++ .../impl/codec/columns/IntervalColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/LowCardinalityColumn.java | 13 +++++++++++++ .../codec/columns/LowCardinalityColumnReader.java | 13 +++++++++++++ .../codec/columns/LowCardinalityColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/PairedIterator.java | 13 +++++++++++++ .../impl/codec/columns/StringCache.java | 13 +++++++++++++ .../impl/codec/columns/StringColumn.java | 13 +++++++++++++ .../impl/codec/columns/StringColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/StringColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Triplet.java | 13 +++++++++++++ .../impl/codec/columns/UInt16Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt16ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt16ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt32Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt64Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt8Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt8ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt8ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumn.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumnWriter.java | 13 +++++++++++++ .../clickhouse/clickhousenative/package-info.java | 13 +++++++++++++ .../spi/ClickhouseNativeDriver.java | 13 +++++++++++++ .../codec/columns/ClickhouseColumnsTestReader.java | 13 +++++++++++++ .../clickhousenativeclient/ArraySerDesTest.java | 13 +++++++++++++ .../BasicClickhouseTest.java | 13 +++++++++++++ .../clickhousenativeclient/ClickhouseResource.java | 13 +++++++++++++ .../ExtendedClickhouseTest.java | 13 +++++++++++++ .../NestedExceptionsTest.java | 13 +++++++++++++ .../PacketReaderReplayTest.java | 13 +++++++++++++ .../vertx/clickhousenativeclient/PacketUtil.java | 13 +++++++++++++ .../io/vertx/clickhousenativeclient/Sleep.java | 13 +++++++++++++ .../clickhousenativeclient/SpecialTypesTest.java | 13 +++++++++++++ .../alltypes/AllTypesBase.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/BlobTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/DateTest.java | 13 +++++++++++++ .../alltypes/DateTime64Test.java | 13 +++++++++++++ .../alltypes/DateTimeTest.java | 13 +++++++++++++ .../alltypes/Decimal128Test.java | 13 +++++++++++++ .../alltypes/Decimal256Test.java | 13 +++++++++++++ .../alltypes/Decimal32Test.java | 13 +++++++++++++ .../alltypes/Decimal64Test.java | 13 +++++++++++++ .../alltypes/Enum16Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Enum8Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/EnumTest.java | 13 +++++++++++++ .../alltypes/FixedStringTest.java | 13 +++++++++++++ .../alltypes/Float32Test.java | 13 +++++++++++++ .../alltypes/Float64Test.java | 13 +++++++++++++ .../alltypes/HugeDecimalTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/IPv4Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/IPv6Test.java | 13 +++++++++++++ .../alltypes/Int128Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int16Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int32Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int64Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int8Test.java | 13 +++++++++++++ .../alltypes/StringArrayDeduplicationTester.java | 13 +++++++++++++ .../alltypes/StringTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/TestEnum.java | 13 +++++++++++++ .../alltypes/UInt16Test.java | 13 +++++++++++++ .../alltypes/UInt32Test.java | 13 +++++++++++++ .../alltypes/UInt64Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/UInt8Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/UUIDTest.java | 13 +++++++++++++ .../ClickhouseNativeBinaryDataTypeDecodeTest.java | 13 +++++++++++++ .../ClickhouseNativeBinaryDataTypeEncodeTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeCollectorTest.java | 13 +++++++++++++ .../ClickhouseNativeConnectionAutoRetryTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeConnectionTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeDriverTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedBatchTest.java | 13 +++++++++++++ .../ClickhouseNativePreparedQueryCachedTest.java | 13 +++++++++++++ .../ClickhouseNativePreparedQueryPooledTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedQueryTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedQueryTestBase.java | 13 +++++++++++++ .../tck/ClickhouseNativeSimpleQueryPooledTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeSimpleQueryTest.java | 13 +++++++++++++ .../ClickhouseNativeTextDataTypeDecodeTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeTracingTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeTransactionTest.java | 13 +++++++++++++ .../clickhousenativeclient/tck/ClientConfig.java | 13 +++++++++++++ 201 files changed, 2614 insertions(+) diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index b9db59e66f..fc77dd0df5 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 6674bc7948..26799d3398 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package examples; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 6c86a1e806..81f277e812 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import java.util.Arrays; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 0de9f4fb3c..636fc4e3f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index eee51f5f1a..be1dadb5e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index 0583f93244..abd5db422d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index f58d1bb7b1..88a284ad42 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index d918d704fe..bf8073f05c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index ae1bcfaf0b..40699a8a47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index b9a98773b1..cfdc84b462 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 7acfb6b429..9697b2048b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index c2c5b0230e..b5c2ce62f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 2f43623e6b..ae281664be 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index 65ba59dfca..aef9348e25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 6de8776d4b..5fbec9418e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 8924104464..a1cb5aca1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.netty.channel.ChannelPipeline; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 16273d24c5..eebf9baa88 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; public class ClickhouseServerException extends RuntimeException { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 76efd8872b..e152bb304a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 448b7f1447..c8b69146ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index 437cea6365..ea375135c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class BlockStreamProfileInfo { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index 20ed90f8cf..f67439f05e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index e7d9fe0474..51fe00109f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 4b67457e49..6c143ba40d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index ea1fd6deee..c33471b071 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 92f9abb822..dada2f56c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index 369ae7d18a..dcf63afaf3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index fb1ea517fb..471e817fa4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 0f1229905e..96a21e2dd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index c8454ed1d5..6b3dad2ace 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 30a29599fd..2273b27d85 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 8b4596e7e2..b4ce000302 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 762fa4724a..b23e4993ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public interface ClickhouseStreamDataSink { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 8503205e12..bcff1eab4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 807cac542c..5f171753df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 7573773f4b..88a06156b4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class ClientPacketTypes { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 335c294524..3f3b47c457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 7b87ac31a6..2e1f1dc0f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index d2f72a2d55..458b633d40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 0cb1090b73..a70bbb7c24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 221252ea35..8b6277255f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class Compression { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index f334acb6e3..a1a93d8fcd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index c561c85af9..bde082a2de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 19fc857f75..6d9a373925 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index b700d4dd44..21add78db7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 3982fa7bde..5318691c05 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index 26a5123ac3..c71df439c6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 00dbf4b7bf..b0d494ac07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index d902446fb6..4d3b9842c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index ac8dab04e9..64d2074fa2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index e3246d9607..c1dca7ef98 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 8a716d63ea..d327ec6b4e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 9c5f44fd2f..6cc34c3b5c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class QueryProcessingStage { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 2f12160f7d..50c355abcb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class QueryProgressInfo { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 5b44d9d4a7..5089af0fc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 93297777ee..453321cbf5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 78ea7b8133..3dd7a18a99 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 9bb195e877..8202e827cd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index 385f857556..f23402d174 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 28a0d15809..4ff3b8be1f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index e5be96fa10..805fbdc4af 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 9719769cfa..ec7b7936ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 24914f513e..7b03eb30c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; @@ -17,6 +30,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; + //TODO: use int[][] and int[][][] as masterSlice and perRowsSlice private List> masterSlice; private List>> perRowsSlice; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 5a3555c6f3..070c7fbaa5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 51300e05e0..297d97c826 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index b686647713..a5c47f8ed6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index f5dd1aa4a3..f78bd559b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 0bac601e0c..475183899e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 3f02c14908..1b5b6b7a96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index f3da896429..43385870e7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index 51286a312a..7fa7cf29bc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index d51d71602c..ba962c523c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 36b842c7f7..bd3b33efc3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 47c0668c04..e9363dba5d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index fd0fa8887c..e97a3567bb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index a59fa805b7..53e9d00691 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index fd88ebf41d..97a5d2fa3b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index 58e72a3c9f..5b20c82c5b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 0df3a50072..113ad3ce5c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 6ec5c8281a..483a30a4b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 86b0cf5984..b9feb60b3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 5ff0bd43cb..04d684d7a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index 4136f7beec..bb33b8159d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 2a69bbb98e..2b1af0c965 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 839e8e63c0..8aaa9e6497 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index e2c7aa71a3..0ec2844717 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 5ebd0f1758..b3655543ed 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 977d2d893d..54429ae13a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index 99237088ec..38158d1228 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 7a4f17f3f9..bf7f94b4a2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 4ee4313ad7..a73f5fa7af 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 6ab08e9dfa..d8fdec966f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 22eeb055a6..1e43af25e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index 960c221cc6..e3f2443690 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 990ea8e110..408acc5c66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; public interface EnumColumnReader { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index fd76395e3f..c2bd4b15c9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.Arrays; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index e43ba3cf3c..02b4809f1c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 4bdb6014d5..24e8c5f8e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 79ed29b3b1..2733ff745f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 85ab677398..10309abb9a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index a691364c1e..173a6f9da5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index f14aae0d23..de449814f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 4a01a5a650..c65428dd79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index 9e4c5ab07a..ca758f5f06 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index 9da9c85f8b..b0d4d913b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 24d25ae02b..ba9a701a9e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index f95def64cd..5f66f6cb8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 7e2fdaa3b8..426c8dc947 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 66e8b8e681..35233d8f76 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index 7d798113d6..fbad1e1642 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 8d0ba48b8e..a76a187e50 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 294158f43a..bd4dfadcfe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index 98ec4a1857..daaaf28f26 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 5b4bd47145..fd3147740a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index d8976952c4..2d3f78afee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 34b1c10c7f..6fab61d2c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 84735f3e75..860db23bf9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 6b870d64ce..42ee563d90 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 6faf441029..d5ac24ef9b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 87131f0efd..322b122f94 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 7ffafb87dc..b73def29f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index f00c3f5dbf..a2c7214266 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.AbstractMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index d9fc77c7f1..5234b5603b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.lang.ref.SoftReference; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 84d6638225..0a07fe6a4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index a118062139..3948bd4827 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 19f9442d01..7dee4b30b4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index 6a53721df7..cb09672e25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; public class Triplet { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 2d8c55fc4b..4e0c552320 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 40326ebf05..34c6af0dcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index 016fed04f8..419dca2d46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 408ec87564..a0df15f820 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 10d307d408..e435482e4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index 15fdee6b67..afb8c4ff4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index e4dce6a41d..af179b9893 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index c0e4f879ca..1641943e5b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index 7445baaa8c..df953dff88 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index cd4a682756..0757436dd1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 8c001c0311..6edd37239b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 74f50f546c..03d6275964 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index ccfa171dea..3da9601e59 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 4e8c87ab02..6c3289bc4d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index c3e21525e2..160333239c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index fe9ea8e26d..f72263172b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + @ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") package io.vertx.clickhouse.clickhousenative; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 7390ea7f9e..2febe2d24e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.spi; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 3d9725e0a9..74777ea403 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 19b61560d6..af93af3e82 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 8291a5b32d..b4de30bae9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 33d6fae551..50b0089d52 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index ac100a4556..fc3bc3b919 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 7eea72ecaf..7bfc4c23d0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 9df9d02072..d2f18a5b8a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index 1b14fa83f1..422abefc4f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import java.util.List; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index 09b83adcdc..4c6003407a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; public class Sleep { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 6ddc86d390..934b5ba1e8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 775d483d28..cf06a87d82 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 739eb756d1..607713c4c5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index f3d7b8b1e4..1401d096cf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index f22a1765aa..7d44a56566 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index f84dc7bc28..69a57f5e70 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 1aad85076a..30fb8dea8f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index af927fd2ec..00f526a377 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 950e549c29..7256969ea2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index 90a942a18f..b91dbdf796 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index 8a391480e8..a249ea40d7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 3650819ffa..41336cab9c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index cc16708ba8..92ba326274 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index b7b64127aa..933b18aaf0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index ff13539fda..bcb88838f7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index a3a930efd3..5036fdccf0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index c644d4503c..b6b2216351 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index 41a90a6529..fe5dfe496c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 9e906096bc..aec6c33e32 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 986b91a448..88c3ebe81f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index 49cbdd84eb..fc7d691c56 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 0762242de2..871f1d857d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 360c60d135..274731a4d9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 6ef1d16b5d..7d9fade741 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 0944ec554b..0e5d953617 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 9fe684a4c4..0ec278ac31 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index c20c8fad4f..f98dfb9d15 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; enum TestEnum { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 1d8f4b13ba..11f25c4a8e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index 0d713e4c54..d958278b56 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 9c1da11c66..5d735592c8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 3dfb212907..8247a34569 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 90c3db931e..386af7c1cf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index e88cfce956..fe3afcf766 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index b83718ea65..87bf116630 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 8b38533fbd..0f3645ac63 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index c639df7e31..7ae68c6b39 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 0f64148a5a..7fcb56d0a7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 45d123485b..1f25aac777 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 23ecf9ebd5..512d8fa314 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index 278295c28c..a10b69620c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index efa4d51357..4a1c22d826 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index 81d98fbd51..dbc32b4918 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 63852d20a7..63a1209176 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index 87d7d4fff6..f1aa95e226 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 03c96c1f4b..9a6d5a035b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index be93099659..b16109fd65 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index 729ee568da..37bd3902d3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 2e7686d2a7..851e199ca6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index 280a9b2bb5..b950b8ae8d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; From e9af16ebf801e3323e37f1219853a6351bede159 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 13:56:44 +0300 Subject: [PATCH 067/176] fixed copyright headers Signed-off-by: vladimir --- .../ClickhouseNativeConnectOptionsConverter.java | 16 ++++++++-------- .../main/java/examples/SqlClientExamples.java | 16 ++++++++-------- .../clickhousenative/ClickhouseConstants.java | 16 ++++++++-------- .../ClickhouseNativeConnectOptions.java | 16 ++++++++-------- .../ClickhouseNativeConnection.java | 16 ++++++++-------- .../clickhousenative/ClickhouseNativePool.java | 16 ++++++++-------- .../clickhousenative/impl/BaseBlock.java | 16 ++++++++-------- .../clickhousenative/impl/BlockInfo.java | 16 ++++++++-------- .../impl/ClickhouseNativeConnectionFactory.java | 16 ++++++++-------- .../impl/ClickhouseNativeConnectionImpl.java | 16 ++++++++-------- .../ClickhouseNativeConnectionUriParser.java | 16 ++++++++-------- .../impl/ClickhouseNativeDatabaseMetadata.java | 16 ++++++++-------- .../impl/ClickhouseNativePoolImpl.java | 16 ++++++++-------- .../impl/ClickhouseNativeRowDesc.java | 16 ++++++++-------- .../impl/ClickhouseNativeRowImpl.java | 16 ++++++++-------- .../impl/ClickhouseNativeSocketConnection.java | 16 ++++++++-------- .../impl/ClickhouseServerException.java | 16 ++++++++-------- .../impl/ColumnOrientedBlock.java | 16 ++++++++-------- .../clickhousenative/impl/RowOrientedBlock.java | 16 ++++++++-------- .../impl/codec/BlockStreamProfileInfo.java | 16 ++++++++-------- .../impl/codec/BlockStreamProfileInfoReader.java | 16 ++++++++-------- .../impl/codec/ByteBufUtils.java | 16 ++++++++-------- .../impl/codec/ClickhouseExceptionReader.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeCodec.java | 16 ++++++++-------- .../codec/ClickhouseNativeColumnDescriptor.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeCommandCodec.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeDecoder.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeEncoder.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeParamDesc.java | 16 ++++++++-------- .../codec/ClickhouseNativePreparedStatement.java | 16 ++++++++-------- .../ClickhouseNativeQueryCommandBaseCodec.java | 16 ++++++++-------- .../impl/codec/ClickhouseStreamDataSink.java | 16 ++++++++-------- .../impl/codec/ClickhouseStreamDataSource.java | 16 ++++++++-------- .../clickhousenative/impl/codec/ClientInfo.java | 16 ++++++++-------- .../impl/codec/ClientPacketTypes.java | 16 ++++++++-------- .../impl/codec/CloseConnectionCommandCodec.java | 16 ++++++++-------- .../impl/codec/CloseCursorCommandCodec.java | 16 ++++++++-------- .../impl/codec/CloseStatementCommandCodec.java | 16 ++++++++-------- .../impl/codec/ColumnOrientedBlockReader.java | 16 ++++++++-------- .../clickhousenative/impl/codec/Compression.java | 16 ++++++++-------- .../impl/codec/DatabaseMetadataReader.java | 16 ++++++++-------- .../impl/codec/ExtendedQueryCommandCodec.java | 16 ++++++++-------- .../impl/codec/InitCommandCodec.java | 16 ++++++++-------- .../impl/codec/Lz4ClickhouseStreamDataSink.java | 16 ++++++++-------- .../codec/Lz4ClickhouseStreamDataSource.java | 16 ++++++++-------- .../impl/codec/MultistringMessageReader.java | 16 ++++++++-------- .../clickhousenative/impl/codec/PacketForge.java | 16 ++++++++-------- .../impl/codec/PacketReader.java | 16 ++++++++-------- .../impl/codec/PrepareStatementCodec.java | 16 ++++++++-------- .../clickhousenative/impl/codec/QueryInfo.java | 16 ++++++++-------- .../impl/codec/QueryParsers.java | 16 ++++++++-------- .../impl/codec/QueryProcessingStage.java | 16 ++++++++-------- .../impl/codec/QueryProgressInfo.java | 16 ++++++++-------- .../impl/codec/QueryProgressInfoReader.java | 16 ++++++++-------- .../impl/codec/RawClickhouseStreamDataSink.java | 16 ++++++++-------- .../codec/RawClickhouseStreamDataSource.java | 16 ++++++++-------- .../impl/codec/RowResultDecoder.java | 16 ++++++++-------- .../impl/codec/ServerPacketType.java | 16 ++++++++-------- .../impl/codec/SimpleQueryCommandCodec.java | 16 ++++++++-------- .../impl/codec/TableColumns.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumn.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/ClickhouseColumn.java | 16 ++++++++-------- .../codec/columns/ClickhouseColumnReader.java | 16 ++++++++-------- .../codec/columns/ClickhouseColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/ClickhouseColumns.java | 16 ++++++++-------- .../impl/codec/columns/ColumnUtils.java | 16 ++++++++-------- .../impl/codec/columns/DateColumn.java | 16 ++++++++-------- .../impl/codec/columns/DateColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/DateColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/DateTime64Column.java | 16 ++++++++-------- .../codec/columns/DateTime64ColumnReader.java | 16 ++++++++-------- .../codec/columns/DateTime64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumn.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Decimal128Column.java | 16 ++++++++-------- .../impl/codec/columns/Decimal256Column.java | 16 ++++++++-------- .../impl/codec/columns/Decimal32Column.java | 16 ++++++++-------- .../codec/columns/Decimal32ColumnReader.java | 16 ++++++++-------- .../codec/columns/Decimal32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Decimal64Column.java | 16 ++++++++-------- .../codec/columns/Decimal64ColumnReader.java | 16 ++++++++-------- .../codec/columns/Decimal64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Enum16Column.java | 16 ++++++++-------- .../impl/codec/columns/Enum16ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Enum16ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Enum8Column.java | 16 ++++++++-------- .../impl/codec/columns/Enum8ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Enum8ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnDecoder.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnEncoder.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/EnumResolutionMethod.java | 16 ++++++++-------- .../impl/codec/columns/FixedStringColumn.java | 16 ++++++++-------- .../codec/columns/FixedStringColumnReader.java | 16 ++++++++-------- .../codec/columns/FixedStringColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Float32Column.java | 16 ++++++++-------- .../impl/codec/columns/Float32ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Float32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Float64Column.java | 16 ++++++++-------- .../impl/codec/columns/Float64ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Float64ColumnWriter.java | 16 ++++++++-------- .../columns/GenericDecimalColumnReader.java | 16 ++++++++-------- .../columns/GenericDecimalColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IPv4Column.java | 16 ++++++++-------- .../impl/codec/columns/IPv4ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/IPv4ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IPv6Column.java | 16 ++++++++-------- .../impl/codec/columns/IPv6ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/IPv6ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Int128Column.java | 16 ++++++++-------- .../impl/codec/columns/Int128ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Int128ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IntervalColumn.java | 16 ++++++++-------- .../impl/codec/columns/IntervalColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/LowCardinalityColumn.java | 16 ++++++++-------- .../columns/LowCardinalityColumnReader.java | 16 ++++++++-------- .../columns/LowCardinalityColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/PairedIterator.java | 16 ++++++++-------- .../impl/codec/columns/StringCache.java | 16 ++++++++-------- .../impl/codec/columns/StringColumn.java | 16 ++++++++-------- .../impl/codec/columns/StringColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/StringColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Triplet.java | 16 ++++++++-------- .../impl/codec/columns/UInt16Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt16ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt16ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt32Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt32ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt64Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt64ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt8Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt8ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt8ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumn.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumnWriter.java | 16 ++++++++-------- .../clickhousenative/package-info.java | 16 ++++++++-------- .../spi/ClickhouseNativeDriver.java | 16 ++++++++-------- .../columns/ClickhouseColumnsTestReader.java | 16 ++++++++-------- .../clickhousenativeclient/ArraySerDesTest.java | 16 ++++++++-------- .../BasicClickhouseTest.java | 16 ++++++++-------- .../ClickhouseResource.java | 16 ++++++++-------- .../ExtendedClickhouseTest.java | 16 ++++++++-------- .../NestedExceptionsTest.java | 16 ++++++++-------- .../PacketReaderReplayTest.java | 16 ++++++++-------- .../vertx/clickhousenativeclient/PacketUtil.java | 16 ++++++++-------- .../io/vertx/clickhousenativeclient/Sleep.java | 16 ++++++++-------- .../clickhousenativeclient/SpecialTypesTest.java | 16 ++++++++-------- .../alltypes/AllTypesBase.java | 16 ++++++++-------- .../alltypes/BlobTest.java | 16 ++++++++-------- .../alltypes/DateTest.java | 16 ++++++++-------- .../alltypes/DateTime64Test.java | 16 ++++++++-------- .../alltypes/DateTimeTest.java | 16 ++++++++-------- .../alltypes/Decimal128Test.java | 16 ++++++++-------- .../alltypes/Decimal256Test.java | 16 ++++++++-------- .../alltypes/Decimal32Test.java | 16 ++++++++-------- .../alltypes/Decimal64Test.java | 16 ++++++++-------- .../alltypes/Enum16Test.java | 16 ++++++++-------- .../alltypes/Enum8Test.java | 16 ++++++++-------- .../alltypes/EnumTest.java | 16 ++++++++-------- .../alltypes/FixedStringTest.java | 16 ++++++++-------- .../alltypes/Float32Test.java | 16 ++++++++-------- .../alltypes/Float64Test.java | 16 ++++++++-------- .../alltypes/HugeDecimalTest.java | 16 ++++++++-------- .../alltypes/IPv4Test.java | 16 ++++++++-------- .../alltypes/IPv6Test.java | 16 ++++++++-------- .../alltypes/Int128Test.java | 16 ++++++++-------- .../alltypes/Int16Test.java | 16 ++++++++-------- .../alltypes/Int32Test.java | 16 ++++++++-------- .../alltypes/Int64Test.java | 16 ++++++++-------- .../alltypes/Int8Test.java | 16 ++++++++-------- .../alltypes/StringArrayDeduplicationTester.java | 16 ++++++++-------- .../alltypes/StringTest.java | 16 ++++++++-------- .../alltypes/TestEnum.java | 16 ++++++++-------- .../alltypes/UInt16Test.java | 16 ++++++++-------- .../alltypes/UInt32Test.java | 16 ++++++++-------- .../alltypes/UInt64Test.java | 16 ++++++++-------- .../alltypes/UInt8Test.java | 16 ++++++++-------- .../alltypes/UUIDTest.java | 16 ++++++++-------- ...ClickhouseNativeBinaryDataTypeDecodeTest.java | 16 ++++++++-------- ...ClickhouseNativeBinaryDataTypeEncodeTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeCollectorTest.java | 16 ++++++++-------- .../ClickhouseNativeConnectionAutoRetryTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeConnectionTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeDriverTest.java | 16 ++++++++-------- .../tck/ClickhouseNativePreparedBatchTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryCachedTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryPooledTest.java | 16 ++++++++-------- .../tck/ClickhouseNativePreparedQueryTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryTestBase.java | 16 ++++++++-------- .../ClickhouseNativeSimpleQueryPooledTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeSimpleQueryTest.java | 16 ++++++++-------- .../ClickhouseNativeTextDataTypeDecodeTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeTracingTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeTransactionTest.java | 16 ++++++++-------- .../clickhousenativeclient/tck/ClientConfig.java | 16 ++++++++-------- 201 files changed, 1608 insertions(+), 1608 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index fc77dd0df5..3a508f4f43 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 26799d3398..8412897915 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 81f277e812..447796872d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 636fc4e3f0..d7499e96a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index be1dadb5e9..0519fb554f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index abd5db422d..b1a4cf9b93 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 88a284ad42..081132f487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index bf8073f05c..422f9e0af1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 40699a8a47..eb4af9617f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index cfdc84b462..d244191676 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 9697b2048b..c8acce9112 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index b5c2ce62f1..6477ee66f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index ae281664be..d53eed75d8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index aef9348e25..ef556499ad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 5fbec9418e..5c7c6bbeba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index a1cb5aca1a..ef42d33162 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index eebf9baa88..4b3e180187 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index e152bb304a..4b014f04fc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index c8b69146ee..f427a296d1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index ea375135c2..1900d6e0d3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index f67439f05e..e3fd1c969a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 51fe00109f..eff1b25ff5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 6c143ba40d..52026be5e4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index c33471b071..5f267be345 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index dada2f56c8..b4c9fef85b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index dcf63afaf3..ca8ff5b369 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 471e817fa4..45ac6d6e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 96a21e2dd5..ffa3e1636e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index 6b3dad2ace..98689ca7b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 2273b27d85..05e7b4e358 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index b4ce000302..899c9174f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index b23e4993ef..dcc1ea24d8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index bcff1eab4c..8bd578260a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 5f171753df..f4ed184547 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 88a06156b4..e62ce0fe15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 3f3b47c457..0d33604dd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 2e1f1dc0f8..f8a7306437 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 458b633d40..2ada23c3bd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index a70bbb7c24..3f4398f83c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 8b6277255f..6ae0c92b2b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index a1a93d8fcd..366c4872cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index bde082a2de..d07ea250ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6d9a373925..6a75185685 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 21add78db7..bd5ba75597 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 5318691c05..9c255b613d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index c71df439c6..cabd73ee2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index b0d494ac07..132f2b2994 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 4d3b9842c8..ba7319651d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 64d2074fa2..28976e42e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index c1dca7ef98..9ac72d5aaa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index d327ec6b4e..d8bb90a04e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 6cc34c3b5c..040e5aa0ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 50c355abcb..71df943414 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 5089af0fc7..49b47faf1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 453321cbf5..1140e935b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 3dd7a18a99..2bc8d3c308 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 8202e827cd..1030307d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index f23402d174..94631a3b96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 4ff3b8be1f..67a075b802 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index 805fbdc4af..862fed86f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index ec7b7936ce..1d4bd590a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 7b03eb30c2..d87bbc97f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 070c7fbaa5..8bb94f2e2f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 297d97c826..1653990c4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index a5c47f8ed6..6047a4ed7e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index f78bd559b6..c554daaef3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 475183899e..10d6e08d15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 1b5b6b7a96..9792ab7316 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 43385870e7..e6a8b63be6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index 7fa7cf29bc..d48f9e8c15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index ba962c523c..5d558c1c95 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index bd3b33efc3..26e7abe751 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index e9363dba5d..6c7fcf85e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index e97a3567bb..cb7670bc64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 53e9d00691..8fb09c57f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 97a5d2fa3b..81d549ba14 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index 5b20c82c5b..e8c54f3886 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 113ad3ce5c..96394ee88f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 483a30a4b0..c0d02744b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index b9feb60b3d..9d9fef1279 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 04d684d7a7..5fd7813762 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index bb33b8159d..ee8d143371 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 2b1af0c965..ef26fb016b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 8aaa9e6497..002f888df7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index 0ec2844717..9fb801a411 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index b3655543ed..252d32e59a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 54429ae13a..cd1858ba3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index 38158d1228..fc0b0acd33 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index bf7f94b4a2..79d238ba00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index a73f5fa7af..05816ef063 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index d8fdec966f..377c5b90aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 1e43af25e2..6449f61f9f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index e3f2443690..65f65d60ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 408acc5c66..50d81decb4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index c2bd4b15c9..94c5e1708a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 02b4809f1c..03656a2092 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 24e8c5f8e9..aed3f93e5a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 2733ff745f..85f488c603 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 10309abb9a..771fe5e89a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index 173a6f9da5..dc6b56b4bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index de449814f0..50bea1b80f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index c65428dd79..34f6012eb5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index ca758f5f06..b978b9e857 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index b0d4d913b5..4a188aa81e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index ba9a701a9e..1bea6358a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index 5f66f6cb8a..b0304c70ad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 426c8dc947..09d55f7bca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 35233d8f76..d2a86628dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index fbad1e1642..d7db385822 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index a76a187e50..9ac5a4852a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index bd4dfadcfe..d60c548af2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index daaaf28f26..6d7c1ed7c9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index fd3147740a..52b1b34c54 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 2d3f78afee..25da0384b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 6fab61d2c5..d1bb15e06e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 860db23bf9..feef2e04f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 42ee563d90..5f9bb6f83d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index d5ac24ef9b..d8bc625e8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 322b122f94..7cd7c1cb4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index b73def29f9..68e19edc5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index a2c7214266..5d7b54cbac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 5234b5603b..346eaa2e3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 0a07fe6a4c..a6a125436e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 3948bd4827..91f2cff560 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 7dee4b30b4..4ac5893eff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index cb09672e25..75ab2fdc66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 4e0c552320..2bd6e09775 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 34c6af0dcf..e4f3e7bb34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index 419dca2d46..e34cb37701 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index a0df15f820..551861378d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index e435482e4f..dcc6aa5bc4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index afb8c4ff4f..8d90064ac4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index af179b9893..3350d79eac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 1641943e5b..c0d3c68953 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index df953dff88..adad2965ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 0757436dd1..50f89050c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 6edd37239b..42af4cb970 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 03d6275964..48fc588432 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 3da9601e59..0a9a863d73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 6c3289bc4d..034014615a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index 160333239c..68a62b3842 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index f72263172b..c93d02efc1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 2febe2d24e..803603e786 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 74777ea403..490479de28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index af93af3e82..718f49035a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index b4de30bae9..50af18f46a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 50b0089d52..67cb255972 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index fc3bc3b919..cef52728a6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 7bfc4c23d0..07808e3b7a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index d2f18a5b8a..94c8a6d034 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index 422abefc4f..a7a5fbd989 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index 4c6003407a..e5eb8dfd4f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 934b5ba1e8..cd26259235 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index cf06a87d82..20fffd4aba 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 607713c4c5..cc4fb4f6e8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 1401d096cf..8dfa8b4d22 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index 7d44a56566..d736c1c673 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 69a57f5e70..46957e6d81 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 30fb8dea8f..68efd4de03 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index 00f526a377..a72bbc1cf1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 7256969ea2..0433e2da62 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index b91dbdf796..ad7462a44f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index a249ea40d7..dbeba20fde 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 41336cab9c..a41b88e108 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index 92ba326274..61b736f296 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 933b18aaf0..81381c65fc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index bcb88838f7..bbaeedcf99 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 5036fdccf0..4113490551 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index b6b2216351..c238d363a1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index fe5dfe496c..ed17a154ec 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index aec6c33e32..967466a2f1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 88c3ebe81f..42699de302 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index fc7d691c56..eae545be41 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 871f1d857d..36d498c360 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 274731a4d9..25cbe1d960 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 7d9fade741..582fbfb753 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 0e5d953617..3854c515a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 0ec278ac31..073689a34c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index f98dfb9d15..a3c47513a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 11f25c4a8e..4c2a0fff0c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index d958278b56..586164c527 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 5d735592c8..aabdf21966 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 8247a34569..1b9a6a1d0b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 386af7c1cf..4b2a92c40e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index fe3afcf766..11bceefacb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 87bf116630..94e06939d5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 0f3645ac63..1b96cf7e88 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index 7ae68c6b39..777f7cbcfc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 7fcb56d0a7..57e391722f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 1f25aac777..254a0400f9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 512d8fa314..5090761e69 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index a10b69620c..dbd75309b8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index 4a1c22d826..f7dadefea0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index dbc32b4918..433bdcca54 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 63a1209176..16cab389b1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index f1aa95e226..878d55d5a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 9a6d5a035b..6984b42b1d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index b16109fd65..52dd6fdf84 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index 37bd3902d3..b3f1c03920 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 851e199ca6..3cadca516b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index b950b8ae8d..20353f27f1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ From 5735b68f84e0e16a1ab697033a0fd96dc67156e0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 18:04:25 +0300 Subject: [PATCH 068/176] fixed copyright headers, reworked array to use int[] arrays as slices Signed-off-by: vladimir --- ...ickhouseNativeConnectOptionsConverter.java | 2 +- .../main/java/examples/SqlClientExamples.java | 2 +- .../clickhousenative/ClickhouseConstants.java | 2 +- .../ClickhouseNativeConnectOptions.java | 2 +- .../ClickhouseNativeConnection.java | 2 +- .../ClickhouseNativePool.java | 2 +- .../clickhousenative/impl/BaseBlock.java | 2 +- .../clickhousenative/impl/BlockInfo.java | 2 +- .../ClickhouseNativeConnectionFactory.java | 2 +- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../ClickhouseNativeConnectionUriParser.java | 2 +- .../ClickhouseNativeDatabaseMetadata.java | 2 +- .../impl/ClickhouseNativePoolImpl.java | 2 +- .../impl/ClickhouseNativeRowDesc.java | 2 +- .../impl/ClickhouseNativeRowImpl.java | 2 +- .../ClickhouseNativeSocketConnection.java | 2 +- .../impl/ClickhouseServerException.java | 2 +- .../impl/ColumnOrientedBlock.java | 2 +- .../impl/RowOrientedBlock.java | 2 +- .../impl/codec/BlockStreamProfileInfo.java | 2 +- .../codec/BlockStreamProfileInfoReader.java | 2 +- .../impl/codec/ByteBufUtils.java | 2 +- .../impl/codec/ClickhouseExceptionReader.java | 2 +- .../impl/codec/ClickhouseNativeCodec.java | 2 +- .../ClickhouseNativeColumnDescriptor.java | 2 +- .../codec/ClickhouseNativeCommandCodec.java | 2 +- .../impl/codec/ClickhouseNativeDecoder.java | 2 +- .../impl/codec/ClickhouseNativeEncoder.java | 2 +- .../impl/codec/ClickhouseNativeParamDesc.java | 2 +- .../ClickhouseNativePreparedStatement.java | 2 +- ...ClickhouseNativeQueryCommandBaseCodec.java | 2 +- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 2 +- .../impl/codec/ClientInfo.java | 2 +- .../impl/codec/ClientPacketTypes.java | 2 +- .../codec/CloseConnectionCommandCodec.java | 2 +- .../impl/codec/CloseCursorCommandCodec.java | 2 +- .../codec/CloseStatementCommandCodec.java | 2 +- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/Compression.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 2 +- .../impl/codec/ExtendedQueryCommandCodec.java | 2 +- .../impl/codec/InitCommandCodec.java | 2 +- .../codec/Lz4ClickhouseStreamDataSink.java | 2 +- .../codec/Lz4ClickhouseStreamDataSource.java | 2 +- .../impl/codec/MultistringMessageReader.java | 2 +- .../impl/codec/PacketForge.java | 2 +- .../impl/codec/PacketReader.java | 2 +- .../impl/codec/PrepareStatementCodec.java | 2 +- .../impl/codec/QueryInfo.java | 2 +- .../impl/codec/QueryParsers.java | 2 +- .../impl/codec/QueryProcessingStage.java | 2 +- .../impl/codec/QueryProgressInfo.java | 2 +- .../impl/codec/QueryProgressInfoReader.java | 2 +- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../codec/RawClickhouseStreamDataSource.java | 2 +- .../impl/codec/RowResultDecoder.java | 2 +- .../impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 2 +- .../impl/codec/TableColumns.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 2 +- .../impl/codec/columns/ArrayColumnReader.java | 103 +++++++++--------- .../impl/codec/columns/ArrayColumnWriter.java | 2 +- .../codec/columns/ArrayIntPairIterator.java | 45 ++++++++ .../impl/codec/columns/ClickhouseColumn.java | 2 +- .../codec/columns/ClickhouseColumnReader.java | 2 +- .../codec/columns/ClickhouseColumnWriter.java | 2 +- .../impl/codec/columns/ClickhouseColumns.java | 2 +- .../impl/codec/columns/ColumnUtils.java | 2 +- .../impl/codec/columns/DateColumn.java | 2 +- .../impl/codec/columns/DateColumnReader.java | 2 +- .../impl/codec/columns/DateColumnWriter.java | 2 +- .../impl/codec/columns/DateTime64Column.java | 2 +- .../codec/columns/DateTime64ColumnReader.java | 2 +- .../codec/columns/DateTime64ColumnWriter.java | 2 +- .../impl/codec/columns/DateTimeColumn.java | 2 +- .../codec/columns/DateTimeColumnReader.java | 2 +- .../codec/columns/DateTimeColumnWriter.java | 2 +- .../impl/codec/columns/Decimal128Column.java | 2 +- .../impl/codec/columns/Decimal256Column.java | 2 +- .../impl/codec/columns/Decimal32Column.java | 2 +- .../codec/columns/Decimal32ColumnReader.java | 2 +- .../codec/columns/Decimal32ColumnWriter.java | 2 +- .../impl/codec/columns/Decimal64Column.java | 2 +- .../codec/columns/Decimal64ColumnReader.java | 2 +- .../codec/columns/Decimal64ColumnWriter.java | 2 +- .../impl/codec/columns/Enum16Column.java | 2 +- .../codec/columns/Enum16ColumnReader.java | 2 +- .../codec/columns/Enum16ColumnWriter.java | 2 +- .../impl/codec/columns/Enum8Column.java | 2 +- .../impl/codec/columns/Enum8ColumnReader.java | 2 +- .../impl/codec/columns/Enum8ColumnWriter.java | 2 +- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 2 +- .../columns/FixedStringColumnReader.java | 2 +- .../columns/FixedStringColumnWriter.java | 2 +- .../impl/codec/columns/Float32Column.java | 2 +- .../codec/columns/Float32ColumnReader.java | 2 +- .../codec/columns/Float32ColumnWriter.java | 2 +- .../impl/codec/columns/Float64Column.java | 2 +- .../codec/columns/Float64ColumnReader.java | 2 +- .../codec/columns/Float64ColumnWriter.java | 2 +- .../columns/GenericDecimalColumnReader.java | 2 +- .../columns/GenericDecimalColumnWriter.java | 2 +- .../impl/codec/columns/IPv4Column.java | 2 +- .../impl/codec/columns/IPv4ColumnReader.java | 2 +- .../impl/codec/columns/IPv4ColumnWriter.java | 2 +- .../impl/codec/columns/IPv6Column.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../impl/codec/columns/IPv6ColumnWriter.java | 2 +- .../impl/codec/columns/Int128Column.java | 2 +- .../codec/columns/Int128ColumnReader.java | 2 +- .../codec/columns/Int128ColumnWriter.java | 2 +- .../impl/codec/columns/IntPairIterator.java | 43 ++++++++ .../impl/codec/columns/IntervalColumn.java | 2 +- .../codec/columns/IntervalColumnReader.java | 2 +- .../codec/columns/ListPairedIterator.java | 40 +++++++ .../codec/columns/LowCardinalityColumn.java | 2 +- .../columns/LowCardinalityColumnReader.java | 2 +- .../columns/LowCardinalityColumnWriter.java | 2 +- .../impl/codec/columns/PairedIterator.java | 40 +++---- .../impl/codec/columns/StringCache.java | 2 +- .../impl/codec/columns/StringColumn.java | 2 +- .../codec/columns/StringColumnReader.java | 2 +- .../codec/columns/StringColumnWriter.java | 2 +- .../impl/codec/columns/Triplet.java | 2 +- .../impl/codec/columns/UInt16Column.java | 2 +- .../codec/columns/UInt16ColumnReader.java | 2 +- .../codec/columns/UInt16ColumnWriter.java | 2 +- .../impl/codec/columns/UInt32Column.java | 2 +- .../codec/columns/UInt32ColumnReader.java | 2 +- .../codec/columns/UInt32ColumnWriter.java | 2 +- .../impl/codec/columns/UInt64Column.java | 2 +- .../codec/columns/UInt64ColumnReader.java | 2 +- .../codec/columns/UInt64ColumnWriter.java | 2 +- .../impl/codec/columns/UInt8Column.java | 2 +- .../impl/codec/columns/UInt8ColumnReader.java | 2 +- .../impl/codec/columns/UInt8ColumnWriter.java | 2 +- .../impl/codec/columns/UUIDColumn.java | 2 +- .../impl/codec/columns/UUIDColumnReader.java | 2 +- .../impl/codec/columns/UUIDColumnWriter.java | 2 +- .../clickhousenative/package-info.java | 2 +- .../spi/ClickhouseNativeDriver.java | 2 +- .../columns/ClickhouseColumnsTestReader.java | 2 +- .../ArraySerDesTest.java | 2 +- .../BasicClickhouseTest.java | 2 +- .../ClickhouseResource.java | 2 +- .../ExtendedClickhouseTest.java | 2 +- .../NestedExceptionsTest.java | 2 +- .../PacketReaderReplayTest.java | 2 +- .../clickhousenativeclient/PacketUtil.java | 2 +- .../vertx/clickhousenativeclient/Sleep.java | 2 +- .../SpecialTypesTest.java | 2 +- .../alltypes/AllTypesBase.java | 2 +- .../alltypes/BlobTest.java | 2 +- .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 2 +- .../alltypes/Enum8Test.java | 2 +- .../alltypes/EnumTest.java | 2 +- .../alltypes/FixedStringTest.java | 2 +- .../alltypes/Float32Test.java | 2 +- .../alltypes/Float64Test.java | 2 +- .../alltypes/HugeDecimalTest.java | 2 +- .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 2 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 2 +- .../alltypes/Int32Test.java | 2 +- .../alltypes/Int64Test.java | 2 +- .../alltypes/Int8Test.java | 2 +- .../StringArrayDeduplicationTester.java | 2 +- .../alltypes/StringTest.java | 2 +- .../alltypes/TestEnum.java | 2 +- .../alltypes/UInt16Test.java | 2 +- .../alltypes/UInt32Test.java | 2 +- .../alltypes/UInt64Test.java | 2 +- .../alltypes/UInt8Test.java | 2 +- .../alltypes/UUIDTest.java | 2 +- ...ckhouseNativeBinaryDataTypeDecodeTest.java | 2 +- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 2 +- .../tck/ClickhouseNativeCollectorTest.java | 2 +- ...ickhouseNativeConnectionAutoRetryTest.java | 2 +- .../tck/ClickhouseNativeConnectionTest.java | 2 +- .../tck/ClickhouseNativeDriverTest.java | 2 +- .../ClickhouseNativePreparedBatchTest.java | 2 +- ...ickhouseNativePreparedQueryCachedTest.java | 2 +- ...ickhouseNativePreparedQueryPooledTest.java | 2 +- .../ClickhouseNativePreparedQueryTest.java | 2 +- ...ClickhouseNativePreparedQueryTestBase.java | 2 +- ...ClickhouseNativeSimpleQueryPooledTest.java | 2 +- .../tck/ClickhouseNativeSimpleQueryTest.java | 2 +- ...lickhouseNativeTextDataTypeDecodeTest.java | 2 +- .../tck/ClickhouseNativeTracingTest.java | 2 +- .../tck/ClickhouseNativeTransactionTest.java | 2 +- .../tck/ClientConfig.java | 2 +- 204 files changed, 395 insertions(+), 274 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 3a508f4f43..92fdcf397f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 8412897915..4c634d8cdd 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 447796872d..94e50719e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index d7499e96a1..30ddeb6c00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index 0519fb554f..91dd9f0029 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index b1a4cf9b93..4e67f117c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 081132f487..3de87a8556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 422f9e0af1..2d0a2f11fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index eb4af9617f..b85aadf24a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index d244191676..20359a0887 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index c8acce9112..b5ca1177a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 6477ee66f6..09a00fa99e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index d53eed75d8..702f335e2c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index ef556499ad..75838ca170 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 5c7c6bbeba..43a33ddd23 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index ef42d33162..fdfe2337c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 4b3e180187..e915a21225 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 4b014f04fc..209beefc31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index f427a296d1..162d53a8c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index 1900d6e0d3..20d00723ed 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index e3fd1c969a..125b455be7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index eff1b25ff5..8c886401b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 52026be5e4..23d741c23d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index 5f267be345..fe07e5b9a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index b4c9fef85b..345eb05e16 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index ca8ff5b369..ef02f4843d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 45ac6d6e20..08b7cea9c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index ffa3e1636e..4154d71ed1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index 98689ca7b8..0f4922ab87 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 05e7b4e358..32bc02019f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 899c9174f3..c85f55cfe1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index dcc1ea24d8..787dad8205 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 8bd578260a..a041808b51 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index f4ed184547..660576f56b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index e62ce0fe15..ba9b652a03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 0d33604dd5..72d7270798 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index f8a7306437..ab4641a871 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 2ada23c3bd..466516bbd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 3f4398f83c..55e91bc56c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 6ae0c92b2b..897e1f3218 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 366c4872cf..691dd97b3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index d07ea250ea..9d0e3fad1b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6a75185685..47f2bab8dc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index bd5ba75597..d5a6cde831 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 9c255b613d..d3d52a809f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index cabd73ee2e..4bf76b36b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 132f2b2994..c3a5b1dad0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index ba7319651d..f746820ca1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 28976e42e1..91ac21047a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index 9ac72d5aaa..e4141b6a73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index d8bb90a04e..1776043180 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 040e5aa0ce..3f58e8f66c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 71df943414..ce9805c6ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 49b47faf1a..697cece47d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 1140e935b8..93cc636fb3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 2bc8d3c308..6d0b708d09 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 1030307d4b..3f59f0d182 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index 94631a3b96..f1b47cbd2f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 67a075b802..8898234631 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index 862fed86f9..387566f487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 1d4bd590a4..2834938b04 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index d87bbc97f1..c150015335 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -16,23 +16,20 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.sql.JDBCType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; import java.util.function.Function; public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); + private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - //TODO: use int[][] and int[][][] as masterSlice and perRowsSlice - private List> masterSlice; - private List>> perRowsSlice; + private int[][] masterSlice; + private int[][][] perRowsSlice; private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; @@ -43,7 +40,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Object statePrefix; private Integer curLevelSliceSize; - private List curLevelSlice; + private int[] curLevelSlice; + + private long sliceElementCount; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); @@ -63,7 +62,7 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - masterSlice = new ArrayList<>(); + masterSlice = new int[columnDescriptor.arrayDimensionsCount() + 1][]; curDimension = 0; nItems = 0; } @@ -128,7 +127,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { desired = maybeUnwrapArrayElementType(desired); Class forRecode = desired; Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); - reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice.get(rowIdx), desired); + reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice[rowIdx], desired); return reslicedRet; } } @@ -142,37 +141,37 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { + private Object[] resliceIntoArray(Object[] data, int[][] sliceToUse, Class elementClass) { Object[] intermData = data; - for (int i = sliceToUse.size() - 1; i >= 0; --i) { - List slices = sliceToUse.get(i); + for (int i = sliceToUse.length - 1; i >= 0; --i) { + int[] slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } return (Object[]) intermData[0]; } - private Object[] resliceIntoArray(Function dataAccessor, List> sliceToUse, Class elementClass) { - int i = sliceToUse.size() - 1; - List slices = sliceToUse.get(i); + private Object[] resliceIntoArray(Function dataAccessor, int[][] sliceToUse, Class elementClass) { + int i = sliceToUse.length - 1; + int[] slices = sliceToUse[i]; Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); - for (i = sliceToUse.size() - 2; i >= 0; --i) { - slices = sliceToUse.get(i); + for (i = sliceToUse.length - 2; i >= 0; --i) { + slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } return (Object[]) intermData[0]; } - private Object[] resliceArray(Function dataAccessor, List slices, Class upperClass) { - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + private Object[] resliceArray(Function dataAccessor, int[] slices, Class upperClass) { + IntPairIterator paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); + paired.next(); + int newSliceSz = paired.getValue() - paired.getKey(); Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - copyWithAccessor(dataAccessor, slice.getKey(), reslicedArray, 0, newSliceSz); + copyWithAccessor(dataAccessor, paired.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; @@ -188,15 +187,15 @@ private void copyWithAccessor(Function srcAccessor, int srcPos, } } - private Object[] resliceArray(Object[] dataElements, List slices, Class upperClass) { - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperClass) { + IntPairIterator paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); + paired.next(); + int newSliceSz = paired.getValue() - paired.getKey(); Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - System.arraycopy(dataElements, slice.getKey(), reslicedArray, 0, newSliceSz); + System.arraycopy(dataElements, paired.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; } @@ -205,15 +204,15 @@ private Object[] resliceArray(Object[] dataElements, List slices, Class private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (nRows == 0) { - masterSlice = Collections.emptyList(); - perRowsSlice = Collections.emptyList(); + masterSlice = new int[0][]; + perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; } - perRowsSlice = new ArrayList<>(nRows); + perRowsSlice = new int[nRows][][]; for (int i = 0; i < nRows; ++i) { - perRowsSlice.add(new ArrayList<>()); + perRowsSlice[i] = new int[columnDescriptor.arrayDimensionsCount()][]; } curLevelSliceSize = nRows; while (curDimension < columnDescriptor.arrayDimensionsCount()) { @@ -226,22 +225,22 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (curDimension == 0) { rowSliceElementsToReadAtDimension = 1; } else { - List rowSliceAtPrevDimension = perRowsSlice.get(rowIdx).get(curDimension - 1); - rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension.get(rowSliceAtPrevDimension.size() - 1) - rowSliceAtPrevDimension.get(0); + int[] rowSliceAtPrevDimension = perRowsSlice[rowIdx][curDimension - 1]; + rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension[rowSliceAtPrevDimension.length - 1] - rowSliceAtPrevDimension[0]; } - List rowSliceAtDimension = new ArrayList<>(rowSliceElementsToReadAtDimension + 1); + int[] rowSliceAtDimension = new int[rowSliceElementsToReadAtDimension + 1]; //offsets at last dimension are absolute boolean lastDimension = curDimension == columnDescriptor.arrayDimensionsCount() - 1; int firstElementInSlice = (int) prevSliceElement; - rowSliceAtDimension.add(firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); + rowSliceAtDimension[0] = (firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); for (int i = 0; i < rowSliceElementsToReadAtDimension; ++i) { prevSliceElement = in.readLongLE(); if (prevSliceElement > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + prevSliceElement + "), max " + Integer.MAX_VALUE); } - rowSliceAtDimension.add((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); + rowSliceAtDimension[i + 1] = ((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); } - perRowsSlice.get(rowIdx).add(rowSliceAtDimension); + perRowsSlice[rowIdx][curDimension] = (rowSliceAtDimension); } ++curDimension; curLevelSliceSize = (int)prevSliceElement; @@ -250,12 +249,13 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { } private void readAsMasterSlice(ClickhouseStreamDataSource in) { - if (masterSlice.isEmpty()) { - masterSlice.add(Arrays.asList(0, nRows)); + if (curDimension == 0) { + //masterSlice.add(Arrays.asList(0, nRows)); + masterSlice[curDimension] = new int[]{0, nRows}; curLevelSliceSize = nRows; } if (nRows == 0) { - perRowsSlice = Collections.emptyList(); + perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; } @@ -263,8 +263,8 @@ private void readAsMasterSlice(ClickhouseStreamDataSource in) { long lastSliceSize = 0; while (curDimension < columnDescriptor.arrayDimensionsCount()) { if (curLevelSlice == null) { - curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); - curLevelSlice.add(0); + curLevelSlice = new int[curLevelSliceSize + 1]; + curLevelSlice[0] = 0; } if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { return; @@ -274,12 +274,13 @@ private void readAsMasterSlice(ClickhouseStreamDataSource in) { if (lastSliceSize > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); } - curLevelSlice.add((int) lastSliceSize); + ++sliceElementCount; + curLevelSlice[curLevelSliceIndex + 1] = (int) lastSliceSize; } - masterSlice.add(curLevelSlice); + curDimension += 1; + masterSlice[curDimension] = curLevelSlice; curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curDimension += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 8bb94f2e2f..9878d74d43 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java new file mode 100644 index 0000000000..242159d97e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class ArrayIntPairIterator implements IntPairIterator { + private final int[] src; + private int pos; + + public ArrayIntPairIterator(int[] src) { + this.src = src; + this.pos = -1; + } + + + @Override + public boolean hasNext() { + return pos < src.length - 2; + } + + @Override + public void next() { + ++pos; + } + + @Override + public int getKey() { + return src[pos]; + } + + @Override + public int getValue() { + return src[pos + 1]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1653990c4b..ede12a11f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 6047a4ed7e..189de982a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index c554daaef3..dbe0daee03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 10d6e08d15..da678db3f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 9792ab7316..e27fa6b8f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index e6a8b63be6..66e2585958 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index d48f9e8c15..ebbb757bb9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index 5d558c1c95..53b289adca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 26e7abe751..988e20243c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 6c7fcf85e1..1a5e57d8a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index cb7670bc64..48384cd421 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 8fb09c57f0..53e4ee4d96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 81d549ba14..f80d369706 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index e8c54f3886..c377239f08 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 96394ee88f..cce44f7e36 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index c0d02744b6..284c136be7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 9d9fef1279..ce45b1a1ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 5fd7813762..dd6bed5f82 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index ee8d143371..b1a6a877a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index ef26fb016b..7e9df4f024 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 002f888df7..6d286c2138 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index 9fb801a411..8f68b0dbcb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 252d32e59a..e8b046db0a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index cd1858ba3c..7a3251491f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index fc0b0acd33..f3353e9500 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 79d238ba00..17162b0fcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 05816ef063..02649b12ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 377c5b90aa..aaed4cdaea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 6449f61f9f..77ca75f915 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index 65f65d60ba..96a473ccb0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 50d81decb4..552d7da6bb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index 94c5e1708a..d714ed2324 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 03656a2092..04e5ed1842 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index aed3f93e5a..33fc28e965 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 85f488c603..ea5d7c5205 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 771fe5e89a..3d339a58b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index dc6b56b4bf..a787cc16ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index 50bea1b80f..9ace358514 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 34f6012eb5..15bf6b50e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index b978b9e857..d774ce74a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index 4a188aa81e..6a697008ac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 1bea6358a7..fbb8dd55d0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index b0304c70ad..0cbb486f12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 09d55f7bca..388dc54fff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index d2a86628dd..deb8e89b0b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index d7db385822..5ff5256c4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 9ac5a4852a..7fd2701421 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index d60c548af2..91b9006b43 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index 6d7c1ed7c9..d1992a865c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 52b1b34c54..7e43cbbe07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 25da0384b5..f301f9dec9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index d1bb15e06e..27bc846a52 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java new file mode 100644 index 0000000000..ef2877d174 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public interface IntPairIterator { + IntPairIterator EMPTY = new IntPairIterator() { + @Override + public boolean hasNext() { + return false; + } + + @Override + public void next() { + throw new IllegalStateException(); + } + + @Override + public int getKey() { + throw new IllegalStateException(); + } + + @Override + public int getValue() { + throw new IllegalStateException(); + } + }; + + boolean hasNext(); + void next(); + int getKey(); + int getValue(); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index feef2e04f6..3b179cc9b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 5f9bb6f83d..85d4394cd7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java new file mode 100644 index 0000000000..120527a9ff --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java @@ -0,0 +1,40 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.Map; + +public class ListPairedIterator implements Iterator> { + private final Iterator wrapped1; + private final Iterator wrapped2; + + public ListPairedIterator(Iterator wrapped1, Iterator wrapped2) { + this.wrapped1 = wrapped1; + this.wrapped2 = wrapped2; + } + + @Override + public boolean hasNext() { + return wrapped1.hasNext() && wrapped2.hasNext(); + } + + @Override + public Map.Entry next() { + T key = wrapped1.next(); + T val = wrapped2.next(); + return new AbstractMap.SimpleEntry<>(key, val); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index d8bc625e8a..c2ab321e91 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 7cd7c1cb4b..a4bdc46591 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 68e19edc5f..823506e75b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index 5d7b54cbac..828661bd29 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -13,34 +13,13 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import java.util.AbstractMap; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; -public class PairedIterator implements Iterator> { - private final Iterator wrapped1; - private final Iterator wrapped2; - - private PairedIterator(Iterator wrapped1, Iterator wrapped2) { - this.wrapped1 = wrapped1; - this.wrapped2 = wrapped2; - } - - @Override - public boolean hasNext() { - return wrapped1.hasNext() && wrapped2.hasNext(); - } - - @Override - public Map.Entry next() { - T key = wrapped1.next(); - T val = wrapped2.next(); - return new AbstractMap.SimpleEntry<>(key, val); - } - +public class PairedIterator { public static Iterator> of(List src) { if (src.size() <= 1) { return Collections.emptyIterator(); @@ -48,7 +27,14 @@ public static Iterator> of(List src) { Iterator iter2 = src.iterator(); iter2.next(); - return new PairedIterator<>(src.iterator(), iter2); + return new ListPairedIterator<>(src.iterator(), iter2); + } + + public static IntPairIterator of(int[] src) { + if (src.length <= 1) { + return IntPairIterator.EMPTY; + } + return new ArrayIntPairIterator(src); } public static void main(String[] args) { @@ -57,5 +43,11 @@ public static void main(String[] args) { Map.Entry n = iter.next(); System.err.println(n.getKey() + "; " + n.getValue()); } + + IntPairIterator iter2 = PairedIterator.of(new int[]{1, 2, 3, 4}); + while (iter2.hasNext()) { + iter2.next(); + System.err.println(iter2.getKey() + "; " + iter2.getValue()); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 346eaa2e3a..26f023b4b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a6a125436e..e4b8936a8d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 91f2cff560..ac56b69e11 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 4ac5893eff..58e472fe9c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index 75ab2fdc66..636a91c3c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 2bd6e09775..8182ff172f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index e4f3e7bb34..17f1e4ce97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index e34cb37701..34efca451e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 551861378d..03dce40cf1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index dcc6aa5bc4..81ba3c07ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index 8d90064ac4..b8c2e04166 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 3350d79eac..ff1e010a37 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index c0d3c68953..e8293716a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index adad2965ec..7480b176c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 50f89050c8..2e98d58ddc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 42af4cb970..047c1109e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 48fc588432..b061c8c76d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 0a9a863d73..b505b002d7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 034014615a..5e443e2136 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index 68a62b3842..9454a93c9f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index c93d02efc1..af66fd07fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 803603e786..35d994a556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 490479de28..becae96044 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 718f49035a..583fa555ca 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 50af18f46a..380ba259e5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 67cb255972..866c0f661d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index cef52728a6..361aa93f5f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 07808e3b7a..9364b88727 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 94c8a6d034..8251d9b552 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index a7a5fbd989..f53eaf4c47 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index e5eb8dfd4f..884e90d080 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index cd26259235..c071763cda 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 20fffd4aba..d1cd0385b6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index cc4fb4f6e8..f2f8169a0c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 8dfa8b4d22..157a52cf43 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index d736c1c673..15c0635ff4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 46957e6d81..9c6367a5bf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 68efd4de03..9ccf25338f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index a72bbc1cf1..2341a46ac1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 0433e2da62..2ef3994dcc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index ad7462a44f..4d71673796 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index dbeba20fde..47c9ca9cfd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index a41b88e108..759125f59b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index 61b736f296..6bcaad22ae 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 81381c65fc..ecfbb6addc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index bbaeedcf99..9443ee0be6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 4113490551..0df858e0ca 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index c238d363a1..42c012f2d9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index ed17a154ec..9197f7249c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 967466a2f1..05687f698f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 42699de302..b8d1c494c4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index eae545be41..36b47628e5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 36d498c360..a204a07840 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 25cbe1d960..9c402df55a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 582fbfb753..c1b8a29438 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 3854c515a8..d8e90bcaa2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 073689a34c..46925a0ab9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index a3c47513a8..1853465c37 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 4c2a0fff0c..4434b1dd84 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index 586164c527..1158e4820c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index aabdf21966..cec0bd6361 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 1b9a6a1d0b..b2e1f87fc7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 4b2a92c40e..df8c288eec 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index 11bceefacb..cc9d4d8a2d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 94e06939d5..540ffd626f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 1b96cf7e88..1eae44db34 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index 777f7cbcfc..80ecb15fba 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 57e391722f..3341001077 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 254a0400f9..7332ce665d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 5090761e69..386615fd5c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index dbd75309b8..7459610c58 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index f7dadefea0..d0127b306a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index 433bdcca54..6aead392be 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 16cab389b1..676284f29f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index 878d55d5a8..9345c9ead0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 6984b42b1d..cbd8888dfb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index 52dd6fdf84..9c016ccb8e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index b3f1c03920..bad07a71bd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 3cadca516b..bb4c246f55 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index 20353f27f1..bac8b75b43 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at From 8a45ce22d7d65f22e85951880027efd7513eaee9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 12 Apr 2021 12:17:17 +0300 Subject: [PATCH 069/176] fixed TODOs in pom.xml Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 80 +++++++++++-------- ...ickhouseNativeConnectOptionsConverter.java | 13 --- .../main/java/examples/SqlClientExamples.java | 1 - .../ClickhouseResource.java | 10 ++- 4 files changed, 54 insertions(+), 50 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index dffb133d29..667aa0cff9 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -36,7 +36,8 @@ ${project.basedir}/src/main/docs ${project.basedir}/src/main/generated - + + 2.14.1 @@ -94,6 +95,48 @@ test + + org.slf4j + slf4j-api + 1.7.30 + test + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-web + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-jul + ${log4j.version} + test + + org.openjdk.jmh @@ -109,7 +152,6 @@ - @@ -119,15 +161,11 @@ -Xmx1024M ${project.build.directory} - ${embedded.postgres.version} + ${embedded.clickhouse.version} ${connection.uri} + ${tls.connection.uri} - ${unix.socket.directory} - ${unix.socket.port} - - io/vertx/pgclient/it/** - @@ -165,32 +203,6 @@ - - maven-failsafe-plugin - 2.21.0 - - - env-test - - integration-test - - integration-test - - - io/vertx/pgclient/it/EnvTest.java - - - test_host - test_database - 1234 - test_user - test_password - require - - - - - diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 92fdcf397f..b9db59e66f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,16 +1,3 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 4c634d8cdd..8d03702338 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -24,7 +24,6 @@ import java.util.List; @Source -//TODO smagellan: inspect examples public class SqlClientExamples { public void queries01(SqlClient client) { client diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 866c0f661d..d7cc0539bc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -35,7 +35,7 @@ protected void before() throws Throwable { if (this.server != null) { return; } - DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag("20.10.2"); + DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag(clickhouseVersion()); server = new ClickHouseContainer(imageName); server.start(); this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() @@ -54,6 +54,11 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } + private static String clickhouseVersion() { + String version = System.getProperty("embedded.clickhouse.version"); + return version == null ? "20.10.2" : version; + } + @Override protected void after() { if (server != null) { @@ -66,7 +71,8 @@ public ClickhouseNativeConnectOptions options() { } public static boolean isTestingWithExternalDatabase() { - return isSystemPropertyValid(connectionUri) || isSystemPropertyValid(tlsConnectionUri); + return isSystemPropertyValid(connectionUri); + //|| isSystemPropertyValid(tlsConnectionUri); } private static boolean isSystemPropertyValid(String systemProperty) { From 1e0e95a15de0232c10f6bbe06ad88158ec46ab42 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 13 Apr 2021 21:35:15 +0300 Subject: [PATCH 070/176] reworked ArrayColumnReader to support primitive array Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 133 +++--------------- .../codec/columns/ClickhouseColumnReader.java | 62 ++++---- .../impl/codec/columns/DateColumnReader.java | 10 ++ .../codec/columns/DateTime64ColumnReader.java | 10 ++ .../codec/columns/DateTimeColumnReader.java | 10 ++ .../codec/columns/Decimal32ColumnReader.java | 10 ++ .../codec/columns/Decimal64ColumnReader.java | 10 ++ .../codec/columns/Enum16ColumnReader.java | 16 +++ .../impl/codec/columns/Enum8ColumnReader.java | 16 +++ .../columns/FixedStringColumnReader.java | 16 +++ .../codec/columns/Float32ColumnReader.java | 9 +- .../codec/columns/Float64ColumnReader.java | 9 +- .../columns/GenericDecimalColumnReader.java | 10 ++ .../impl/codec/columns/IPv4ColumnReader.java | 16 +++ .../impl/codec/columns/IPv6ColumnReader.java | 15 +- .../codec/columns/Int128ColumnReader.java | 10 ++ .../codec/columns/IntervalColumnReader.java | 16 +++ .../columns/LowCardinalityColumnReader.java | 15 +- .../codec/columns/StringColumnReader.java | 16 +++ .../codec/columns/UInt16ColumnReader.java | 27 +++- .../codec/columns/UInt32ColumnReader.java | 27 +++- .../codec/columns/UInt64ColumnReader.java | 25 +++- .../impl/codec/columns/UInt8ColumnReader.java | 21 ++- .../impl/codec/columns/UUIDColumnReader.java | 10 ++ .../src/test/resources/log4j2-test.xml | 14 ++ 25 files changed, 372 insertions(+), 161 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index c150015335..5de51fb593 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,16 +19,12 @@ import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import java.sql.JDBCType; -import java.util.function.Function; - public class ArrayColumnReader extends ClickhouseColumnReader { private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private int[][] masterSlice; private int[][][] perRowsSlice; private Integer curDimension; @@ -36,13 +32,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private ClickhouseColumn nestedColumn; private Class elementClass; private Integer nItems; - private boolean resliced; private Object statePrefix; private Integer curLevelSliceSize; - private int[] curLevelSlice; - - private long sliceElementCount; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); @@ -62,21 +54,14 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - masterSlice = new int[columnDescriptor.arrayDimensionsCount() + 1][]; curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } - boolean maybeRequiresExtraEncoding = elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || elementTypeDescr.getNestedType().startsWith("Enum"); if (curDimension < columnDescriptor.arrayDimensionsCount()) { - if (maybeRequiresExtraEncoding) { - readAsPerRowSlices(in); - } else { - readAsMasterSlice(in); - } + readAsPerRowSlices(in); if (curDimension < columnDescriptor.arrayDimensionsCount()) { return null; } @@ -100,36 +85,25 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } } - if (maybeRequiresExtraEncoding) { - return nestedColumnReader.itemsArray; - } - resliced = true; - Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); - nestedColumnReader.itemsArray = null; - return resliceIntoArray(tmp, masterSlice, elementClass); + return nestedColumnReader.itemsArray; } - - Object[] emptyData = nestedColumn.emptyArray(); - if (maybeRequiresExtraEncoding) { - return emptyData; - } - resliced = true; - return resliceIntoArray(emptyData, masterSlice, elementClass); + return nestedColumn.emptyArray(); } @Override protected Object getElementInternal(int rowIdx, Class desired) { - Object[] reslicedRet; - if (resliced) { - reslicedRet = (Object[]) this.itemsArray; - return reslicedRet[rowIdx]; - } else { - desired = maybeUnwrapArrayElementType(desired); - Class forRecode = desired; - Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); - reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice[rowIdx], desired); - return reslicedRet; - } + desired = maybeUnwrapArrayElementType(desired); + return resliceIntoArray(nestedColumnReader, perRowsSlice[rowIdx], desired); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + throw new IllegalArgumentException("not implemented"); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + throw new IllegalArgumentException("not implemented"); } private Class maybeUnwrapArrayElementType(Class desired) { @@ -141,50 +115,17 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Object[] resliceIntoArray(Object[] data, int[][] sliceToUse, Class elementClass) { - Object[] intermData = data; - for (int i = sliceToUse.length - 1; i >= 0; --i) { - int[] slices = sliceToUse[i]; - intermData = resliceArray(intermData, slices, intermData.getClass()); - } - return (Object[]) intermData[0]; - } - - private Object[] resliceIntoArray(Function dataAccessor, int[][] sliceToUse, Class elementClass) { + private Object resliceIntoArray(ClickhouseColumnReader reader, int[][] sliceToUse, Class elementClass) { int i = sliceToUse.length - 1; int[] slices = sliceToUse[i]; - Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); + Object[] intermData = reader.slices(slices, elementClass); //resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); for (i = sliceToUse.length - 2; i >= 0; --i) { slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } - return (Object[]) intermData[0]; - } - - private Object[] resliceArray(Function dataAccessor, int[] slices, Class upperClass) { - IntPairIterator paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); - int tmpSliceIdx = 0; - while (paired.hasNext()) { - paired.next(); - int newSliceSz = paired.getValue() - paired.getKey(); - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - copyWithAccessor(dataAccessor, paired.getKey(), reslicedArray, 0, newSliceSz); - - newDataList[tmpSliceIdx] = reslicedArray; - ++tmpSliceIdx; - } - return newDataList; - } - - private void copyWithAccessor(Function srcAccessor, int srcPos, Object[] dest, int destPos, int length) { - for (int remaining = length; remaining > 0; --remaining) { - dest[destPos] = srcAccessor.apply(srcPos); - ++destPos; - ++srcPos; - } + return intermData[0]; } private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperClass) { @@ -204,7 +145,6 @@ private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperCl private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (nRows == 0) { - masterSlice = new int[0][]; perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; @@ -247,41 +187,4 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { } nItems = curLevelSliceSize; } - - private void readAsMasterSlice(ClickhouseStreamDataSource in) { - if (curDimension == 0) { - //masterSlice.add(Arrays.asList(0, nRows)); - masterSlice[curDimension] = new int[]{0, nRows}; - curLevelSliceSize = nRows; - } - if (nRows == 0) { - perRowsSlice = new int[0][][]; - curDimension = columnDescriptor.arrayDimensionsCount(); - return; - } - - long lastSliceSize = 0; - while (curDimension < columnDescriptor.arrayDimensionsCount()) { - if (curLevelSlice == null) { - curLevelSlice = new int[curLevelSliceSize + 1]; - curLevelSlice[0] = 0; - } - if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { - return; - } - for (int curLevelSliceIndex = 0; curLevelSliceIndex < curLevelSliceSize; ++curLevelSliceIndex) { - lastSliceSize = in.readLongLE(); - if (lastSliceSize > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); - } - ++sliceElementCount; - curLevelSlice[curLevelSliceIndex + 1] = (int) lastSliceSize; - } - curDimension += 1; - masterSlice[curDimension] = curLevelSlice; - curLevelSlice = null; - curLevelSliceSize = (int) lastSliceSize; - } - nItems = (int)lastSliceSize; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 189de982a1..2b23a3808d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -15,10 +15,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; - import java.util.BitSet; public abstract class ClickhouseColumnReader { + private static final Object NOP_STATE = new Object(); protected final int nRows; @@ -68,31 +68,18 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { - itemsArray = readItems(in); - if (itemsArray == null) { - return null; + protected Object[] asObjectsArrayWithGetElement(int startIncluding, int endExcluding, Class desired) { + Object[] ret = (Object[]) allocateOneDimArray(desired, endExcluding - startIncluding); + int arrayIdx = 0; + for (int i = startIncluding; i < endExcluding; ++i) { + ret[arrayIdx] = getElement(i, desired); + ++arrayIdx; } - return asObjectsArray(desired); - } - - protected Object[] asObjectsArray(Class desired) { - return (Object[]) itemsArray; - } - - protected Object[] allocateArray(Class desired, int length) { - if (desired == null) { - return new Object[length]; - } - return (Object[]) java.lang.reflect.Array.newInstance(desired, length); + return ret; } protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = allocateArray(desired, nRows); - for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i, desired); - } - return ret; + return asObjectsArrayWithGetElement(0, nRows, desired); } protected abstract Object readItems(ClickhouseStreamDataSource in); @@ -117,10 +104,6 @@ public boolean isPartial() { return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); } - public Object getItemsArray() { - return itemsArray; - } - public Object getElement(int rowIdx, Class desired) { if (nullsMap != null && nullsMap.get(rowIdx)) { return null; @@ -136,4 +119,31 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } + + public Object[] slices(int[] slices, Class desired) { + IntPairIterator slice = PairedIterator.of(slices); + int sliceCount = slices.length - 1; + Object[] ret = allocateTwoDimArray(desired, sliceCount, 0); + if (desired.isPrimitive()) { + if (columnDescriptor.isNullable()) { + throw new IllegalArgumentException("primitive arrays are not supported for nullable columns"); + } + for (int sliceIdx = 0; sliceIdx < sliceCount; ++sliceIdx) { + slice.next(); + int len = slice.getValue() - slice.getKey(); + Object tmp = allocateOneDimArray(desired, len); + System.arraycopy(itemsArray, slice.getKey(), tmp, 0, len); + ret[sliceIdx] = tmp; + } + } else { + for (int sliceIdx = 0; sliceIdx < sliceCount; ++sliceIdx) { + slice.next(); + ret[sliceIdx] = asObjectsArrayWithGetElement(slice.getKey(), slice.getValue(), ret.getClass().getComponentType().getComponentType()); + } + } + return ret; + } + + protected abstract Object[] allocateTwoDimArray(Class desired, int dim1, int dim2); + protected abstract Object allocateOneDimArray(Class desired, int length); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index ebbb757bb9..a951ad69b9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -32,4 +32,14 @@ protected Object getElementInternal(int rowIdx, Class desired) { Integer offset = (Integer) super.getElementInternal(rowIdx, desired); return MIN_VALUE.plusDays(offset); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new LocalDate[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new LocalDate[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 1a5e57d8a3..2de3b7312d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -51,4 +51,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new OffsetDateTime[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new OffsetDateTime[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index f80d369706..15a6737d8d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -49,4 +49,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new OffsetDateTime[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new OffsetDateTime[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index dd6bed5f82..dfff0877ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 6d286c2138..2dbe9fb847 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 7a3251491f..75c9f9458f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -36,4 +36,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { public Object[] recodeValues(Object[] src, Class desired) { return columnRecoder.recodeValues(src, desired); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired != null && desired.isEnum()) { + return (Object[]) java.lang.reflect.Array.newInstance(desired, dim1, dim2); + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired != null && desired.isEnum()) { + return java.lang.reflect.Array.newInstance(desired, length); + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 02649b12ef..a9165743a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -36,4 +36,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { public Object[] recodeValues(Object[] src, Class desired) { return columnRecoder.recodeValues(src, desired); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired != null && desired.isEnum()) { + return (Object[]) java.lang.reflect.Array.newInstance(desired, dim1, dim2); + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired != null && desired.isEnum()) { + return java.lang.reflect.Array.newInstance(desired, length); + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 33fc28e965..16b0a948a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -69,6 +69,22 @@ protected Object getElementInternal(int rowIdx, Class desired) { return tmp; } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == byte[].class) { + return new byte[dim1][dim2][]; + } + return new String[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == byte[].class) { + return new byte[length][]; + } + return new String[length]; + } + private String buildStringFromElement(byte[] tmp) { int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(tmp) : tmp.length - 1; return new String(tmp, 0, lastNonZeroIdx + 1, charset); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index a787cc16ef..37bf1eee81 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -40,7 +40,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Float[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Float[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index d774ce74a1..cf6343ff15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -41,7 +41,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Double[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Double[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index fbb8dd55d0..1069276929 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -49,4 +49,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index deb8e89b0b..85f39cfdd3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -38,6 +38,22 @@ protected Object getElementInternal(int rowIdx, Class desired) { return super.getElementInternal(rowIdx, desired); } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { + return new Inet4Address[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { + return new Inet4Address[length]; + } + return super.allocateOneDimArray(desired, length); + } + private static byte[] intBytes(Long l) { return new byte[] { (byte) (l >>> 24 & 0xFF), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 91b9006b43..ae720858dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -40,7 +40,18 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { + return new Inet6Address[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { + return new Inet6Address[length]; + } + return super.allocateOneDimArray(desired, length); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index f301f9dec9..b50576222f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { return ((BigInteger[]) this.itemsArray)[rowIdx]; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new BigInteger[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new BigInteger[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 85d4394cd7..0c91436277 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -33,4 +33,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return multiplier.multipliedBy(obj); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == Duration.class) { + return new Duration[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == Duration.class) { + return new Duration[length]; + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index a4bdc46591..93807c59f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -115,11 +115,6 @@ protected Object readItems(ClickhouseStreamDataSource in) { return itemsArray; } - @Override - protected Object[] asObjectsArray(Class desired) { - return super.asObjectsArrayWithGetElement(desired); - } - @Override public boolean isPartial() { return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); @@ -135,6 +130,16 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return indexColumn.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return indexColumn.allocateOneDimArray(desired, length); + } + static ClickhouseColumn uintColumn(int code) { if (code < 0 || code >= KEY_COLUMNS.length) { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index ac56b69e11..502b45dede 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -73,4 +73,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == byte[].class) { + return new byte[dim1][dim2][]; + } + return new String[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == byte[].class) { + return new byte[length][]; + } + return new String[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 17f1e4ce97..6e9ee79115 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -49,7 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == int.class) { + return new int[dim1][dim2]; + } + return new Integer[dim1][dim2]; + } + if (desired == short.class) { + return new short[dim1][dim2]; + } + return new Short[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + if (desired == int.class) { + return new int[length]; + } + return new Integer[length]; + } + if (desired == short.class) { + return new short[length]; + } + return new Short[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 81ba3c07ee..38e928e87e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -49,7 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == long.class) { + return new long[dim1][dim2]; + } + return new Long[dim1][dim2]; + } + if (desired == int.class) { + return new int[dim1][dim2]; + } + return new Integer[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + if (desired == long.class) { + return new long[length]; + } + return new Long[length]; + } + if (desired == int.class) { + return new int[length]; + } + return new Integer[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index e8293716a8..9fee947f8b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,11 +15,15 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; public class UInt64ColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(UInt64ColumnReader.class); + public static final int ELEMENT_SIZE = 8; public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { @@ -53,8 +57,25 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + return new Numeric[dim1][dim2]; + } + if (desired == long.class) { + return new long[dim1][dim2]; + } + return new Long[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + return new Numeric[length]; + } + if (desired == long.class) { + return new long[length]; + } + return new Long[length]; } static BigInteger unsignedBi(long l) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 047c1109e2..00cff5cffc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -49,15 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == short.class) { + return new short[dim1][dim2]; + } + return new Short[dim1][dim2]; + } + if (desired == byte.class) { + return new byte[dim1][dim2]; + } + return new Byte[dim1][dim2]; } @Override - protected Object[] allocateArray(Class desired, int length) { + protected Object allocateOneDimArray(Class desired, int length) { if (columnDescriptor.isUnsigned()) { + if (desired == short.class) { + return new short[length]; + } return new Short[length]; } + if (desired == byte.class) { + return new byte[length]; + } return new Byte[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 5e443e2136..a81dc5ed7d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -41,4 +41,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new UUID[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new UUID[length]; + } } diff --git a/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml b/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000000..8338f1a2df --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From daea1c0e4c311c7abb158cbe147e581298db3533 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 8 May 2021 09:59:22 +0300 Subject: [PATCH 071/176] added charset parameter to readPascalString Signed-off-by: vladimir --- .../impl/codec/ByteBufUtils.java | 5 +- .../impl/codec/ClickhouseExceptionReader.java | 12 +- .../impl/codec/DatabaseMetadataReader.java | 7 +- .../codec/Lz4ClickhouseStreamDataSource.java | 8 +- .../impl/codec/MultistringMessageReader.java | 7 +- .../impl/codec/PacketReader.java | 10 +- .../codec/RawClickhouseStreamDataSource.java | 8 +- .../codec/columns/UInt64ColumnReader.java | 5 +- .../ArraySerDesTest.java | 2 +- .../NestedExceptionsTest.java | 8 +- .../clickhousenativeclient/TestRunner.java | 319 ++++++++++++++++++ 11 files changed, 365 insertions(+), 26 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 8c886401b7..baa2df84eb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -15,6 +15,7 @@ import io.netty.buffer.ByteBuf; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class ByteBufUtils { @@ -57,7 +58,7 @@ public static Integer readULeb128(ByteBuf buf) { return value; } - public static String readPascalString(ByteBuf buf) { + public static String readPascalString(ByteBuf buf, Charset charset) { int readerIndex = buf.readerIndex(); Integer length = readULeb128(buf); if (length == null) { @@ -66,7 +67,7 @@ public static String readPascalString(ByteBuf buf) { if (buf.readableBytes() >= length) { byte[] b = new byte[length]; buf.readBytes(b); - return new String(b, StandardCharsets.UTF_8); + return new String(b, charset); } buf.readerIndex(readerIndex); return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 23d741c23d..066e7cd411 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -16,18 +16,24 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class ClickhouseExceptionReader { private final List exceptionBlocks = new ArrayList<>(); + private final Charset charset; private Integer code; private String name; private String message; private String stacktrace; private Boolean hasNested; + public ClickhouseExceptionReader(Charset charset) { + this.charset = charset; + } + public ClickhouseServerException readFrom(ByteBuf in) { boolean hadNested; @@ -40,19 +46,19 @@ public ClickhouseServerException readFrom(ByteBuf in) { } } if (name == null) { - name = ByteBufUtils.readPascalString(in); + name = ByteBufUtils.readPascalString(in, charset); if (name == null) { return null; } } if (message == null) { - message = ByteBufUtils.readPascalString(in); + message = ByteBufUtils.readPascalString(in, charset); if (message == null) { return null; } } if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); + stacktrace = ByteBufUtils.readPascalString(in, charset); if (stacktrace == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 691dd97b3a..939b638eb1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -18,6 +18,7 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.time.Duration; import java.time.ZoneId; import java.util.Map; @@ -43,7 +44,7 @@ public DatabaseMetadataReader(String fullClientName, Map propert public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { if (productName == null) { - productName = ByteBufUtils.readPascalString(in); + productName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (productName == null) { return null; } @@ -67,13 +68,13 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } } if (serverZoneIdName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - serverZoneIdName = ByteBufUtils.readPascalString(in); + serverZoneIdName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (serverZoneIdName == null) { return null; } } if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { - displayName = ByteBufUtils.readPascalString(in); + displayName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (displayName == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index d3d52a809f..bcfffafa25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -23,6 +23,7 @@ import net.jpountz.lz4.LZ4FastDecompressor; import ru.yandex.clickhouse.util.ClickHouseCityHash; +import java.nio.charset.Charset; import java.util.Arrays; public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { @@ -33,7 +34,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource //cityhash size + compression method byte + sizeWithHeader + decompressed size public static final int HEADER_LENGTH = 16 + CHECKSUMED_HEADER_LENGTH; - + private final Charset charset; private final LZ4Factory lz4Factory; private final ByteBuf decompressedData; private long[] serverCityHash; @@ -41,9 +42,10 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private Long uncompressedSize; private ByteBuf arrayBb; - public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { + public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, Charset charset, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; this.decompressedData = alloc.heapBuffer(); + this.charset = charset; } @Override @@ -149,7 +151,7 @@ public void skipBytes(int length) { @Override public String readPascalString() { - return ByteBufUtils.readPascalString(decompressedData); + return ByteBufUtils.readPascalString(decompressedData, charset); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index 4bf76b36b7..1a4986ab24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -15,14 +15,17 @@ import io.netty.buffer.ByteBuf; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class MultistringMessageReader { private final List strings; + private final Charset charset; private Integer stringsExpected; - public MultistringMessageReader() { + public MultistringMessageReader(Charset charset) { + this.charset = charset; strings = new ArrayList<>(); } @@ -31,7 +34,7 @@ public List readFrom(ByteBuf in, ServerPacketType packetType) { stringsExpected = stringsInMessage(packetType); } String ln; - while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in)) != null) { + while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in, charset)) != null) { strings.add(ln); } if (strings.size() == stringsExpected) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index f746820ca1..f5912be302 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -138,7 +138,7 @@ private String rowAsString(Row row, RowDesc rowDesc) { private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { - multistringReader = new MultistringMessageReader(); + multistringReader = new MultistringMessageReader(md.getStringCharset()); } multistringMessage = multistringReader.readFrom(in, type); } @@ -210,7 +210,7 @@ private QueryProgressInfo readProgressBlock(ByteBuf in) { private ClickhouseServerException readExceptionBlock(ByteBuf in) { if (exceptionReader == null) { - exceptionReader = new ClickhouseExceptionReader(); + exceptionReader = new ClickhouseExceptionReader(md.getStringCharset()); } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { @@ -230,7 +230,7 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in) { private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, boolean preferCompressionIfEnabled) { if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); + tempTableInfo = ByteBufUtils.readPascalString(in, md.getStringCharset()); if (tempTableInfo == null) { return null; } @@ -258,9 +258,9 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc, boolean preferCompressionIfEnabled) { if (lz4Factory == null || !preferCompressionIfEnabled) { - return new RawClickhouseStreamDataSource(); + return new RawClickhouseStreamDataSource(md.getStringCharset()); } else { - return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); + return new Lz4ClickhouseStreamDataSource(lz4Factory, md.getStringCharset(), alloc); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 6d0b708d09..75b85cb4cd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -17,10 +17,14 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; +import java.nio.charset.Charset; + public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private final Charset charset; private ByteBuf source; - public RawClickhouseStreamDataSource() { + public RawClickhouseStreamDataSource(Charset charset) { + this.charset = charset; } @Override @@ -40,7 +44,7 @@ public void skipBytes(int length) { @Override public String readPascalString() { - return ByteBufUtils.readPascalString(source); + return ByteBufUtils.readPascalString(source, charset); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 9fee947f8b..098566d801 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,15 +15,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; public class UInt64ColumnReader extends ClickhouseColumnReader { - private static final Logger LOG = LoggerFactory.getLogger(UInt64ColumnReader.class); - public static final int ELEMENT_SIZE = 8; public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { @@ -33,6 +29,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { //TODO: maybe read elements as soon as they arrive if we have enough data (> ELEMENT_SIZE) + //TODO: maybe store all fixed-size types within (direct)buffer (+WeakReference + Queue to release buffer) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 583fa555ca..6bb0ef7556 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -88,7 +88,7 @@ public void doSerDes() { sink.finish(); ClickhouseColumnReader reader = col.reader(data.size()); - ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(); + ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(StandardCharsets.UTF_8); ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); reader.readColumn(ds); for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 9364b88727..bbaa6b71bb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -18,12 +18,15 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; import java.util.Collections; import java.util.List; import java.util.Map; @@ -43,7 +46,10 @@ public void checkExceptions() throws IOException { } PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - PacketReader rdr = new PacketReader(null, "none", Collections.emptyMap(), null); + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); + PacketReader rdr = new PacketReader(md, "none", Collections.emptyMap(), null); ClickhouseServerException exception = (ClickhouseServerException)rdr.receivePacket(allocator, buf); Assert.assertEquals("DB::Exception", exception.getName()); ClickhouseServerException nested = (ClickhouseServerException) exception.getCause(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java new file mode 100644 index 0000000000..10ccfaf26c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java @@ -0,0 +1,319 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.core.Base64Variants; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.*; +import io.vertx.sqlclient.impl.ArrayTuple; +import net.jpountz.lz4.LZ4Compressor; +import net.jpountz.lz4.LZ4Factory; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class TestRunner { + private static final Logger LOG = LoggerFactory.getLogger(TestRunner.class); + + + public static void main(String[] args) throws Throwable { + //deserializeBlock(); + //System.exit(0); + + //testCompression(); + //System.exit(1); + + //ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); + ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions( + new SqlConnectOptions() + .setPort(9000) + .setHost("localhost") + .setUser("default") + .setPassword("default") + .setDatabase("default") + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") + //.addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") + .addProperty(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse") + .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug") + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") + ); + Vertx vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, opts, ar0 -> { + LOG.info("conn succeeded: " + ar0.succeeded(), ar0.cause()); + if (ar0.succeeded()) { + selectTest(ar0.result(), vertx); + } + }); + //Thread.sleep(25 * 1000); + //vertx.close(r -> LOG.info("vertx closed")); + } + + private static void deserializeBlock() throws IOException { + String filename = "/tmp/forged_nested.bin"; + try (InputStream os = new FileInputStream(filename)) { + byte[] buf = new byte[(int) new File(filename).length()]; + System.err.println("len: " + buf.length); + int nRead = os.read(buf); + System.err.println(nRead); + System.err.println("serialized:"); + System.err.println(Base64Variants.MIME.encode(buf).replace("\\n", "\n")); + } + } + + private static void serializeBlock() throws IOException { + String src1 = "AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi\n" + + " YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi\n" + + " NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm\n" + + " OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u\n" + + " ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv\n" + + " Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv\n" + + " YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg\n" + + " aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5\n" + + " KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl\n" + + " YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3\n" + + " LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv\n" + + " CgA="; + String src = src1.replace(" ", "").replace("\n", ""); + byte[] bytes = Base64Variants.MIME.decode(src1); + try (OutputStream os = new FileOutputStream("/tmp/forged_nested.bin")) { + os.write(bytes); + } + String encoded = Base64Variants.MIME.encode(bytes); + System.err.println("src"); + System.err.println(src); + System.err.println("encoded:"); + System.err.println(encoded); + System.err.println(encoded.equals(src)); + } + + private static void testCompression() throws IOException { + int nItems = 256; + int[] b1 = new int[nItems]; + for (int i = 0; i < nItems; ++i) { + b1[i] = Integer.MAX_VALUE - 512 + i; + } + + ByteBuf buf = Unpooled.wrappedBuffer(new byte[b1.length * Integer.BYTES]); + buf.writerIndex(0); + Arrays.stream(b1).forEach(buf::writeIntLE); + + compressAndPrintStats(buf.array()); + String s = Arrays.stream(b1).boxed().map(Object::toString).collect(Collectors.joining(",")); + compressAndPrintStats(s.getBytes(StandardCharsets.US_ASCII)); + }; + + private static void compressAndPrintStats(byte[] bytes) { + LZ4Factory factory = LZ4Factory.unsafeInstance(); + LZ4Compressor compr = factory.fastCompressor(); + byte[] compressed = compr.compress(bytes); + System.err.printf("uncompr: %d, compressed: %d%n", bytes.length, compressed.length); + } + + private static void insert_test2(ClickhouseNativeConnection conn, Vertx vertx) { + List batch1 = Arrays.asList( + Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}} }), + Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null}, {null}} }), + Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}} }) + ); + + List batch2 = Arrays.asList( + Tuple.of(1, (Object) new Object[] { "str1_1", "str1_2", null }), + Tuple.of(2, (Object) new Object[] { "str2_1", "str2_2", null, null }), + Tuple.of(3, (Object) new Object[] { "str3_1", "str3_2", null, null }) + ); + + OffsetDateTime dt = OffsetDateTime.of(2019, 1, 1, 0, 1, 1, 1234, ZoneOffset.ofHours(3)); + List batch3 = Arrays.asList(Tuple.of(1, dt)); + + List batch4 = Arrays.asList(Tuple.of(1, 0)); + + + conn.preparedQuery("INSERT INTO vertx_test_string (id, nullable_array3_lc_t) VALUES").executeBatch(batch1, result -> { + LOG.info("result: " + result.succeeded()); + if (result.failed()) { + LOG.error("error inserting", result.cause()); + } + conn.close(); + vertx.close(); + }); + } + + private static void insert_test(ClickhouseNativeConnection conn, Vertx vertx) { + List batch = Arrays.asList(Tuple.of(1, "a", 1), Tuple.of(null, "b", 2), Tuple.of(3, null, 3), Tuple.of(4, "", 4)); + conn.preparedQuery("INSERT INTO insert_select_testtable (a, b, c) VALUES (1, 'a', 1)").execute(result -> { + LOG.info("result: " + result.succeeded()); + if (result.failed()) { + LOG.error("error inserting", result.cause()); + } + conn.close(); + vertx.close(); + }); + } + + private static void test4(ClickhouseNativeConnection conn, Vertx vertx) { + List types = Stream.of("Int8", "Int16") + .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + .collect(Collectors.toList()); + List typeNames = types.stream() + .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + Iterator typesIter = types.iterator(); + ClickhouseNativeColumnDescriptor type = typesIter.next(); + String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + type.getMinValue(), type.getUnparsedNativeType(), type.getMaxValue(), type.getUnparsedNativeType()); + conn.query(query).execute( + res -> { + ClickhouseNativeColumnDescriptor type2 = typesIter.next(); + String query2 = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + type2.getMinValue(), type2.getUnparsedNativeType(), type2.getMaxValue(), type2.getUnparsedNativeType()); + conn.query(query2).execute(res2 -> { + conn.close(); + vertx.close(); + }); + } + ); + } + + private static void test3(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "select RESOURCE, MGR_ID from amazon_train limit 55"; + String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; + AtomicLong l = new AtomicLong(0); + conn.prepare(query, ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + // Fetch 50 rows at a time + RowStream stream = pq.createStream(50, ArrayTuple.EMPTY); + // Use the stream + stream.exceptionHandler(err -> { + System.out.println("Error: " + err.getMessage()); + }); + stream.endHandler(v -> { + System.out.println("got End of stream"); + vertx.close(); + }); + stream.handler(row -> { + long val = l.incrementAndGet(); + System.out.println("val: " + val + "; RESOURCE: " + row.getString("name") + "; MGR_ID: " + row.getInteger("value")); + }); + } + }); + } + + private static void test2(ClickhouseNativeConnection conn) { + conn.prepare("select RESOURCE, MGR_ID from amazon_train limit 5", ar1 -> { + LOG.info("prepare succeeded: " + ar1.succeeded(), ar1.cause()); + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + } + }); + } + + private static void selectTest(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "SHOW TABLES FROM system LIKE '%user%'" + //String query = "select RESOURCE, MGR_ID from amazon_train limit 5"; + //String query = "select RESOURCE, MGR_ID, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2 from amazon_train limit 5"; + //String query = "SELECT CAST(4, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST('abcdef', 'FixedString(6)') AS str_col2 " + + // "UNION ALL " + + // "SELECT CAST(255, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST(NULL, 'Nullable(FixedString(6))') AS str_col2 "; + //String query = "SELECT array(array(1,2), array(3,NULL)) AS RESOURCE, 'aa' AS str_col2"; + //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))')"; + //String query = "select CAST(4, 'LowCardinality(Nullable(UInt8))') AS RESOURCE, 'aa' AS str_col1"; + //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))') AS RESOURCE"; + //String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; + //String query = "select CAST('2019-01-01 12:13:14.123456' AS Nullable(DateTime64(6))) AS name, 4 AS value"; + //String query = "select cast('047ae584-b8f3-4d7d-be90-257de2ab35b9', 'UINSERTUID') as name"; + //String query = "select cast(32.2, 'Decimal128(10)') as name"; + //String query = "select CAST('aa', 'Nullable(Enum16(\'aa\' = 1))')" + //String query = "SELECT tuple(1,NULL) AS x, toTypeName(x) as name"; + //String query = "SELECT CAST('bb', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r1' as col_name UNION ALL " + + // " SELECT CAST(NULL, 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r2' as col_name UNION ALL " + + // " SELECT CAST('aa', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r3' as col_name"; + //"Array(Array(LowCardinality(Nullable(String))))" + //String query = "select CAST('aa', 'LowCardinality(Nullable(String))') as name, 'r1' as col_name UNION ALL " + + // " select CAST(NULL, 'LowCardinality(Nullable(String))') as name, 'r2' as col_name UNION ALL " + + // " select CAST('bb', 'LowCardinality(Nullable(String))') as name, 'r3' as col_name"; + //String query = "INSERT INTO insert_select_testtable (*) VALUES"; + //String query = "SELECT array(array('A', 'B'), array('C', 'D', 'E', 'F', NULL)) AS name, 'r1' AS col_name"; + //String query = "SELECT array('A', 'B') AS name, 'r1' as col_name"; + //String query = "SELECT array(array(),array(4, NULL)) AS name, 'r1' as col_name"; + //String query = "select 0.9 as name, Inf as v2, NaN as v3, 'r1' as col_name"; + //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; + //String query = "SELECT test_int_2,test_int_4,test_int_8,test_float_4,test_float_8,test_numeric,test_decimal,test_boolean,test_char,test_varchar,test_date from basicdatatype where id = 1"; + //String query = "SELECT CAST('1999-12-31', 'Date') as test_numeric"; + //SELECT toTypeName(INTERVAL 4 DAY) //interval test + //select * from system.data_type_families where name like 'Interval%'; + //String query = "select toIPv6('2a02:aa08:ecolValue2000:3100::2') as col1, toIPv4('255.168.21.255') as col2"; + //String query = "select nullable_array3_lc_t from test_insert_string where id=1 limit 1";"; + //String query = "SELECT CAST('[[[\\'1_str1_1\\',\\'str1_2\\',NULL], [NULL]], [[\\'str1_3\\',\\'str1_4\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + + // "SELECT CAST('[[[\\'2_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + + // "SELECT CAST('[[[\\'3_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))')"; + //String query = "select CAST('2019-01-01 00:01:01.123456789', 'DateTime64(9, \\'Europe/Moscow\\')')"; + //String query = "select simple_t from vertx_test_enum8 order by id"; + //String query = "select * from (select [[[]],[[]]] as a UNION ALL select [[[]],[[]]] as a) t1;"; + String query = "select arrayJoin(x), x from (select groupArray(number) as x from (select * from system.numbers limit 10000) as t) limit 3000"; + long start = System.currentTimeMillis(); + conn.query(query).execute(ret1 -> { + LOG.info("query succeeded: " + ret1.succeeded()); + if (ret1.succeeded()) { + RowSet rSet = ret1.result(); + LOG.info("rowDesc: " + rSet.columnDescriptors() + " row count: " + rSet.rowCount()); + for (Row row : rSet) { + Object colValue1 = row.get(long[].class, 1); + //Object colValue2 = row.getValue(1); + //Object v2 = row.getValue("v2"); + //Object v3 = row.getValue("v3"); + LOG.info("got row: \"" + colValue1 + "\"; tp: " + (colValue1 == null ? null : colValue1.getClass())); + } + } + //81037 if read elements on arrival + LOG.info("closing vertx, total time: " + (System.currentTimeMillis() - start) + " millis"); + conn.close(); + vertx.close(); + }); + } + + private static void prepareQueryTest(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; + //String query = "SELECT test_date FROM basicdatatype WHERE id = 1"; + String query = "SELECT test_float_8 FROM basicdatatype WHERE id = 1"; + conn.preparedQuery(query) + .execute(result -> { + if (result.failed()) { + LOG.error("error executing query", result.cause()); + vertx.close(); + } + Row row = result.result().iterator().next(); + LOG.info("col1: " + row.getValue(0)); + vertx.close(); + }); + } +} From c8b538d1b0f052b06a81bfc745871530d31e87f2 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 8 May 2021 10:01:26 +0300 Subject: [PATCH 072/176] removed TestRunner Signed-off-by: vladimir --- .../clickhousenativeclient/TestRunner.java | 319 ------------------ 1 file changed, 319 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java deleted file mode 100644 index 10ccfaf26c..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - -package io.vertx.clickhousenativeclient; - -import com.fasterxml.jackson.core.Base64Variants; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.sqlclient.*; -import io.vertx.sqlclient.impl.ArrayTuple; -import net.jpountz.lz4.LZ4Compressor; -import net.jpountz.lz4.LZ4Factory; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class TestRunner { - private static final Logger LOG = LoggerFactory.getLogger(TestRunner.class); - - - public static void main(String[] args) throws Throwable { - //deserializeBlock(); - //System.exit(0); - - //testCompression(); - //System.exit(1); - - //ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); - ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions( - new SqlConnectOptions() - .setPort(9000) - .setHost("localhost") - .setUser("default") - .setPassword("default") - .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") - //.addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") - .addProperty(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse") - .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug") - .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") - .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") - ); - Vertx vertx = Vertx.vertx(); - ClickhouseNativeConnection.connect(vertx, opts, ar0 -> { - LOG.info("conn succeeded: " + ar0.succeeded(), ar0.cause()); - if (ar0.succeeded()) { - selectTest(ar0.result(), vertx); - } - }); - //Thread.sleep(25 * 1000); - //vertx.close(r -> LOG.info("vertx closed")); - } - - private static void deserializeBlock() throws IOException { - String filename = "/tmp/forged_nested.bin"; - try (InputStream os = new FileInputStream(filename)) { - byte[] buf = new byte[(int) new File(filename).length()]; - System.err.println("len: " + buf.length); - int nRead = os.read(buf); - System.err.println(nRead); - System.err.println("serialized:"); - System.err.println(Base64Variants.MIME.encode(buf).replace("\\n", "\n")); - } - } - - private static void serializeBlock() throws IOException { - String src1 = "AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi\n" + - " YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi\n" + - " NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm\n" + - " OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u\n" + - " ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv\n" + - " Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv\n" + - " YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg\n" + - " aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5\n" + - " KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl\n" + - " YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3\n" + - " LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv\n" + - " CgA="; - String src = src1.replace(" ", "").replace("\n", ""); - byte[] bytes = Base64Variants.MIME.decode(src1); - try (OutputStream os = new FileOutputStream("/tmp/forged_nested.bin")) { - os.write(bytes); - } - String encoded = Base64Variants.MIME.encode(bytes); - System.err.println("src"); - System.err.println(src); - System.err.println("encoded:"); - System.err.println(encoded); - System.err.println(encoded.equals(src)); - } - - private static void testCompression() throws IOException { - int nItems = 256; - int[] b1 = new int[nItems]; - for (int i = 0; i < nItems; ++i) { - b1[i] = Integer.MAX_VALUE - 512 + i; - } - - ByteBuf buf = Unpooled.wrappedBuffer(new byte[b1.length * Integer.BYTES]); - buf.writerIndex(0); - Arrays.stream(b1).forEach(buf::writeIntLE); - - compressAndPrintStats(buf.array()); - String s = Arrays.stream(b1).boxed().map(Object::toString).collect(Collectors.joining(",")); - compressAndPrintStats(s.getBytes(StandardCharsets.US_ASCII)); - }; - - private static void compressAndPrintStats(byte[] bytes) { - LZ4Factory factory = LZ4Factory.unsafeInstance(); - LZ4Compressor compr = factory.fastCompressor(); - byte[] compressed = compr.compress(bytes); - System.err.printf("uncompr: %d, compressed: %d%n", bytes.length, compressed.length); - } - - private static void insert_test2(ClickhouseNativeConnection conn, Vertx vertx) { - List batch1 = Arrays.asList( - Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}} }), - Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null}, {null}} }), - Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}} }) - ); - - List batch2 = Arrays.asList( - Tuple.of(1, (Object) new Object[] { "str1_1", "str1_2", null }), - Tuple.of(2, (Object) new Object[] { "str2_1", "str2_2", null, null }), - Tuple.of(3, (Object) new Object[] { "str3_1", "str3_2", null, null }) - ); - - OffsetDateTime dt = OffsetDateTime.of(2019, 1, 1, 0, 1, 1, 1234, ZoneOffset.ofHours(3)); - List batch3 = Arrays.asList(Tuple.of(1, dt)); - - List batch4 = Arrays.asList(Tuple.of(1, 0)); - - - conn.preparedQuery("INSERT INTO vertx_test_string (id, nullable_array3_lc_t) VALUES").executeBatch(batch1, result -> { - LOG.info("result: " + result.succeeded()); - if (result.failed()) { - LOG.error("error inserting", result.cause()); - } - conn.close(); - vertx.close(); - }); - } - - private static void insert_test(ClickhouseNativeConnection conn, Vertx vertx) { - List batch = Arrays.asList(Tuple.of(1, "a", 1), Tuple.of(null, "b", 2), Tuple.of(3, null, 3), Tuple.of(4, "", 4)); - conn.preparedQuery("INSERT INTO insert_select_testtable (a, b, c) VALUES (1, 'a', 1)").execute(result -> { - LOG.info("result: " + result.succeeded()); - if (result.failed()) { - LOG.error("error inserting", result.cause()); - } - conn.close(); - vertx.close(); - }); - } - - private static void test4(ClickhouseNativeConnection conn, Vertx vertx) { - List types = Stream.of("Int8", "Int16") - .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) - .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) - .collect(Collectors.toList()); - List typeNames = types.stream() - .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); - Iterator typesIter = types.iterator(); - ClickhouseNativeColumnDescriptor type = typesIter.next(); - String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - type.getMinValue(), type.getUnparsedNativeType(), type.getMaxValue(), type.getUnparsedNativeType()); - conn.query(query).execute( - res -> { - ClickhouseNativeColumnDescriptor type2 = typesIter.next(); - String query2 = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - type2.getMinValue(), type2.getUnparsedNativeType(), type2.getMaxValue(), type2.getUnparsedNativeType()); - conn.query(query2).execute(res2 -> { - conn.close(); - vertx.close(); - }); - } - ); - } - - private static void test3(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "select RESOURCE, MGR_ID from amazon_train limit 55"; - String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; - AtomicLong l = new AtomicLong(0); - conn.prepare(query, ar1 -> { - if (ar1.succeeded()) { - PreparedStatement pq = ar1.result(); - // Fetch 50 rows at a time - RowStream stream = pq.createStream(50, ArrayTuple.EMPTY); - // Use the stream - stream.exceptionHandler(err -> { - System.out.println("Error: " + err.getMessage()); - }); - stream.endHandler(v -> { - System.out.println("got End of stream"); - vertx.close(); - }); - stream.handler(row -> { - long val = l.incrementAndGet(); - System.out.println("val: " + val + "; RESOURCE: " + row.getString("name") + "; MGR_ID: " + row.getInteger("value")); - }); - } - }); - } - - private static void test2(ClickhouseNativeConnection conn) { - conn.prepare("select RESOURCE, MGR_ID from amazon_train limit 5", ar1 -> { - LOG.info("prepare succeeded: " + ar1.succeeded(), ar1.cause()); - if (ar1.succeeded()) { - PreparedStatement pq = ar1.result(); - } - }); - } - - private static void selectTest(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "SHOW TABLES FROM system LIKE '%user%'" - //String query = "select RESOURCE, MGR_ID from amazon_train limit 5"; - //String query = "select RESOURCE, MGR_ID, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2 from amazon_train limit 5"; - //String query = "SELECT CAST(4, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST('abcdef', 'FixedString(6)') AS str_col2 " + - // "UNION ALL " + - // "SELECT CAST(255, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST(NULL, 'Nullable(FixedString(6))') AS str_col2 "; - //String query = "SELECT array(array(1,2), array(3,NULL)) AS RESOURCE, 'aa' AS str_col2"; - //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))')"; - //String query = "select CAST(4, 'LowCardinality(Nullable(UInt8))') AS RESOURCE, 'aa' AS str_col1"; - //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))') AS RESOURCE"; - //String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; - //String query = "select CAST('2019-01-01 12:13:14.123456' AS Nullable(DateTime64(6))) AS name, 4 AS value"; - //String query = "select cast('047ae584-b8f3-4d7d-be90-257de2ab35b9', 'UINSERTUID') as name"; - //String query = "select cast(32.2, 'Decimal128(10)') as name"; - //String query = "select CAST('aa', 'Nullable(Enum16(\'aa\' = 1))')" - //String query = "SELECT tuple(1,NULL) AS x, toTypeName(x) as name"; - //String query = "SELECT CAST('bb', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r1' as col_name UNION ALL " + - // " SELECT CAST(NULL, 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r2' as col_name UNION ALL " + - // " SELECT CAST('aa', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r3' as col_name"; - //"Array(Array(LowCardinality(Nullable(String))))" - //String query = "select CAST('aa', 'LowCardinality(Nullable(String))') as name, 'r1' as col_name UNION ALL " + - // " select CAST(NULL, 'LowCardinality(Nullable(String))') as name, 'r2' as col_name UNION ALL " + - // " select CAST('bb', 'LowCardinality(Nullable(String))') as name, 'r3' as col_name"; - //String query = "INSERT INTO insert_select_testtable (*) VALUES"; - //String query = "SELECT array(array('A', 'B'), array('C', 'D', 'E', 'F', NULL)) AS name, 'r1' AS col_name"; - //String query = "SELECT array('A', 'B') AS name, 'r1' as col_name"; - //String query = "SELECT array(array(),array(4, NULL)) AS name, 'r1' as col_name"; - //String query = "select 0.9 as name, Inf as v2, NaN as v3, 'r1' as col_name"; - //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; - //String query = "SELECT test_int_2,test_int_4,test_int_8,test_float_4,test_float_8,test_numeric,test_decimal,test_boolean,test_char,test_varchar,test_date from basicdatatype where id = 1"; - //String query = "SELECT CAST('1999-12-31', 'Date') as test_numeric"; - //SELECT toTypeName(INTERVAL 4 DAY) //interval test - //select * from system.data_type_families where name like 'Interval%'; - //String query = "select toIPv6('2a02:aa08:ecolValue2000:3100::2') as col1, toIPv4('255.168.21.255') as col2"; - //String query = "select nullable_array3_lc_t from test_insert_string where id=1 limit 1";"; - //String query = "SELECT CAST('[[[\\'1_str1_1\\',\\'str1_2\\',NULL], [NULL]], [[\\'str1_3\\',\\'str1_4\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + - // "SELECT CAST('[[[\\'2_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + - // "SELECT CAST('[[[\\'3_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))')"; - //String query = "select CAST('2019-01-01 00:01:01.123456789', 'DateTime64(9, \\'Europe/Moscow\\')')"; - //String query = "select simple_t from vertx_test_enum8 order by id"; - //String query = "select * from (select [[[]],[[]]] as a UNION ALL select [[[]],[[]]] as a) t1;"; - String query = "select arrayJoin(x), x from (select groupArray(number) as x from (select * from system.numbers limit 10000) as t) limit 3000"; - long start = System.currentTimeMillis(); - conn.query(query).execute(ret1 -> { - LOG.info("query succeeded: " + ret1.succeeded()); - if (ret1.succeeded()) { - RowSet rSet = ret1.result(); - LOG.info("rowDesc: " + rSet.columnDescriptors() + " row count: " + rSet.rowCount()); - for (Row row : rSet) { - Object colValue1 = row.get(long[].class, 1); - //Object colValue2 = row.getValue(1); - //Object v2 = row.getValue("v2"); - //Object v3 = row.getValue("v3"); - LOG.info("got row: \"" + colValue1 + "\"; tp: " + (colValue1 == null ? null : colValue1.getClass())); - } - } - //81037 if read elements on arrival - LOG.info("closing vertx, total time: " + (System.currentTimeMillis() - start) + " millis"); - conn.close(); - vertx.close(); - }); - } - - private static void prepareQueryTest(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; - //String query = "SELECT test_date FROM basicdatatype WHERE id = 1"; - String query = "SELECT test_float_8 FROM basicdatatype WHERE id = 1"; - conn.preparedQuery(query) - .execute(result -> { - if (result.failed()) { - LOG.error("error executing query", result.cause()); - vertx.close(); - } - Row row = result.result().iterator().next(); - LOG.info("col1: " + row.getValue(0)); - vertx.close(); - }); - } -} From 9212824a57676f0dc73c2a4fd2024c8ee18ab6a3 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 9 May 2021 22:30:40 +0300 Subject: [PATCH 073/176] rebasing onto master Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 2 +- .../ClickhouseNativePool.java | 4 ++-- .../ClickhouseNativeConnectionFactory.java | 19 ++++++++++-------- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../impl/ClickhouseNativePoolImpl.java | 20 +++++++++---------- .../ClickhouseNativeSocketConnection.java | 2 +- 6 files changed, 26 insertions(+), 23 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 667aa0cff9..7e33378c9d 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.0.3-SNAPSHOT + 4.1.0-SNAPSHOT vertx-clickhouse-native-client diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index 4e67f117c5..725c4602df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -29,11 +29,11 @@ static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); - return ClickhouseNativePoolImpl.create(vertx.getOrCreateContext(), true, connectOptions, poolOptions); + return ClickhouseNativePoolImpl.create(vertx, true, connectOptions, poolOptions); } static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseNativePoolImpl.create(((VertxInternal)vertx).getOrCreateContext(), false, connectOptions, poolOptions); + return ClickhouseNativePoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index b85aadf24a..a9e839481f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -18,6 +18,8 @@ import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.VertxInternal; +import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; @@ -34,8 +36,8 @@ public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase private final LZ4Factory lz4Factory; - ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { - super(context, options); + ClickhouseNativeConnectionFactory(VertxInternal vertx, ClickhouseNativeConnectOptions options) { + super(vertx, options); this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); } @@ -68,7 +70,8 @@ protected void configureNetClientOptions(NetClientOptions netClientOptions) { @Override protected void doConnectInternal(Promise promise) { - doConnect().flatMap(conn -> { + PromiseInternal promiseInternal = (PromiseInternal) promise; + doConnect(ConnectionFactory.asEventLoopContext(promiseInternal.context())).flatMap(conn -> { ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; socket.init(); return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) @@ -76,19 +79,19 @@ protected void doConnectInternal(Promise promise) { }).onComplete(promise); } - private Future doConnect() { + private Future doConnect(EventLoopContext ctx) { Future soFut; try { soFut = netClient.connect(socketAddress, (String) null); } catch (Exception e) { // Client is closed - return context.failedFuture(e); + return ctx.failedFuture(e); } - return soFut.map(so -> newSocketConnection((NetSocketInternal) so)); + return soFut.map(so -> newSocketConnection(ctx, (NetSocketInternal) so)); } - private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { + private ClickhouseNativeSocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, context, lz4Factory); + preparedStatementCacheSqlFilter, ctx, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index 20359a0887..87e5149741 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -31,7 +31,7 @@ public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { ClickhouseNativeConnectionFactory client; try { - client = new ClickhouseNativeConnectionFactory(ConnectionFactory.asEventLoopContext(ctx), options); + client = new ClickhouseNativeConnectionFactory(ctx.owner(), options); } catch (Exception e) { return ctx.failedFuture(e); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 702f335e2c..fd1675dfd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -18,6 +18,7 @@ import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.VertxInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; @@ -28,29 +29,28 @@ import io.vertx.sqlclient.impl.tracing.QueryTracer; public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { - public static ClickhouseNativePoolImpl create(ContextInternal context, boolean closeVertx, + public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean closeVertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); - VertxMetrics vertxMetrics = context.owner().metricsSPI(); + QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), connectOptions); + VertxMetrics vertxMetrics = vertx.metricsSPI(); ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), "sql", connectOptions.getMetricsName()) : null; - EventLoopContext eventLoopContext = ConnectionFactory.asEventLoopContext(context); - ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(eventLoopContext, - new ClickhouseNativeConnectionFactory(eventLoopContext, connectOptions), tracer, metrics, poolOptions); + ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(vertx, + new ClickhouseNativeConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { - closeFuture.onComplete(ar -> context.owner().close()); + closeFuture.future().onComplete(ar -> vertx.close()); } else { - context.addCloseHook(closeFuture); + vertx.addCloseHook(closeFuture); } return pool; } private final ClickhouseNativeConnectionFactory factory; - private ClickhouseNativePoolImpl(EventLoopContext context, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, ClientMetrics metrics, PoolOptions poolOptions) { - super(context, factory, tracer, metrics, poolOptions); + super(vertx, factory, tracer, metrics, 1, poolOptions); this.factory = factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index fdfe2337c7..73c39a8b77 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -56,7 +56,7 @@ public void init() { void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { InitCommand cmd = new InitCommand(this, username, password, database, properties); - schedule(cmd, completionHandler); + schedule(context, cmd).onComplete(completionHandler); } public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { From eede5ddd17005a576ce850584b4b09530632039b Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 9 May 2021 22:39:29 +0300 Subject: [PATCH 074/176] rebasing onto master Signed-off-by: vladimir --- ...ckhouseNativeBinaryDataTypeDecodeTest.java | 21 ++++++++++++++++- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 23 +++++++++++++++++++ ...lickhouseNativeTextDataTypeDecodeTest.java | 23 +++++++++++++++++++ .../tck/ClickhouseNativeTransactionTest.java | 23 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index cc9d4d8a2d..e7140867ad 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -33,7 +33,26 @@ public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDeco public static ClickhouseResource rule = new ClickhouseResource(); public ClickhouseNativeBinaryDataTypeDecodeTest() { - NUMERIC_TYPE = JDBCType.DECIMAL; + } + + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 540ffd626f..89c148d0c1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -19,18 +19,41 @@ import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.BinaryDataTypeEncodeTestBase; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index 9c016ccb8e..95edd2a034 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -16,17 +16,40 @@ import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.TextDataTypeDecodeTestBase; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index bb4c246f55..40f47e8d0e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -16,16 +16,39 @@ import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.DataTypeTestBase; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeTransactionTest extends DataTypeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); From 413caf92c9fadae3ef733c8d2c8e1356ff62fa1d Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 10 May 2021 09:51:25 +0300 Subject: [PATCH 075/176] throw ClassCastException in get(Class type, int position) if can't cast to requested type Signed-off-by: vladimir --- .../clickhousenative/impl/ClickhouseNativeRowImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 43a33ddd23..8415c667a5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -18,9 +18,7 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.sql.JDBCType; import java.util.List; -import java.util.Objects; public class ClickhouseNativeRowImpl implements Row { private final int rowNo; @@ -63,10 +61,13 @@ public T get(Class type, int position) { throw new IllegalArgumentException("Accessor type can not be null"); } Object value = getValue(position, type); - if (value != null && type.isAssignableFrom(value.getClass())) { + if (value == null) { + return null; + } + if (type.isAssignableFrom(value.getClass())) { return type.cast(value); } - return null; + throw new ClassCastException("can't cast value " + value + " of class " + value.getClass().getName() + " to class " + type.getName()); } @Override From fd972edabbe79ba751561a4fe47328f3afecd4f1 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 10 May 2021 11:23:11 +0300 Subject: [PATCH 076/176] added column index into ClassCastException message Signed-off-by: vladimir --- .../clickhousenative/impl/ClickhouseNativeRowImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 8415c667a5..d805b64078 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -67,7 +67,7 @@ public T get(Class type, int position) { if (type.isAssignableFrom(value.getClass())) { return type.cast(value); } - throw new ClassCastException("can't cast value " + value + " of class " + value.getClass().getName() + " to class " + type.getName()); + throw new ClassCastException("can't cast value " + value + " at position " + position + " of class " + value.getClass().getName() + " to class " + type.getName()); } @Override From ad76c64c8e0af301774125ad76ea383cd9d3b550 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 11 May 2021 23:17:24 +0300 Subject: [PATCH 077/176] replaced confusing 'native' to 'binary' Signed-off-by: vladimir --- .../pom.xml | 0 ...ickhouseBinaryConnectOptionsConverter.java | 14 +- .../main/java/examples/SqlClientExamples.java | 4 +- .../ClickhouseBinaryConnectOptions.java | 22 +- .../binary/ClickhouseBinaryConnection.java | 14 +- .../binary/ClickhouseBinaryPool.java | 14 +- .../binary}/ClickhouseConstants.java | 2 +- .../clickhouse/binary}/impl/BaseBlock.java | 26 +- .../clickhouse/binary}/impl/BlockInfo.java | 6 +- .../ClickhouseBinaryConnectionFactory.java | 18 +- .../impl/ClickhouseBinaryConnectionImpl.java | 21 +- .../ClickhouseBinaryConnectionUriParser.java | 6 +- .../ClickhouseBinaryDatabaseMetadata.java | 6 +- .../binary/impl/ClickhouseBinaryPoolImpl.java | 24 +- .../binary/impl/ClickhouseBinaryRowDesc.java | 10 +- .../binary/impl/ClickhouseBinaryRowImpl.java | 10 +- .../ClickhouseBinarySocketConnection.java | 18 +- .../impl/ClickhouseServerException.java | 2 +- .../binary}/impl/ColumnOrientedBlock.java | 18 +- .../binary}/impl/RowOrientedBlock.java | 20 +- .../impl/codec/BlockStreamProfileInfo.java | 2 +- .../codec/BlockStreamProfileInfoReader.java | 2 +- .../binary}/impl/codec/ByteBufUtils.java | 2 +- .../impl/codec/ClickhouseBinaryCodec.java | 20 +- .../ClickhouseBinaryColumnDescriptor.java | 26 +- .../codec/ClickhouseBinaryCommandCodec.java | 10 +- .../impl/codec/ClickhouseBinaryDecoder.java | 16 +- .../impl/codec/ClickhouseBinaryEncoder.java | 24 +- .../impl/codec/ClickhouseBinaryParamDesc.java | 8 +- .../ClickhouseBinaryPreparedStatement.java | 13 +- ...ClickhouseBinaryQueryCommandBaseCodec.java | 6 +- .../impl/codec/ClickhouseExceptionReader.java | 4 +- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/ClientInfo.java | 63 ++++ .../binary}/impl/codec/ClientPacketTypes.java | 2 +- .../codec/CloseConnectionCommandCodec.java | 6 +- .../impl/codec/CloseCursorCommandCodec.java | 14 +- .../codec/CloseStatementCommandCodec.java | 12 +- .../impl/codec/ColumnOrientedBlockReader.java | 22 +- .../binary}/impl/codec/Compression.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 10 +- .../impl/codec/ExtendedQueryCommandCodec.java | 31 +- .../binary}/impl/codec/InitCommandCodec.java | 16 +- .../codec/Lz4ClickhouseStreamDataSink.java | 7 +- .../codec/Lz4ClickhouseStreamDataSource.java | 4 +- .../impl/codec/MultistringMessageReader.java | 2 +- .../binary}/impl/codec/PacketForge.java | 19 +- .../binary}/impl/codec/PacketReader.java | 21 +- .../impl/codec/PrepareStatementCodec.java | 20 +- .../binary}/impl/codec/QueryInfo.java | 2 +- .../binary}/impl/codec/QueryParsers.java | 2 +- .../impl/codec/QueryProcessingStage.java | 2 +- .../binary}/impl/codec/QueryProgressInfo.java | 2 +- .../impl/codec/QueryProgressInfoReader.java | 8 +- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../codec/RawClickhouseStreamDataSource.java | 2 +- .../binary}/impl/codec/RowResultDecoder.java | 20 +- .../binary}/impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 22 +- .../binary}/impl/codec/TableColumns.java | 4 +- .../impl/codec/columns/ArrayColumn.java | 10 +- .../impl/codec/columns/ArrayColumnReader.java | 14 +- .../impl/codec/columns/ArrayColumnWriter.java | 18 +- .../codec/columns/ArrayIntPairIterator.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 8 +- .../codec/columns/ClickhouseColumnReader.java | 12 +- .../codec/columns/ClickhouseColumnWriter.java | 10 +- .../impl/codec/columns/ClickhouseColumns.java | 70 ++-- .../impl/codec/columns/ColumnUtils.java | 6 +- .../impl/codec/columns/DateColumn.java | 6 +- .../impl/codec/columns/DateColumnReader.java | 6 +- .../impl/codec/columns/DateColumnWriter.java | 8 +- .../impl/codec/columns/DateTime64Column.java | 6 +- .../codec/columns/DateTime64ColumnReader.java | 8 +- .../codec/columns/DateTime64ColumnWriter.java | 8 +- .../impl/codec/columns/DateTimeColumn.java | 6 +- .../codec/columns/DateTimeColumnReader.java | 8 +- .../codec/columns/DateTimeColumnWriter.java | 8 +- .../impl/codec/columns/Decimal128Column.java | 6 +- .../impl/codec/columns/Decimal256Column.java | 6 +- .../impl/codec/columns/Decimal32Column.java | 6 +- .../codec/columns/Decimal32ColumnReader.java | 8 +- .../codec/columns/Decimal32ColumnWriter.java | 8 +- .../impl/codec/columns/Decimal64Column.java | 6 +- .../codec/columns/Decimal64ColumnReader.java | 8 +- .../codec/columns/Decimal64ColumnWriter.java | 8 +- .../impl/codec/columns/Enum16Column.java | 6 +- .../codec/columns/Enum16ColumnReader.java | 6 +- .../codec/columns/Enum16ColumnWriter.java | 8 +- .../impl/codec/columns/Enum8Column.java | 6 +- .../impl/codec/columns/Enum8ColumnReader.java | 6 +- .../impl/codec/columns/Enum8ColumnWriter.java | 8 +- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 10 +- .../columns/FixedStringColumnReader.java | 10 +- .../columns/FixedStringColumnWriter.java | 8 +- .../impl/codec/columns/Float32Column.java | 6 +- .../codec/columns/Float32ColumnReader.java | 8 +- .../codec/columns/Float32ColumnWriter.java | 8 +- .../impl/codec/columns/Float64Column.java | 6 +- .../codec/columns/Float64ColumnReader.java | 8 +- .../codec/columns/Float64ColumnWriter.java | 8 +- .../columns/GenericDecimalColumnReader.java | 8 +- .../columns/GenericDecimalColumnWriter.java | 8 +- .../impl/codec/columns/IPv4Column.java | 7 +- .../impl/codec/columns/IPv4ColumnReader.java | 6 +- .../impl/codec/columns/IPv4ColumnWriter.java | 8 +- .../impl/codec/columns/IPv6Column.java | 8 +- .../impl/codec/columns/IPv6ColumnReader.java | 8 +- .../impl/codec/columns/IPv6ColumnWriter.java | 8 +- .../impl/codec/columns/Int128Column.java | 6 +- .../codec/columns/Int128ColumnReader.java | 8 +- .../codec/columns/Int128ColumnWriter.java | 8 +- .../impl/codec/columns/IntPairIterator.java | 2 +- .../impl/codec/columns/IntervalColumn.java | 6 +- .../codec/columns/IntervalColumnReader.java | 6 +- .../codec/columns/ListPairedIterator.java | 2 +- .../codec/columns/LowCardinalityColumn.java | 12 +- .../columns/LowCardinalityColumnReader.java | 14 +- .../columns/LowCardinalityColumnWriter.java | 14 +- .../impl/codec/columns/PairedIterator.java | 2 +- .../impl/codec/columns/StringCache.java | 2 +- .../impl/codec/columns/StringColumn.java | 10 +- .../codec/columns/StringColumnReader.java | 10 +- .../codec/columns/StringColumnWriter.java | 8 +- .../binary}/impl/codec/columns/Triplet.java | 2 +- .../impl/codec/columns/UInt16Column.java | 6 +- .../codec/columns/UInt16ColumnReader.java | 8 +- .../codec/columns/UInt16ColumnWriter.java | 8 +- .../impl/codec/columns/UInt32Column.java | 6 +- .../codec/columns/UInt32ColumnReader.java | 8 +- .../codec/columns/UInt32ColumnWriter.java | 8 +- .../impl/codec/columns/UInt64Column.java | 6 +- .../codec/columns/UInt64ColumnReader.java | 8 +- .../codec/columns/UInt64ColumnWriter.java | 8 +- .../impl/codec/columns/UInt8Column.java | 6 +- .../impl/codec/columns/UInt8ColumnReader.java | 8 +- .../impl/codec/columns/UInt8ColumnWriter.java | 8 +- .../impl/codec/columns/UUIDColumn.java | 6 +- .../impl/codec/columns/UUIDColumnReader.java | 8 +- .../impl/codec/columns/UUIDColumnWriter.java | 8 +- .../clickhouse/binary}/package-info.java | 2 +- .../binary/spi/ClickhouseBinaryDriver.java | 22 +- .../clickhouse/util/ClickHouseCityHash.java | 0 .../src/main/resources/META-INF/MANIFEST.MF | 2 + .../services/io.vertx.sqlclient.spi.Driver | 1 + .../columns/ClickhouseColumnsTestReader.java | 4 +- .../ArraySerDesTest.java | 16 +- .../BasicClickhouseTest.java | 34 +- .../ClickhouseResource.java | 14 +- .../ExtendedClickhouseTest.java | 8 +- .../NestedExceptionsTest.java | 8 +- .../PacketReaderReplayTest.java | 10 +- .../clickhousenativeclient/PacketUtil.java | 0 .../vertx/clickhousenativeclient/Sleep.java | 0 .../SpecialTypesTest.java | 8 +- .../alltypes/AllTypesBase.java | 10 +- .../alltypes/BlobTest.java | 0 .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 0 .../alltypes/Enum8Test.java | 0 .../alltypes/EnumTest.java | 0 .../alltypes/FixedStringTest.java | 0 .../alltypes/Float32Test.java | 0 .../alltypes/Float64Test.java | 0 .../alltypes/HugeDecimalTest.java | 0 .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 3 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 0 .../alltypes/Int32Test.java | 0 .../alltypes/Int64Test.java | 0 .../alltypes/Int8Test.java | 0 .../StringArrayDeduplicationTester.java | 10 +- .../alltypes/StringTest.java | 0 .../alltypes/TestEnum.java | 0 .../alltypes/UInt16Test.java | 0 .../alltypes/UInt32Test.java | 0 .../alltypes/UInt64Test.java | 0 .../alltypes/UInt8Test.java | 0 .../alltypes/UUIDTest.java | 0 .../tck/ClickhouseBinaryCollectorTest.java | 2 +- ...ickhouseBinaryConnectionAutoRetryTest.java | 6 +- .../tck/ClickhouseBinaryConnectionTest.java | 10 +- .../ClickhouseBinaryDataTypeDecodeTest.java | 4 +- .../ClickhouseBinaryDataTypeEncodeTest.java | 2 +- .../tck/ClickhouseBinaryDriverTest.java | 2 +- .../ClickhouseBinaryPreparedBatchTest.java | 2 +- ...ickhouseBinaryPreparedQueryCachedTest.java | 10 +- ...ickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../ClickhouseBinaryPreparedQueryTest.java | 2 +- ...ClickhouseBinaryPreparedQueryTestBase.java | 2 +- ...ClickhouseBinarySimpleQueryPooledTest.java | 2 +- .../tck/ClickhouseBinarySimpleQueryTest.java | 2 +- ...lickhouseBinaryTextDataTypeDecodeTest.java | 2 +- .../tck/ClickhouseBinaryTracingTest.java | 6 +- .../tck/ClickhouseBinaryTransactionTest.java | 2 +- .../tck/ClientConfig.java | 16 +- .../src/test/python/gen_all_types_tables.py | 0 ..._testConcurrentClose_with_compression.yaml | 0 .../resources/forged_nested_exception.yaml | 0 .../src/test/resources/init.sql | 0 .../insert_prepare_with_compression.yaml | 0 .../src/test/resources/log4j2-test.xml | 0 ...able_low_cardinality_with_compression.yaml | 0 ...e_low_cardinality_without_compression.yaml | 0 ...f_nullable_string_without_compression.yaml | 0 ...elect_empty_array_without_compression.yaml | 0 ...ize_and_2_datablocks_with_compression.yaml | 0 .../impl/codec/ClientInfo.java | 64 ---- .../src/main/resources/META-INF/MANIFEST.MF | 2 - .../services/io.vertx.sqlclient.spi.Driver | 1 - .../src/test/python/all_types_table.sql | 354 ------------------ 223 files changed, 847 insertions(+), 1202 deletions(-) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/pom.xml (100%) rename vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java => vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java (57%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/main/java/examples/SqlClientExamples.java (98%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java (53%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java (59%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/ClickhouseConstants.java (98%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/BaseBlock.java (60%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/BlockInfo.java (91%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java (83%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java (63%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java (93%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java (95%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java (66%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java (65%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java (87%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/ClickhouseServerException.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/ColumnOrientedBlock.java (66%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/RowOrientedBlock.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/BlockStreamProfileInfo.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/BlockStreamProfileInfoReader.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ByteBufUtils.java (97%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java (71%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java (87%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java (79%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java (63%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java (82%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java (68%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java (76%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java (65%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseExceptionReader.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseStreamDataSink.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseStreamDataSource.java (95%) create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClientPacketTypes.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseConnectionCommandCodec.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseCursorCommandCodec.java (66%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseStatementCommandCodec.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ColumnOrientedBlockReader.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Compression.java (89%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/DatabaseMetadataReader.java (93%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ExtendedQueryCommandCodec.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/InitCommandCodec.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Lz4ClickhouseStreamDataSink.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Lz4ClickhouseStreamDataSource.java (98%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/MultistringMessageReader.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PacketForge.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PacketReader.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PrepareStatementCodec.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryInfo.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryParsers.java (99%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProcessingStage.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProgressInfo.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProgressInfoReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RawClickhouseStreamDataSink.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RawClickhouseStreamDataSource.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RowResultDecoder.java (68%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ServerPacketType.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/SimpleQueryCommandCodec.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/TableColumns.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumn.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumnReader.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumnWriter.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayIntPairIterator.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumn.java (73%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnReader.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnWriter.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumns.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ColumnUtils.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumn.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumnWriter.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64ColumnReader.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64ColumnWriter.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumn.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumnWriter.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal128Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal256Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32ColumnReader.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32ColumnWriter.java (76%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64ColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64ColumnWriter.java (76%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16ColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnDecoder.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnEncoder.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumResolutionMethod.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumn.java (73%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32Column.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32ColumnReader.java (80%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64Column.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64ColumnReader.java (80%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/GenericDecimalColumnReader.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/GenericDecimalColumnWriter.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4ColumnReader.java (89%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6Column.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6ColumnReader.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6ColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128Column.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128ColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntPairIterator.java (93%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntervalColumn.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntervalColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ListPairedIterator.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumn.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumnReader.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumnWriter.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/PairedIterator.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringCache.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumn.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumnWriter.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Triplet.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16Column.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64Column.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8ColumnWriter.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumn.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumnReader.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/package-info.java (91%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java (58%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java (100%) create mode 100644 vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF create mode 100644 vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver rename {vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnsTestReader.java (94%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java (86%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java (84%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java (85%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java (88%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java (93%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/Sleep.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java (95%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java (95%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java (88%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java (100%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java (93%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java (87%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java (82%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java (93%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java (90%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java (87%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java (88%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java (95%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java (88%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java (96%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java (74%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/python/gen_all_types_tables.py (100%) rename vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml => vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/forged_nested_exception.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/init.sql (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/insert_prepare_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/log4j2-test.xml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/nullable_low_cardinality_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/nullable_low_cardinality_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/select_array_of_nullable_string_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/select_empty_array_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml (100%) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java delete mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF delete mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver delete mode 100644 vertx-clickhouse-native-client/src/test/python/all_types_table.sql diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml similarity index 100% rename from vertx-clickhouse-native-client/pom.xml rename to vertx-clickhouse-binary-client/pom.xml diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java similarity index 57% rename from vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java rename to vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java index b9db59e66f..2e95b6fe11 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonArray; @@ -7,23 +7,23 @@ import java.time.format.DateTimeFormatter; /** - * Converter and mapper for {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions}. - * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions} original class using Vert.x codegen. + * Converter and mapper for {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. */ -public class ClickhouseNativeConnectOptionsConverter { +public class ClickhouseBinaryConnectOptionsConverter { - public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + public static void fromJson(Iterable> json, ClickhouseBinaryConnectOptions obj) { for (java.util.Map.Entry member : json) { switch (member.getKey()) { } } } - public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + public static void toJson(ClickhouseBinaryConnectOptions obj, JsonObject json) { toJson(obj, json.getMap()); } - public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + public static void toJson(ClickhouseBinaryConnectOptions obj, java.util.Map json) { } } diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java similarity index 98% rename from vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java rename to vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index 8d03702338..d04097aeb9 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -13,7 +13,7 @@ package examples; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Vertx; import io.vertx.core.tracing.TracingPolicy; import io.vertx.docgen.Source; @@ -278,7 +278,7 @@ public void usingCursors03(SqlConnection connection) { }); } - public void tracing01(ClickhouseNativeConnectOptions options) { + public void tracing01(ClickhouseBinaryConnectOptions options) { options.setTracingPolicy(TracingPolicy.ALWAYS); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java similarity index 53% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java index 30ddeb6c00..b9f39e5dd9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java @@ -11,35 +11,35 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; @DataObject(generateConverter = true) -public class ClickhouseNativeConnectOptions extends SqlConnectOptions { +public class ClickhouseBinaryConnectOptions extends SqlConnectOptions { - public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { - JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); - return new ClickhouseNativeConnectOptions(parsedConfiguration); + public static ClickhouseBinaryConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { + JsonObject parsedConfiguration = ClickhouseBinaryConnectionUriParser.parse(connectionUri); + return new ClickhouseBinaryConnectOptions(parsedConfiguration); } - public ClickhouseNativeConnectOptions() { + public ClickhouseBinaryConnectOptions() { super(); } - public ClickhouseNativeConnectOptions(JsonObject json) { + public ClickhouseBinaryConnectOptions(JsonObject json) { super(json); - ClickhouseNativeConnectOptionsConverter.fromJson(json, this); + ClickhouseBinaryConnectOptionsConverter.fromJson(json, this); } - public ClickhouseNativeConnectOptions(SqlConnectOptions other) { + public ClickhouseBinaryConnectOptions(SqlConnectOptions other) { super(other); } - public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { + public ClickhouseBinaryConnectOptions(ClickhouseBinaryConnectOptions other) { super(other); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java similarity index 59% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java index 91dd9f0029..7bae45479e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; @@ -23,15 +23,15 @@ import io.vertx.sqlclient.SqlConnection; @VertxGen -public interface ClickhouseNativeConnection extends SqlConnection { - static void connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, Handler> handler) { - Future fut = connect(vertx, connectOptions); +public interface ClickhouseBinaryConnection extends SqlConnection { + static void connect(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, Handler> handler) { + Future fut = connect(vertx, connectOptions); if (handler != null) { fut.onComplete(handler); } } - static Future connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions) { - return ClickhouseNativeConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); + static Future connect(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions) { + return ClickhouseBinaryConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java index 725c4602df..9faecb2cce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; @@ -22,18 +22,18 @@ import io.vertx.sqlclient.PoolOptions; @VertxGen -public interface ClickhouseNativePool extends Pool { - static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { +public interface ClickhouseBinaryPool extends Pool { + static ClickhouseBinaryPool pool(ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { if (Vertx.currentContext() != null) { throw new IllegalStateException("Running in a Vertx context => use ClickhouseNativePool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); - return ClickhouseNativePoolImpl.create(vertx, true, connectOptions, poolOptions); + return ClickhouseBinaryPoolImpl.create(vertx, true, connectOptions, poolOptions); } - static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseNativePoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); + static ClickhouseBinaryPool pool(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { + return ClickhouseBinaryPoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java similarity index 98% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java index 94e50719e6..79bae6273a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java similarity index 60% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java index 3de87a8556..96e9d59f93 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.util.ArrayList; @@ -22,14 +22,14 @@ import java.util.Map; public class BaseBlock { - private final Map columnsWithTypes; - protected final ClickhouseNativeRowDesc rowDesc; + private final Map columnsWithTypes; + protected final ClickhouseBinaryRowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - protected final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseBinaryDatabaseMetadata md; - public BaseBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + public BaseBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseBinaryDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; this.rowDesc = buildRowDescriptor(columnsWithTypes); this.data = data; @@ -37,7 +37,7 @@ public BaseBlock(Map columnsWithTypes, this.md = md; } - public Map getColumnsWithTypes() { + public Map getColumnsWithTypes() { return columnsWithTypes; } @@ -49,17 +49,17 @@ public BlockInfo getBlockInfo() { return blockInfo; } - public ClickhouseNativeDatabaseMetadata getMd() { + public ClickhouseBinaryDatabaseMetadata getMd() { return md; } - public ClickhouseNativeRowDesc rowDesc() { + public ClickhouseBinaryRowDesc rowDesc() { return rowDesc; } - private ClickhouseNativeRowDesc buildRowDescriptor(Map columnsWithTypes) { + private ClickhouseBinaryRowDesc buildRowDescriptor(Map columnsWithTypes) { List columnNames = new ArrayList<>(columnsWithTypes.keySet()); List columnTypes = new ArrayList<>(columnsWithTypes.values()); - return new ClickhouseNativeRowDesc(columnNames, columnTypes); + return new ClickhouseBinaryRowDesc(columnNames, columnTypes); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java similarity index 91% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java index 2d0a2f11fd..d4f8726a84 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java index a9e839481f..743397ce31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; @@ -31,12 +31,12 @@ import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; import net.jpountz.lz4.LZ4Factory; -public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); +public class ClickhouseBinaryConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryConnectionFactory.class); private final LZ4Factory lz4Factory; - ClickhouseNativeConnectionFactory(VertxInternal vertx, ClickhouseNativeConnectOptions options) { + ClickhouseBinaryConnectionFactory(VertxInternal vertx, ClickhouseBinaryConnectOptions options) { super(vertx, options); this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); } @@ -72,7 +72,7 @@ protected void configureNetClientOptions(NetClientOptions netClientOptions) { protected void doConnectInternal(Promise promise) { PromiseInternal promiseInternal = (PromiseInternal) promise; doConnect(ConnectionFactory.asEventLoopContext(promiseInternal.context())).flatMap(conn -> { - ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; + ClickhouseBinarySocketConnection socket = (ClickhouseBinarySocketConnection) conn; socket.init(); return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) .map(conn); @@ -90,8 +90,8 @@ private Future doConnect(EventLoopContext ctx) { return soFut.map(so -> newSocketConnection(ctx, (NetSocketInternal) so)); } - private ClickhouseNativeSocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { - return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, + private ClickhouseBinarySocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { + return new ClickhouseBinarySocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, ctx, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java similarity index 63% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java index 87e5149741..b1fedcee47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -11,27 +11,26 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; -public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl implements ClickhouseNativeConnection { - private final ClickhouseNativeConnectionFactory factory; +public class ClickhouseBinaryConnectionImpl extends SqlConnectionImpl implements ClickhouseBinaryConnection { + private final ClickhouseBinaryConnectionFactory factory; - public static Future connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { - ClickhouseNativeConnectionFactory client; + public static Future connect(ContextInternal ctx, ClickhouseBinaryConnectOptions options) { + ClickhouseBinaryConnectionFactory client; try { - client = new ClickhouseNativeConnectionFactory(ctx.owner(), options); + client = new ClickhouseBinaryConnectionFactory(ctx.owner(), options); } catch (Exception e) { return ctx.failedFuture(e); } @@ -40,13 +39,13 @@ public static Future connect(ContextInternal ctx, Cl PromiseInternal promise = ctx.promise(); client.connect(promise); return promise.future().map(conn -> { - ClickhouseNativeConnectionImpl mySQLConnection = new ClickhouseNativeConnectionImpl(client, ctx, conn, tracer, null); + ClickhouseBinaryConnectionImpl mySQLConnection = new ClickhouseBinaryConnectionImpl(client, ctx, conn, tracer, null); conn.init(mySQLConnection); return mySQLConnection; }); } - ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { + ClickhouseBinaryConnectionImpl(ClickhouseBinaryConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { super(context, conn, tracer, metrics); this.factory = factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java index b5ca1177a8..e9c9f057c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.core.json.JsonObject; @@ -23,7 +23,7 @@ import java.util.stream.Collectors; import java.util.AbstractMap.SimpleImmutableEntry; -public class ClickhouseNativeConnectionUriParser { +public class ClickhouseBinaryConnectionUriParser { public static JsonObject parse(String connectionUri) { try { JsonObject configuration = new JsonObject(); @@ -63,7 +63,7 @@ public static Map queryAsMap(String query) { return Collections.emptyMap(); } return Arrays.stream(query.split("&")) - .map(ClickhouseNativeConnectionUriParser::asEntry) + .map(ClickhouseBinaryConnectionUriParser::asEntry) .collect(Collectors.toMap(SimpleImmutableEntry::getKey, SimpleImmutableEntry::getValue)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java index 09a00fa99e..d4876c2798 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; @@ -20,7 +20,7 @@ import java.time.ZoneId; import java.util.Map; -public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { +public class ClickhouseBinaryDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; private final int major; @@ -39,7 +39,7 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final boolean saturateExtraNanos; private final boolean removeTrailingZerosInFixedStrings; - public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, + public ClickhouseBinaryDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, Duration yearDuration, Duration quarterDuration, Duration monthDuration, diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java similarity index 66% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java index fd1675dfd5..2ce15a2fd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java @@ -11,32 +11,30 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; -import io.vertx.core.impl.EventLoopContext; import io.vertx.core.impl.VertxInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; -public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { - public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean closeVertx, - ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { +public class ClickhouseBinaryPoolImpl extends PoolBase implements ClickhouseBinaryPool { + public static ClickhouseBinaryPoolImpl create(VertxInternal vertx, boolean closeVertx, + ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), connectOptions); VertxMetrics vertxMetrics = vertx.metricsSPI(); ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), "sql", connectOptions.getMetricsName()) : null; - ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(vertx, - new ClickhouseNativeConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); + ClickhouseBinaryPoolImpl pool = new ClickhouseBinaryPoolImpl(vertx, + new ClickhouseBinaryConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.future().onComplete(ar -> vertx.close()); @@ -46,9 +44,9 @@ public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean close return pool; } - private final ClickhouseNativeConnectionFactory factory; + private final ClickhouseBinaryConnectionFactory factory; - private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + private ClickhouseBinaryPoolImpl(VertxInternal vertx, ClickhouseBinaryConnectionFactory factory, QueryTracer tracer, ClientMetrics metrics, PoolOptions poolOptions) { super(vertx, factory, tracer, metrics, 1, poolOptions); this.factory = factory; @@ -56,6 +54,6 @@ private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnection @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { - return new ClickhouseNativeConnectionImpl(factory, context, conn, tracer, metrics); + return new ClickhouseBinaryConnectionImpl(factory, context, conn, tracer, metrics); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java similarity index 65% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java index 75838ca170..dce90eb334 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; @@ -19,14 +19,14 @@ import java.util.Collections; import java.util.List; -public class ClickhouseNativeRowDesc extends RowDesc { - public static final ClickhouseNativeRowDesc EMPTY = new ClickhouseNativeRowDesc(Collections.emptyList(), Collections.emptyList()); +public class ClickhouseBinaryRowDesc extends RowDesc { + public static final ClickhouseBinaryRowDesc EMPTY = new ClickhouseBinaryRowDesc(Collections.emptyList(), Collections.emptyList()); - public ClickhouseNativeRowDesc(List columnNames) { + public ClickhouseBinaryRowDesc(List columnNames) { super(columnNames); } - public ClickhouseNativeRowDesc(List columnNames, List columnDescriptors) { + public ClickhouseBinaryRowDesc(List columnNames, List columnDescriptors) { super(columnNames, columnDescriptors); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java index d805b64078..a5ccd677b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java @@ -11,22 +11,22 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.util.List; -public class ClickhouseNativeRowImpl implements Row { +public class ClickhouseBinaryRowImpl implements Row { private final int rowNo; private final Charset stringCharset; - private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseBinaryRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRowImpl(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { + public ClickhouseBinaryRowImpl(int rowNo, ClickhouseBinaryRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseBinaryDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java index 73c39a8b77..17bec4badb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; @@ -28,15 +28,15 @@ import java.util.UUID; import java.util.function.Predicate; -public class ClickhouseNativeSocketConnection extends SocketConnectionBase { - private ClickhouseNativeCodec codec; - private ClickhouseNativeDatabaseMetadata md; +public class ClickhouseBinarySocketConnection extends SocketConnectionBase { + private ClickhouseBinaryCodec codec; + private ClickhouseBinaryDatabaseMetadata md; private UUID psId; private String ourCursorId; private final LZ4Factory lz4Factory; - public ClickhouseNativeSocketConnection(NetSocketInternal socket, + public ClickhouseBinarySocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, int preparedStatementCacheSize, Predicate preparedStatementCacheSqlFilter, @@ -48,7 +48,7 @@ public ClickhouseNativeSocketConnection(NetSocketInternal socket, @Override public void init() { - codec = new ClickhouseNativeCodec(this); + codec = new ClickhouseBinaryCodec(this); ChannelPipeline pipeline = socket.channelHandlerContext().pipeline(); pipeline.addBefore("handler", "codec", codec); super.init(); @@ -59,7 +59,7 @@ void sendStartupMessage(String username, String password, String database, Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + public ColumnOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseBinaryDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); } @@ -41,16 +41,16 @@ public int numRows() { } } - public List rows() { + public List rows() { int numRows = numRows(); - List ret = new ArrayList<>(numRows); + List ret = new ArrayList<>(numRows); for (int i = 0; i < numRows; ++i) { ret.add(row(i)); } return ret; } - public ClickhouseNativeRowImpl row(int rowNo) { - return new ClickhouseNativeRowImpl(rowNo, rowDesc, this, md); + public ClickhouseBinaryRowImpl row(int rowNo) { + return new ClickhouseBinaryRowImpl(rowNo, rowDesc, this, md); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java index 162d53a8c7..2661eb6157 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; @@ -27,11 +27,11 @@ public class RowOrientedBlock { private final RowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private final ClickhouseColumnWriter[] writers; public RowOrientedBlock(RowDesc rowDesc, - List data, ClickhouseNativeDatabaseMetadata md) { + List data, ClickhouseBinaryDatabaseMetadata md) { this.rowDesc = rowDesc; this.data = data; this.blockInfo = new BlockInfo(); @@ -42,7 +42,7 @@ public RowOrientedBlock(RowDesc rowDesc, private ClickhouseColumnWriter[] buildWriters() { ClickhouseColumnWriter[] ret = new ClickhouseColumnWriter[nColumns()]; for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { - ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseBinaryColumnDescriptor descr = (ClickhouseBinaryColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); ClickhouseColumnWriter writer = ClickhouseColumns.columnForSpec(descr, md).writer(data, columnIndex); ret[columnIndex] = writer; } @@ -60,7 +60,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR sink.writeULeb128(nRows); //TODO: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { - ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseBinaryColumnDescriptor descr = (ClickhouseBinaryColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); sink.writePascalString(descr.getUnparsedNativeType()); writers[columnIndex].serializeColumn(sink, fromRow, toRow); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java index 20d00723ed..08f197774e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class BlockStreamProfileInfo { private final int rows; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java index 125b455be7..7a72282b4e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java index baa2df84eb..e60ba5ddf4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java similarity index 71% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java index fe07e5b9a7..dfdcb077a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,15 +25,15 @@ import java.util.ArrayDeque; import java.util.Iterator; -public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); +public class ClickhouseBinaryCodec extends CombinedChannelDuplexHandler { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryCodec.class); - private ArrayDeque> inflight; + private ArrayDeque> inflight; - public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { + public ClickhouseBinaryCodec(ClickhouseBinarySocketConnection conn) { inflight = new ArrayDeque<>(); - ClickhouseNativeEncoder encoder = new ClickhouseNativeEncoder(inflight, conn); - ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); + ClickhouseBinaryEncoder encoder = new ClickhouseBinaryEncoder(inflight, conn); + ClickhouseBinaryDecoder decoder = new ClickhouseBinaryDecoder(inflight, conn); init(decoder, encoder); } @@ -44,8 +44,8 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E } private void fail(ChannelHandlerContext ctx, Throwable cause) { - for (Iterator> it = inflight.iterator(); it.hasNext();) { - ClickhouseNativeCommandCodec codec = it.next(); + for (Iterator> it = inflight.iterator(); it.hasNext();) { + ClickhouseBinaryCommandCodec codec = it.next(); it.remove(); CommandResponse failure = CommandResponse.failure(cause); failure.cmd = (CommandBase) codec.cmd; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index 345eb05e16..cce4542c24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.math.BigInteger; import java.sql.JDBCType; -public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { +public class ClickhouseBinaryColumnDescriptor implements ColumnDescriptor { public static final int NOSIZE = -1; private final String name; @@ -37,9 +37,9 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer scale; private final int arrayDimensionsCount; - private final ClickhouseNativeColumnDescriptor nested; + private final ClickhouseBinaryColumnDescriptor nested; - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { @@ -47,16 +47,16 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, minValue, maxValue, null, null, -1, null); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseBinaryColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null, arrayDimensionsCount, nested); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, @@ -65,12 +65,12 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, minValue, maxValue, precision, scale, -1, null); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale, - int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseBinaryColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -146,7 +146,7 @@ public String getNestedType() { return nestedType; } - public ClickhouseNativeColumnDescriptor getNestedDescr() { + public ClickhouseBinaryColumnDescriptor getNestedDescr() { return nested; } @@ -158,12 +158,12 @@ public Integer getScale() { return scale; } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { - return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, + public ClickhouseBinaryColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { + return new ClickhouseBinaryColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDimensionsCount, nested); } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { + public ClickhouseBinaryColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { return copyWithModifiers(isArray, newLowCardinality, newNullable); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java similarity index 79% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java index ef02f4843d..1216082603 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -19,16 +19,16 @@ import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.CommandResponse; -abstract class ClickhouseNativeCommandCodec> { - protected ClickhouseNativeEncoder encoder; +abstract class ClickhouseBinaryCommandCodec> { + protected ClickhouseBinaryEncoder encoder; protected Handler> completionHandler; protected final C cmd; - protected ClickhouseNativeCommandCodec(C cmd) { + protected ClickhouseBinaryCommandCodec(C cmd) { this.cmd = cmd; } - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { this.encoder = encoder; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java similarity index 63% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java index 08b7cea9c4..29db476266 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -11,31 +11,31 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; import java.util.List; -public class ClickhouseNativeDecoder extends ByteToMessageDecoder { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeDecoder.class); +public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryDecoder.class); - private final ArrayDeque> inflight; - private final ClickhouseNativeSocketConnection conn; - public ClickhouseNativeDecoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + private final ArrayDeque> inflight; + private final ClickhouseBinarySocketConnection conn; + public ClickhouseBinaryDecoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; this.conn = conn; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - ClickhouseNativeCommandCodec codec = inflight.peek(); + ClickhouseBinaryCommandCodec codec = inflight.peek(); codec.decode(ctx, in); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java index 4154d71ed1..805f7f8b47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -11,32 +11,32 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; -public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); +public class ClickhouseBinaryEncoder extends ChannelOutboundHandlerAdapter { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryEncoder.class); - private final ArrayDeque> inflight; - private final ClickhouseNativeSocketConnection conn; + private final ArrayDeque> inflight; + private final ClickhouseBinarySocketConnection conn; private ChannelHandlerContext chctx; - public ClickhouseNativeEncoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + public ClickhouseBinaryEncoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; this.conn = conn; } - ClickhouseNativeSocketConnection getConn() { + ClickhouseBinarySocketConnection getConn() { return conn; } @@ -69,9 +69,9 @@ void write(CommandBase cmd) { if (LOG.isDebugEnabled()) { LOG.debug("got command: " + cmd.getClass()); } - ClickhouseNativeCommandCodec codec = wrap(cmd); + ClickhouseBinaryCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { - ClickhouseNativeCommandCodec c = inflight.poll(); + ClickhouseBinaryCommandCodec c = inflight.poll(); resp.cmd = (CommandBase) c.cmd; chctx.fireChannelRead(resp); }; @@ -79,7 +79,7 @@ void write(CommandBase cmd) { codec.encode(this); } - private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { + private ClickhouseBinaryCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { @@ -94,7 +94,7 @@ void write(CommandBase cmd) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; QueryInfo queryInfo; if (ecmd.preparedStatement() != null) { - queryInfo = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryInfo(); + queryInfo = ((ClickhouseBinaryPreparedStatement) ecmd.preparedStatement()).queryInfo(); } else { queryInfo = QueryInfo.parse(ecmd.sql()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java similarity index 68% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java index 0f4922ab87..5fe13ea7d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; import java.util.List; -public class ClickhouseNativeParamDesc extends ParamDesc { - private final List paramDescr; +public class ClickhouseBinaryParamDesc extends ParamDesc { + private final List paramDescr; - public ClickhouseNativeParamDesc(List paramDescr) { + public ClickhouseBinaryParamDesc(List paramDescr) { this.paramDescr = paramDescr; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java index 32bc02019f..aad4ed18c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java @@ -11,26 +11,25 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.impl.ParamDesc; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.RowDesc; import io.vertx.sqlclient.impl.TupleInternal; -import java.util.Map; import java.util.UUID; -public class ClickhouseNativePreparedStatement implements PreparedStatement { +public class ClickhouseBinaryPreparedStatement implements PreparedStatement { private final String sql; - private final ClickhouseNativeParamDesc paramDesc; - private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseBinaryParamDesc paramDesc; + private final ClickhouseBinaryRowDesc rowDesc; private final QueryInfo queryInfo; private final boolean sentQuery; private final UUID psId; - public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, + public ClickhouseBinaryPreparedStatement(String sql, ClickhouseBinaryParamDesc paramDesc, ClickhouseBinaryRowDesc rowDesc, QueryInfo queryInfo, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java similarity index 65% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java index c85f55cfe1..d1432047fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; -abstract class ClickhouseNativeQueryCommandBaseCodec > extends ClickhouseNativeCommandCodec{ - protected ClickhouseNativeQueryCommandBaseCodec(C cmd) { +abstract class ClickhouseBinaryQueryCommandBaseCodec> extends ClickhouseBinaryCommandCodec { + protected ClickhouseBinaryQueryCommandBaseCodec(C cmd) { super(cmd); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java index 066e7cd411..a1872467a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java index 787dad8205..ca77bb7ac4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public interface ClickhouseStreamDataSink { void writeULeb128(int value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java index a041808b51..2ee1387744 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java new file mode 100644 index 0000000000..bfc5d11aee --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java @@ -0,0 +1,63 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhouse.binary.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; + +import java.util.Map; + +public class ClientInfo { + public static final int NO_QUERY = 0; + public static final int INITIAL_QUERY = 1; + + private final ClickhouseBinaryDatabaseMetadata meta; + + public ClientInfo(ClickhouseBinaryDatabaseMetadata meta) { + this.meta = meta; + } + + public void serializeTo(ByteBuf buf) { + int serverRevision = meta.getRevision(); + if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", + serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + } + buf.writeByte(INITIAL_QUERY); + Map properties = meta.getProperties(); + + //initial_user + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_USER, ""), buf); + //initial_query_id + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_QUERY_ID, ""), buf); + //initial_address + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); + //interface: TCP + buf.writeByte(1); + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_USER, System.getProperty("user.name")), buf); + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); + ByteBufUtils.writePascalString(meta.getFullClientName(), buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + //quota_key + ByteBufUtils.writePascalString("", buf); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java index ba9b652a03..a8486e3fe8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class ClientPacketTypes { public static final int HELLO = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java index 72d7270798..a42476b556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -21,7 +21,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CloseConnectionCommand; -public class CloseConnectionCommandCodec extends ClickhouseNativeCommandCodec { +public class CloseConnectionCommandCodec extends ClickhouseBinaryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(CloseConnectionCommandCodec.class); protected CloseConnectionCommandCodec(CloseConnectionCommand cmd) { @@ -33,7 +33,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } @Override - public void encode(ClickhouseNativeEncoder encoder) { + public void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); if (LOG.isDebugEnabled()) { LOG.debug("closing channel"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java similarity index 66% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java index ab4641a871..d662c6efee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java @@ -11,24 +11,24 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseCursorCommandCodec extends ClickhouseNativeCommandCodec{ - private final ClickhouseNativeSocketConnection conn; +public class CloseCursorCommandCodec extends ClickhouseBinaryCommandCodec { + private final ClickhouseBinarySocketConnection conn; - protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseBinarySocketConnection conn) { super(cmd); this.conn = conn; } - void encode(ClickhouseNativeEncoder encoder) { - conn.releaseCursor(((ClickhouseNativePreparedStatement)cmd.statement()).getPsId(), cmd.id()); + void encode(ClickhouseBinaryEncoder encoder) { + conn.releaseCursor(((ClickhouseBinaryPreparedStatement)cmd.statement()).getPsId(), cmd.id()); super.encode(encoder); completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java index 466516bbd0..b460a7dc12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java @@ -11,22 +11,22 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseStatementCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseStatementCommandCodec extends ClickhouseNativeCommandCodec { - public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSocketConnection conn) { +public class CloseStatementCommandCodec extends ClickhouseBinaryCommandCodec { + public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseBinarySocketConnection conn) { super(cmd); } - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); - ClickhouseNativePreparedStatement stmt = (ClickhouseNativePreparedStatement) cmd.statement(); + ClickhouseBinaryPreparedStatement stmt = (ClickhouseBinaryPreparedStatement) cmd.statement(); if (stmt.isSentQuery()) { encoder.getConn().releasePs(stmt.getPsId()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java index 55e91bc56c..e44bcffec1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.impl.BlockInfo; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -31,21 +31,21 @@ public class ColumnOrientedBlockReader { private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); private final int serverRevision; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private String tempTableInfo; private BlockInfo blockInfo; private Integer nColumns; private Integer nRows; - private Map colWithTypes; + private Map colWithTypes; private List data; private String colName; private String colType; private ClickhouseColumnReader columnData; - private ClickhouseNativeColumnDescriptor columnDescriptor; + private ClickhouseBinaryColumnDescriptor columnDescriptor; - public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + public ColumnOrientedBlockReader(ClickhouseBinaryDatabaseMetadata md) { assert(md != null); this.md = md; this.serverRevision = md.getRevision(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java similarity index 89% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java index 897e1f3218..0d701a5e07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class Compression { public static final int DISABLED = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java index 939b638eb1..44f9fad5cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -42,7 +42,7 @@ public DatabaseMetadataReader(String fullClientName, Map propert this.properties = properties; } - public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { + public ClickhouseBinaryDatabaseMetadata readFrom(ByteBuf in) { if (productName == null) { productName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (productName == null) { @@ -98,7 +98,7 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); boolean saturateExtraNanos = "saturate".equals(extraNanos); boolean removeTrailingZerosInFixedStringsStr = Boolean.parseBoolean(properties.getOrDefault(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true")); - return new ClickhouseNativeDatabaseMetadata(productName, + return new ClickhouseBinaryDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos, removeTrailingZerosInFixedStringsStr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java index 9d0e3fad1b..1162b8561f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java @@ -11,14 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.clickhouse.clickhousenative.impl.RowOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; @@ -31,12 +32,10 @@ import java.util.Map; import java.util.Objects; -import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.OPTION_MAX_BLOCK_SIZE; - public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseBinarySocketConnection conn) { super(queryInfo, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @@ -50,26 +49,26 @@ protected String sql() { } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); if (ourCursorId != null) { - conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); + conn.lockCursorOrThrow(((ClickhouseBinaryPreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } PreparedStatement ps = ecmd.preparedStatement(); - if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { + if (ps != null && ((ClickhouseBinaryPreparedStatement)ps).isSentQuery()) { this.encoder = encoder; ByteBuf buf = allocateBuffer(); try { ChannelHandlerContext chctx = encoder.chctx(); PacketForge forge = new PacketForge(encoder.getConn(), chctx); - ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + ClickhouseBinaryDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); List paramsList = ecmd.paramsList(); if (paramsList != null && !paramsList.isEmpty()) { RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), paramsList, md); forge.sendColumns(block, buf, null); } - forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); + forge.sendData(buf, new RowOrientedBlock(ClickhouseBinaryRowDesc.EMPTY, Collections.emptyList(), md),""); chctx.writeAndFlush(buf, chctx.voidPromise()); if (LOG.isDebugEnabled()) { LOG.debug("sent columns"); @@ -87,14 +86,14 @@ void encode(ClickhouseNativeEncoder encoder) { protected Map settings() { String fetchSize = Integer.toString(ecmd().fetch()); Map defaultSettings = super.settings(); - String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); + String defaultFetchSize = defaultSettings.get(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE); if (!"0".equals(fetchSize)) { if (!Objects.equals(defaultFetchSize, fetchSize)) { if (LOG.isWarnEnabled() && defaultFetchSize != null) { - LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + LOG.warn("overriding " + ClickhouseConstants.OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE)); } defaultSettings = new HashMap<>(defaultSettings); - defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); + defaultSettings.put(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE, fetchSize); } } return defaultSettings; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java index 47f2bab8dc..bfb76cbeae 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; -public class InitCommandCodec extends ClickhouseNativeCommandCodec { +public class InitCommandCodec extends ClickhouseBinaryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); private PacketReader packetReader; @@ -35,7 +35,7 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { ClientInfo clInfo = new ClientInfo(meta); @@ -79,12 +82,12 @@ public void writeSettings(Map settings, boolean settingsAsString } public void sendExternalTables(ByteBuf buf, Collection blocks) { - ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); + ClickhouseBinaryDatabaseMetadata md = conn.getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { //TODO implement external tables support sendData(buf, block, null); } - sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); + sendData(buf, new RowOrientedBlock(ClickhouseBinaryRowDesc.EMPTY, Collections.emptyList(), md), ""); } public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java index f5912be302..1d41a09c66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java @@ -11,13 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; @@ -33,7 +36,7 @@ public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private final String fullClientName; private final Map properties; private final LZ4Factory lz4Factory; @@ -54,7 +57,7 @@ public class PacketReader { private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { + public PacketReader(ClickhouseBinaryDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { this.md = md; this.fullClientName = fullClientName; this.properties = properties; @@ -113,10 +116,10 @@ private void traceServerLogs(ColumnOrientedBlock block) { //TODO: find a way to expose logs to the calling app if (LOG.isDebugEnabled()) { LOG.debug("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); - List rows = block.rows(); + List rows = block.rows(); LOG.debug("rows: "); StringBuilder bldr = new StringBuilder(); - for (ClickhouseNativeRowImpl row : rows) { + for (ClickhouseBinaryRowImpl row : rows) { bldr.append(rowAsString(row, block.rowDesc())).append("\n"); } LOG.debug(bldr); @@ -163,11 +166,11 @@ private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser return ret; } - private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { + private ClickhouseBinaryDatabaseMetadata readServerHelloBlock(ByteBuf in) { if (metadataReader == null) { metadataReader = new DatabaseMetadataReader(fullClientName, properties); } - ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + ClickhouseBinaryDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { if (LOG.isDebugEnabled()) { LOG.debug("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java index 91ac21047a..8b81df304c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; @@ -27,7 +27,7 @@ import java.util.Map; import java.util.UUID; -public class PrepareStatementCodec extends ClickhouseNativeCommandCodec { +public class PrepareStatementCodec extends ClickhouseBinaryCommandCodec { private final QueryInfo queryInfo; private final UUID psId; private PacketReader packetReader; @@ -39,7 +39,7 @@ protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryInfo queryInfo } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); String sql = cmd.sql(); boolean realInsertBatch = queryInfo.isInsert() && queryInfo.hasValues(); @@ -57,8 +57,8 @@ void encode(ClickhouseNativeEncoder encoder) { throw t; } } else { - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList()), queryInfo, false, psId))); + completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(sql, new ClickhouseBinaryParamDesc(Collections.emptyList()), + new ClickhouseBinaryRowDesc(Collections.emptyList()), queryInfo, false, psId))); } } @@ -72,13 +72,13 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; if (packet.getClass() == TableColumns.class) { TableColumns columns = (TableColumns)packet; - Map data = columns.columnDefinition().getColumnsWithTypes(); + Map data = columns.columnDefinition().getColumnsWithTypes(); List columnNames = new ArrayList<>(data.keySet()); List columnTypes = new ArrayList<>(data.values()); - ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); + ClickhouseBinaryRowDesc rowDesc = new ClickhouseBinaryRowDesc(columnNames, columnTypes); + completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(cmd.sql(), + new ClickhouseBinaryParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java index e4141b6a73..64c690501e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java similarity index 99% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java index 1776043180..dc13492ee2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java index 3f58e8f66c..6d1a94c50a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class QueryProcessingStage { public static final int FETCH_COLUMNS = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java index ce9805c6ca..a7e43611a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class QueryProgressInfo { private final int rows; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java index 697cece47d..7532e65d00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; public class QueryProgressInfoReader { private final int serverRevision; @@ -26,7 +26,7 @@ public class QueryProgressInfoReader { private Integer writtenRows; private Integer writtenBytes; - public QueryProgressInfoReader(ClickhouseNativeDatabaseMetadata md) { + public QueryProgressInfoReader(ClickhouseBinaryDatabaseMetadata md) { this.serverRevision = md.getRevision(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java index 93cc636fb3..0acec8c0ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java index 75b85cb4cd..2459890995 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java similarity index 68% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java index 3f59f0d182..6b9fa7148a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowImpl; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; @@ -28,12 +28,12 @@ class RowResultDecoder extends RowDecoder { private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); - private final ClickhouseNativeRowDesc rowDesc; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryRowDesc rowDesc; + private final ClickhouseBinaryDatabaseMetadata md; private ColumnOrientedBlock block; private int rowNo; - protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc, ClickhouseNativeDatabaseMetadata md) { + protected RowResultDecoder(Collector collector, ClickhouseBinaryRowDesc rowDesc, ClickhouseBinaryDatabaseMetadata md) { super(collector); this.rowDesc = rowDesc; this.md = md; @@ -41,7 +41,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRowImpl row = block.row(rowNo); + ClickhouseBinaryRowImpl row = block.row(rowNo); ++rowNo; return row; } @@ -56,7 +56,7 @@ public void generateRows(ColumnOrientedBlock block) { this.rowNo = 0; } - public ClickhouseNativeRowDesc getRowDesc() { + public ClickhouseBinaryRowDesc getRowDesc() { return rowDesc; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java index f1b47cbd2f..67ebe88a02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java index 8898234631..bbbfdca1d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java @@ -11,11 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CommandResponse; @@ -24,7 +26,7 @@ import java.util.Collections; import java.util.Map; -public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ +public class SimpleQueryCommandCodec extends ClickhouseBinaryQueryCommandBaseCodec> { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; protected final QueryInfo queryInfo; @@ -33,12 +35,12 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - protected final ClickhouseNativeSocketConnection conn; + protected final ClickhouseBinarySocketConnection conn; - protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseBinarySocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseBinarySocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); this.queryInfo = queryInfo; this.batchSize = batchSize; @@ -47,7 +49,7 @@ protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryComma } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { checkIfBusy(); super.encode(encoder); if (!isSuspended()) { @@ -96,7 +98,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.debug("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); } if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = block.rowDesc(); + ClickhouseBinaryRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; @@ -138,9 +140,9 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { if (queryInfo != null && queryInfo.isInsert()) { - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseBinaryRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); - cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); + cmd.resultHandler().handleResult(batchSize, 0, ClickhouseBinaryRowDesc.EMPTY, rowResultDecoder.result(), failure); } } if (t != null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java index 387566f487..eff3093b7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import java.util.List; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java index 2834938b04..51cb75aaa1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java @@ -11,18 +11,18 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class ArrayColumn extends ClickhouseColumn { - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; - public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md) { super(descriptor); this.md = md; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java index 5de51fb593..6fc93b14e8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java @@ -11,19 +11,19 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; public class ArrayColumnReader extends ClickhouseColumnReader { private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseBinaryDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor elementTypeDescr; private int[][][] perRowsSlice; @@ -36,7 +36,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descr); this.md = md; this.elementTypeDescr = descr.getNestedDescr(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java index 9878d74d43..e568480bd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.ArrayList; @@ -25,11 +25,11 @@ import java.util.stream.Collectors; public class ArrayColumnWriter extends ClickhouseColumnWriter { - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseBinaryDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, int columnIndex) { super(data, descriptor, columnIndex); this.md = md; this.elementTypeDescr = descriptor.getNestedDescr(); @@ -43,7 +43,7 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); } - private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseBinaryColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } @@ -60,7 +60,7 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli localWriter.serializeDataInternal(sink, fromRow, toRow); } - private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseBinaryColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java index 242159d97e..a90f68fe5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public class ArrayIntPairIterator implements IntPairIterator { private final int[] src; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java index ede12a11f9..85b98dbf31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public abstract class ClickhouseColumn { - protected ClickhouseNativeColumnDescriptor descriptor; + protected ClickhouseBinaryColumnDescriptor descriptor; - public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { + public ClickhouseColumn(ClickhouseBinaryColumnDescriptor descriptor) { this.descriptor = descriptor; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java index 2b23a3808d..8a1e304189 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; public abstract class ClickhouseColumnReader { @@ -22,16 +22,16 @@ public abstract class ClickhouseColumnReader { private static final Object NOP_STATE = new Object(); protected final int nRows; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final ClickhouseBinaryColumnDescriptor columnDescriptor; protected BitSet nullsMap; protected Object itemsArray; - protected ClickhouseColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected ClickhouseColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { this.columnDescriptor = columnDescriptor; this.nRows = nRows; } - public ClickhouseNativeColumnDescriptor columnDescriptor() { + public ClickhouseBinaryColumnDescriptor columnDescriptor() { return columnDescriptor; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java index dbe0daee03..d9dc6ca42b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public abstract class ClickhouseColumnWriter { protected final List data; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final ClickhouseBinaryColumnDescriptor columnDescriptor; protected final int columnIndex; - public ClickhouseColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public ClickhouseColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { this.data = data; this.columnDescriptor = columnDescriptor; this.columnIndex = columnIndex; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java index da678db3f0..05916ef8b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; @@ -61,12 +61,12 @@ private static Map buildConstDurationMultipliers() { } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { + public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; Map.Entry arrayDimensionsInfo = maybeUnwrapArrayDimensions(spec); if (arrayDimensionsInfo.getKey() > 0) { - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, + ClickhouseBinaryColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseBinaryColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, arrayDimensionsInfo.getKey(), nested); } boolean isLowCardinality = false; @@ -91,75 +91,75 @@ private static Map.Entry maybeUnwrapArrayDimensions(String spec return new AbstractMap.SimpleEntry<>(arrayDepth, spec); } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, + public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, Int128Column.INT128_MIN_VALUE, Int128Column.INT128_MAX_VALUE); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseBinaryColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith("DateTime64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith("DateTime")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); String[] modifiersTokens = decimalModifiers.split(","); int precision = Integer.parseInt(modifiersTokens[0].trim()); int scale = Integer.parseInt(modifiersTokens[1].trim()); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); } else if (spec.startsWith(ENUM_PREFIX)) { int openBracketPos = spec.indexOf('(', ENUM_PREFIX_LENGTH); int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("Nothing".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float32".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float64".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); } else if ("Date".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, 0, 65535, null, null); } else if (spec.startsWith(INTERVAL_PREFIX)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("IPv4".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } else if ("IPv6".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); @@ -179,20 +179,20 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseBinaryDatabaseMetadata md) { return columnForSpec(spec, name, md, false); } - public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { + ClickhouseBinaryColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); return columnForSpec(descr, md, enableStringCache); } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { return columnForSpec(descr, md, false); } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + public static ClickhouseColumn columnForSpec(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { if (descr.isArray()) { return new ArrayColumn(descr, md); } @@ -213,7 +213,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new Int128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { - if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + if (descr.getElementSize() == ClickhouseBinaryColumnDescriptor.NOSIZE) { return new StringColumn(descr, md, enableStringCache); } else { return new FixedStringColumn(descr, md, enableStringCache); @@ -286,7 +286,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - private static Duration getDurationMultiplier(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + private static Duration getDurationMultiplier(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { String durationStr = descr.getNestedType().substring(INTERVAL_PREFIX.length()); Duration multiplier = CONST_DURATION_MULTIPLIERS.get(durationStr); if (multiplier == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java index e27fa6b8f0..d3ff7d1940 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.math.BigDecimal; @@ -35,7 +35,7 @@ public static int getLastNonZeroPos(byte[] bytes) { } //TODO: maybe rework checks - public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { + public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseBinaryColumnDescriptor columnDescriptor) { if (columnDescriptor.getScale() < bd.scale()) { throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java index 66e2585958..983cf20b3f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class DateColumn extends UInt16Column { - public DateColumn(ClickhouseNativeColumnDescriptor descriptor) { + public DateColumn(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java index a951ad69b9..c247a8ef75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.LocalDate; @@ -23,7 +23,7 @@ public class DateColumnReader extends UInt16ColumnReader { public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); - public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public DateColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java index 53b289adca..3e2303a9d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.LocalDate; @@ -24,7 +24,7 @@ public class DateColumnWriter extends UInt16ColumnWriter { public static final long MAX_VALUE = 65535; - public DateColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public DateColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java index 988e20243c..4b629a23c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -29,7 +29,7 @@ public class DateTime64Column extends ClickhouseColumn { private final ZoneId zoneId; private boolean saturateExtraNanos; - public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { + public DateTime64Column(ClickhouseBinaryColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { super(descriptor); this.precision = precision; this.zoneId = zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java index 2de3b7312d..f5b487b6b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; import java.time.Instant; @@ -26,7 +26,7 @@ public class DateTime64ColumnReader extends ClickhouseColumnReader { private final ZoneId zoneId; private final BigInteger invTickSize; - public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + public DateTime64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Integer precision, ZoneId zoneId) { super(nRows, descr); this.zoneId = zoneId; this.invTickSize = BigInteger.TEN.pow(precision); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java index 48384cd421..5c10c25bcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -28,7 +28,7 @@ public class DateTime64ColumnWriter extends ClickhouseColumnWriter { private final ZoneId zoneId; private final boolean saturateExtraNanos; - public DateTime64ColumnWriter(List data, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { + public DateTime64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { super(data, descr, columnIndex); this.zoneId = zoneId; this.invTickSize = BigInteger.TEN.pow(precision); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java index 53e4ee4d96..cdae818fbf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -27,7 +27,7 @@ public class DateTimeColumn extends ClickhouseColumn { private final ZoneId zoneId; private final OffsetDateTime nullValue; - public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { + public DateTimeColumn(ClickhouseBinaryColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; this.nullValue = Instant.EPOCH.atZone(zoneId).toOffsetDateTime(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java index 15a6737d8d..268a7336f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; import java.time.OffsetDateTime; @@ -27,7 +27,7 @@ public class DateTimeColumnReader extends ClickhouseColumnReader { private final ZoneId zoneId; - public DateTimeColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + public DateTimeColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ZoneId zoneId) { super(nRows, descr); this.zoneId = zoneId; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java index c377239f08..352b3be14a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -25,7 +25,7 @@ public class DateTimeColumnWriter extends ClickhouseColumnWriter { public final OffsetDateTime maxValue; - public DateTimeColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { + public DateTimeColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { super(data, columnDescriptor, columnIndex); this.maxValue = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java index cce44f7e36..99d42c4951 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -31,7 +31,7 @@ public class Decimal128Column extends ClickhouseColumn { public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); private final Numeric zeroValue; - public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal128Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java index 284c136be7..75df301530 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -31,7 +31,7 @@ public class Decimal256Column extends ClickhouseColumn { private final Numeric zeroValue; - public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal256Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java index ce45b1a1ba..754393375e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -30,7 +30,7 @@ public class Decimal32Column extends ClickhouseColumn { private final Numeric zeroValue; - public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java index dfff0877ef..2d47c1f478 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class Decimal32ColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mc) { + protected Decimal32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mc) { super(nRows, columnDescriptor); this.mc = mc; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java index b1a6a877a7..130f97c16d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -23,7 +23,7 @@ import java.util.List; public class Decimal32ColumnWriter extends ClickhouseColumnWriter { - public Decimal32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Decimal32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java index 7e9df4f024..f95e841235 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -29,7 +29,7 @@ public class Decimal64Column extends ClickhouseColumn { public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); private final Numeric zeroValue; - public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java index 2dbe9fb847..54d2a22fdd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class Decimal64ColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { + protected Decimal64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); this.mc = mathContext; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java index 8f68b0dbcb..4de35beaf0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -23,7 +23,7 @@ import java.util.List; public class Decimal64ColumnWriter extends ClickhouseColumnWriter { - public Decimal64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Decimal64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java index e8b046db0a..6ce63d5b02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum16Column extends UInt16Column { private final Map enumVals; private final EnumResolutionMethod resolutionMethod; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum16Column(ClickhouseBinaryColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; this.resolutionMethod = resolutionMethod; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java index 75c9f9458f..052c382774 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; @@ -21,7 +21,7 @@ public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumn public static final int ELEMENT_SIZE = 2; private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java index f3353e9500..f1d25ad459 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum16ColumnWriter extends UInt16ColumnWriter { private final EnumColumnEncoder columnEncoder; - public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + public Enum16ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex, Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java index 17162b0fcf..e281a7099d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum8Column extends UInt8Column { private final Map enumVals; private final EnumResolutionMethod resolutionMethod; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum8Column(ClickhouseBinaryColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; this.resolutionMethod = resolutionMethod; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java index a9165743a3..1d53478694 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; @@ -21,7 +21,7 @@ public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnRe public static final int ELEMENT_SIZE = 1; private final EnumColumnDecoder columnRecoder; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java index aaed4cdaea..6e0eff6911 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum8ColumnWriter extends UInt8ColumnWriter { private final EnumColumnEncoder columnEncoder; - public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + public Enum8ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex, Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java index 77ca75f915..246c4ae248 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java index 96a473ccb0..1c21f46c64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java index 552d7da6bb..a68100cab4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public interface EnumColumnReader { Object[] recodeValues(Object[] src, Class desired); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java index d714ed2324..eff99571d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.Arrays; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java index 04e5ed1842..2054b13de8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java @@ -11,19 +11,19 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - protected final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseBinaryDatabaseMetadata md; private final boolean enableStringCache; - public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + public FixedStringColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; this.enableStringCache = enableStringCache; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java index 16b0a948a1..7c766bfbb6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; @@ -29,7 +29,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private List elements; - protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { + protected FixedStringColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseBinaryDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java index ea5d7c5205..99da8811b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; @@ -23,7 +23,7 @@ public class FixedStringColumnWriter extends ClickhouseColumnWriter { private final Charset charset; - public FixedStringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public FixedStringColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, columnIndex); this.charset = charset; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java index 3d339a58b6..63b02d4b97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class Float32Column extends ClickhouseColumn { public static final Float[] EMPTY_FLOAT_ARRAY = new Float[0]; public static final Float ZERO_VALUE = 0.0f; - public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { + public Float32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java similarity index 80% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java index 37bf1eee81..49a263a243 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class Float32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; - protected Float32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Float32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java index 9ace358514..9df1cde405 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class Float32ColumnWriter extends ClickhouseColumnWriter { - public Float32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Float32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java index 15bf6b50e3..5883af01d1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class Float64Column extends ClickhouseColumn { public static final Double[] EMPTY_FLOAT_ARRAY = new Double[0]; public static final Double ZERO_DOUBLE = 0d; - public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { + public Float64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java similarity index 80% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java index cf6343ff15..df741363a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class Float64ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 8; - protected Float64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Float64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java index 6a697008ac..db0a7c3067 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class Float64ColumnWriter extends ClickhouseColumnWriter { - public Float64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Float64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java index 1069276929..344c6b1320 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class GenericDecimalColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected GenericDecimalColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { + protected GenericDecimalColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); this.mc = mathContext; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java index 0cbb486f12..0ab90b8694 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -25,7 +25,7 @@ public class GenericDecimalColumnWriter extends ClickhouseColumnWriter { private final BigInteger negAddon; - public GenericDecimalColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, int columnIndex) { + public GenericDecimalColumnWriter(List data, ClickhouseBinaryColumnDescriptor descriptor, int columnIndex) { super(data, descriptor, columnIndex); this.negAddon = BigInteger.ONE.shiftLeft(columnDescriptor.getElementSize() * 8); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java index 388dc54fff..6faa6f0a58 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java @@ -11,13 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; -import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; @@ -37,7 +36,7 @@ private static Inet4Address ipv4(byte[] src) { } } - public IPv4Column(ClickhouseNativeColumnDescriptor descr) { + public IPv4Column(ClickhouseBinaryColumnDescriptor descr) { super(descr); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java similarity index 89% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java index 85f39cfdd3..f328b51425 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet4Address; import java.net.InetAddress; @@ -21,7 +21,7 @@ public class IPv4ColumnReader extends UInt32ColumnReader { - public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + public IPv4ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor) { super(nRows, descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java index 5ff5256c4a..cc9c96d919 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; import java.util.List; public class IPv4ColumnWriter extends UInt32ColumnWriter { - public IPv4ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public IPv4ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java index 7fd2701421..bf4167b732 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; @@ -47,7 +47,7 @@ private static Inet6Address ipv6(byte[] src) { } } - public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public IPv6Column(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { super(descr, md, false); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java index ae720858dd..67ac74a737 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet6Address; import java.net.InetAddress; @@ -22,7 +22,7 @@ public class IPv6ColumnReader extends FixedStringColumnReader { - protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + protected IPv6ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, ClickhouseBinaryDatabaseMetadata md) { super(nRows, columnDescriptor, false, md); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java index d1992a865c..7ce48bfc23 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; @@ -22,7 +22,7 @@ import java.util.List; public class IPv6ColumnWriter extends FixedStringColumnWriter { - public IPv6ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public IPv6ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, charset, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java index 7e43cbbe07..db7717f4b2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -27,7 +27,7 @@ public class Int128Column extends ClickhouseColumn { public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); - public Int128Column(ClickhouseNativeColumnDescriptor descriptor) { + public Int128Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java index b50576222f..6dba11b4ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; //experimental support at the moment public class Int128ColumnReader extends ClickhouseColumnReader { - protected Int128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Int128ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java index 27bc846a52..d766becf0a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; import java.util.List; public class Int128ColumnWriter extends ClickhouseColumnWriter { - public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Int128ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java index ef2877d174..9f5e7ba760 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public interface IntPairIterator { IntPairIterator EMPTY = new IntPairIterator() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java index 3b179cc9b1..8dd972e2b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Duration; @@ -25,7 +25,7 @@ public class IntervalColumn extends ClickhouseColumn { public static final Duration ZERO_VALUE = Duration.ZERO; private final Duration multiplier; - public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + public IntervalColumn(ClickhouseBinaryColumnDescriptor descriptor, Duration multiplier) { super(descriptor); this.multiplier = multiplier; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java index 0c91436277..5d01f8e650 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.Duration; public class IntervalColumnReader extends UInt64ColumnReader { private final Duration multiplier; - public IntervalColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + public IntervalColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor, Duration multiplier) { super(nRows, descriptor); this.multiplier = multiplier; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java index 120527a9ff..d05d97457e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.AbstractMap; import java.util.Iterator; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java index c2ab321e91..e7d95619df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - private final ClickhouseNativeColumnDescriptor indexDescriptor; + private final ClickhouseBinaryColumnDescriptor indexDescriptor; private final ClickhouseColumn indexColumn; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; - public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md) { super(descriptor); this.md = md; this.indexDescriptor = descriptor.copyWithModifiers(false, false); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java index 93807c59f6..2df335c4e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; @@ -30,8 +30,8 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { }; public static final Object[] EMPTY_ARRAY = new Object[0]; - private final ClickhouseNativeColumnDescriptor indexDescr; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor indexDescr; + private final ClickhouseBinaryDatabaseMetadata md; private ClickhouseColumnReader indexColumn; private Long serType; private Long indexSize; @@ -40,7 +40,7 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { private ClickhouseColumnReader keysColumn; - public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexColumn, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryColumnDescriptor indexColumn, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descr); this.indexDescr = indexColumn; this.md = md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java index 823506e75b..37f1db4840 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.*; @@ -32,12 +32,12 @@ public class LowCardinalityColumnWriter extends ClickhouseColumnWriter { public static final int NEED_UPDATE_DICTIONARY = 1 << 10; public static final int SERIALIZATION_TYPE = HAS_ADDITIONAL_KEYS_BIT | NEED_UPDATE_DICTIONARY; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private Map dictionaryIndex; private List keys; private int nullAddon; - public LowCardinalityColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public LowCardinalityColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, ClickhouseBinaryDatabaseMetadata md, int columnIndex) { super(data, columnDescriptor, columnIndex); this.md = md; } @@ -51,7 +51,7 @@ protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { dictionaryIndex = new LinkedHashMap<>(); keys = new ArrayList<>(); - ClickhouseNativeColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); + ClickhouseBinaryColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); ClickhouseColumn dictionaryColumn = ClickhouseColumns.columnForSpec(dictionaryWriterDescr, md); nullAddon = columnDescriptor.isNullable() ? 1 : 0; super.serializeDataInternal(sink, fromRow, toRow); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java index 828661bd29..cc032e5386 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java index 26f023b4b8..e292f20ad6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.lang.ref.SoftReference; import java.util.function.Supplier; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java index e4b8936a8d..a280e7cc40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -24,8 +24,8 @@ public class StringColumn extends ClickhouseColumn { public static final byte[] ZERO_VALUE = new byte[0]; private final boolean enableStringCache; - private final ClickhouseNativeDatabaseMetadata md; - public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + private final ClickhouseBinaryDatabaseMetadata md; + public StringColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; this.enableStringCache = enableStringCache; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java index 502b45dede..60caebba4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; @@ -28,7 +28,7 @@ public class StringColumnReader extends ClickhouseColumnReader { private final boolean enableStringCache; private final StringCache cache; - protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { + protected StringColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor, boolean enableStringCache, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java index 58e472fe9c..a04be22888 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; @@ -22,7 +22,7 @@ public class StringColumnWriter extends ClickhouseColumnWriter { private final Charset charset; - public StringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public StringColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, columnIndex); this.charset = charset; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java index 636a91c3c7..a31517e4d7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public class Triplet { private final L left; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java index 8182ff172f..950ef17396 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class UInt16Column extends ClickhouseColumn { public static final Integer[] EMPTY_INT_ARRAY = new Integer[0]; public static final Short[] EMPTY_SHORT_ARRAY = new Short[0]; - public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt16Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java index 6e9ee79115..2b552cff58 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt16ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 2; - public UInt16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java index 34efca451e..d82b82acf0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt16ColumnWriter extends ClickhouseColumnWriter { - public UInt16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt16ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java index 03dce40cf1..41064396b3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -21,7 +21,7 @@ public class UInt32Column extends ClickhouseColumn { public static final Long[] EMPTY_LONG_ARRAY = new Long[0]; - public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java index 38e928e87e..1add1ebcad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; - public UInt32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java index b8c2e04166..1e0eec91d6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt32ColumnWriter extends ClickhouseColumnWriter { - public UInt32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java index ff1e010a37..57480fdb30 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -24,7 +24,7 @@ public class UInt64Column extends ClickhouseColumn { public static final Numeric[] EMPTY_NUMERIC_ARRAY = new Numeric[0]; public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); - public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java index 098566d801..78a9115a08 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; @@ -22,7 +22,7 @@ public class UInt64ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 8; - public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java index 7480b176c4..828e5eb67c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt64ColumnWriter extends ClickhouseColumnWriter { - public UInt64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java index 2e98d58ddc..2204d167e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -21,7 +21,7 @@ public class UInt8Column extends ClickhouseColumn { public static final Byte[] EMPTY_BYTE_ARRAY = new Byte[0]; - public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt8Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java index 00cff5cffc..f22055ecdc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; - public UInt8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java index b061c8c76d..0903f2fe97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt8ColumnWriter extends ClickhouseColumnWriter { - public UInt8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt8ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java index b505b002d7..469d90c122 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -25,7 +25,7 @@ public class UUIDColumn extends ClickhouseColumn { public static final UUID ZERO_UUID = new UUID(0, 0); public static final int ELEMENT_SIZE = 16; - public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { + public UUIDColumn(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java index a81dc5ed7d..c666f622f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.UUID; public class UUIDColumnReader extends ClickhouseColumnReader { - protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected UUIDColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java index 9454a93c9f..a43d218c5e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; import java.util.UUID; public class UUIDColumnWriter extends ClickhouseColumnWriter { - public UUIDColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UUIDColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java similarity index 91% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java index af66fd07fd..c78f412786 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java @@ -12,6 +12,6 @@ */ @ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java similarity index 58% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java index 35d994a556..401f1a7095 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java @@ -11,37 +11,37 @@ * */ -package io.vertx.clickhouse.clickhousenative.spi; +package io.vertx.clickhouse.clickhouse.binary.spi; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.spi.Driver; -public class ClickhouseNativeDriver implements Driver { +public class ClickhouseBinaryDriver implements Driver { @Override public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseNativePool.pool(wrap(options), poolOptions); + return ClickhouseBinaryPool.pool(wrap(options), poolOptions); } @Override public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseNativePool.pool(vertx, wrap(options), poolOptions); + return ClickhouseBinaryPool.pool(vertx, wrap(options), poolOptions); } @Override public boolean acceptsOptions(SqlConnectOptions options) { - return options instanceof ClickhouseNativeConnectOptions || SqlConnectOptions.class.equals(options.getClass()); + return options instanceof ClickhouseBinaryConnectOptions || SqlConnectOptions.class.equals(options.getClass()); } - private static ClickhouseNativeConnectOptions wrap(SqlConnectOptions options) { - if (options instanceof ClickhouseNativeConnectOptions) { - return (ClickhouseNativeConnectOptions) options; + private static ClickhouseBinaryConnectOptions wrap(SqlConnectOptions options) { + if (options instanceof ClickhouseBinaryConnectOptions) { + return (ClickhouseBinaryConnectOptions) options; } else { - return new ClickhouseNativeConnectOptions(options); + return new ClickhouseBinaryConnectOptions(options); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java b/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java similarity index 100% rename from vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java rename to vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..9750371bf9 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Automatic-Module-Name: io.vertx.client.sql.clickhouse.binary + diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver new file mode 100644 index 0000000000..29ad5b1ceb --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -0,0 +1 @@ +io.vertx.clickhouse.clickhouse.binary.spi.ClickhouseBinaryDriver diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 94% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java index becae96044..c9bcad9c15 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java similarity index 86% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 6bb0ef7556..48ea406572 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -16,12 +16,12 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.buffer.UnpooledByteBufAllocator; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.*; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.*; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; @@ -50,8 +50,8 @@ public ArraySerDesTest(String nm, ClickhouseColumn col, List data) { @Parameterized.Parameters(name = "{0}") public static Iterable dataForTest() { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + ClickhouseBinaryColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); + ClickhouseBinaryDatabaseMetadata md = new ClickhouseBinaryDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java similarity index 84% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 380ba259e5..b3a76f2577 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -13,10 +13,10 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -45,7 +45,7 @@ public class BasicClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; @Before @@ -61,36 +61,36 @@ public void teardDown(TestContext ctx) { @Test public void baseConnectTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); } @Test public void loginFailureTest(TestContext ctx) { - ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions(options); + ClickhouseBinaryConnectOptions opts = new ClickhouseBinaryConnectOptions(options); opts.setPassword("wrong-password"); - ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); + ClickhouseBinaryConnection.connect(vertx, opts, ctx.asyncAssertFailure()); } @Test public void testIntegerRanges(TestContext ctx) { - List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") + List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") .flatMap(el -> "Int128".equals(el) ? Stream.of(el, "Nullable(" + el + ")") : Stream.of(el, "U" + el, "LowCardinality(Nullable(" + el + "))", "Nullable(U" + el + ")", "LowCardinality(Nullable(U" + el + "))")) .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() - .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + .map(ClickhouseBinaryColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); LOG.info("integer columns: " + typeNames); - Iterator typesIter = types.iterator(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + Iterator typesIter = types.iterator(); + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { scheduleIntTypeQuery(ctx, typesIter, conn); })); } - private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseBinaryConnection conn) { if (typeIterator.hasNext()) { - ClickhouseNativeColumnDescriptor descr = typeIterator.next(); + ClickhouseBinaryColumnDescriptor descr = typeIterator.next(); String nativeType = descr.getUnparsedNativeType(); //looks like Nullable(UInt128) is broken for min/max at the moment, hence add/subtract BigInteger minValue = descr.getMinValue().add(BigInteger.ONE); @@ -144,7 +144,7 @@ public void nonEmptyLowCardinalityArrayTest(TestContext ctx) { } private void arrayTest(TestContext ctx, String query, List expected) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(res1.size(), expected.size()); @@ -163,7 +163,7 @@ private void arrayTest(TestContext ctx, String query, List expected) { @Test public void baseQueryTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("select 4 as resource, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2").execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(1, res1.size()); @@ -175,7 +175,7 @@ public void baseQueryTest(TestContext ctx) { @Test public void blobTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("select 'abcd'").execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(1, res1.size()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java similarity index 85% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index d7cc0539bc..cdf5655b7d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import org.junit.rules.ExternalResource; import org.testcontainers.containers.ClickHouseContainer; import org.testcontainers.utility.DockerImageName; @@ -24,12 +24,12 @@ public class ClickhouseResource extends ExternalResource { private static final String tlsConnectionUri = System.getProperty("tls.connection.uri"); private ClickHouseContainer server; - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; @Override protected void before() throws Throwable { if (isTestingWithExternalDatabase()) { - this.options = ClickhouseNativeConnectOptions.fromUri(connectionUri); + this.options = ClickhouseBinaryConnectOptions.fromUri(connectionUri); return; } if (this.server != null) { @@ -38,7 +38,7 @@ protected void before() throws Throwable { DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag(clickhouseVersion()); server = new ClickHouseContainer(imageName); server.start(); - this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() + this.options = (ClickhouseBinaryConnectOptions) new ClickhouseBinaryConnectOptions() .setPort(server.getMappedPort(ClickHouseContainer.NATIVE_PORT)) .setHost(server.getContainerIpAddress()) .setUser(server.getUsername()) @@ -66,8 +66,8 @@ protected void after() { } } - public ClickhouseNativeConnectOptions options() { - return new ClickhouseNativeConnectOptions(options); + public ClickhouseBinaryConnectOptions options() { + return new ClickhouseBinaryConnectOptions(options); } public static boolean isTestingWithExternalDatabase() { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 361aa93f5f..fe004d4cf2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -39,7 +39,7 @@ public class ExtendedClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; private String query; @@ -59,7 +59,7 @@ public void extendedQueryTest(TestContext ctx) { Async async = ctx.async(); LongAdder adder = new LongAdder(); final long limit = 55; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { query = String.format("select name, value from (SELECT name, value from vertx_cl_test_table limit %s) t1 order by name desc", limit); conn .prepare(query, ctx.asyncAssertSuccess(ps -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index bbaa6b71bb..73fb38384b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -18,9 +18,9 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; @@ -46,7 +46,7 @@ public void checkExceptions() throws IOException { } PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + ClickhouseBinaryDatabaseMetadata md = new ClickhouseBinaryDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); PacketReader rdr = new PacketReader(md, "none", Collections.emptyMap(), null); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 8251d9b552..0c5bd4e66a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -19,9 +19,9 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; @@ -62,7 +62,7 @@ public static Iterable dataForTest() throws IOException { "/nullable_low_cardinality_without_compression.yaml", "/select_array_of_nullable_string_without_compression.yaml", "/select_empty_array_without_compression.yaml", - "/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" + "/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); @@ -111,7 +111,7 @@ public void doReplayTest() { private void readConnInteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); - ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); + ClickhouseBinaryDatabaseMetadata md = (ClickhouseBinaryDatabaseMetadata)rdr.receivePacket(allocator, buf); do { rdr = new PacketReader(md, fullName, props, lz4Factory); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index c071763cda..5c828136b9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -34,7 +34,7 @@ public class SpecialTypesTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; @Before @@ -141,7 +141,7 @@ public void testIntervalSecondArray(TestContext ctx) { } private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res -> { ctx.assertEquals(1, res.size()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index d1cd0385b6..66ce8f0257 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.clickhousenativeclient.Sleep; import io.vertx.core.Vertx; @@ -46,7 +46,7 @@ public abstract class AllTypesBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - protected ClickhouseNativeConnectOptions options; + protected ClickhouseBinaryConnectOptions options; protected Vertx vertx; public AllTypesBase(String tableSuffix, MyColumnChecker checker) { @@ -63,7 +63,7 @@ public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasL public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName()).execute(ctx.asyncAssertSuccess()); })); } @@ -95,7 +95,7 @@ private List columnsList(boolean hasLowCardinality) { protected void doTest(TestContext ctx, List batch) { String tableName = tableName(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 157a52cf43..cca6bf6c42 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index 15c0635ff4..169752de52 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 9c6367a5bf..e5c6596869 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 9ccf25338f..27f0774820 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index 2341a46ac1..6ae41401b3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 2ef3994dcc..e35d01c098 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index 4d71673796..58f16b4bcb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index 9197f7249c..e252c4ed81 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 05687f698f..1bf329cc6c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -13,8 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv6Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index b8d1c494c4..5aaf4c5c62 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index d8e90bcaa2..37f6eb00f3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.Row; @@ -26,10 +26,10 @@ public class StringArrayDeduplicationTester { private final String tableName; - private final ClickhouseNativeConnectOptions options; + private final ClickhouseBinaryConnectOptions options; private final Vertx vertx; - public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseNativeConnectOptions options) { + public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseBinaryConnectOptions options) { this.tableName = tableName; this.options = options; this.vertx = vertx; @@ -41,7 +41,7 @@ public void test(TestContext ctx) { Tuple.of(2, "val", (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), Tuple.of(3, "dedup", (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) ); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_lc_t, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { conn.query("SELECT nullable_lc_t, nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java index 1eae44db34..ff98cdf9b5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java @@ -20,7 +20,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeCollectorTest extends CollectorTestBase { +public class ClickhouseBinaryCollectorTest extends CollectorTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 87% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 80ecb15fba..2e1f20ca6f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -23,7 +23,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { +public class ClickhouseBinaryConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -42,7 +42,7 @@ public void tearDown(TestContext ctx) { @Override protected void initialConnector(int proxyPort) { - SqlConnectOptions proxyOptions = new ClickhouseNativeConnectOptions(options); + SqlConnectOptions proxyOptions = new ClickhouseBinaryConnectOptions(options); proxyOptions.setPort(proxyPort); proxyOptions.setHost("localhost"); connectionConnector = ClientConfig.CONNECT.connect(vertx, proxyOptions); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java similarity index 82% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java index 3341001077..a5032138dc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -26,7 +26,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeConnectionTest extends ConnectionTestBase { +public class ClickhouseBinaryConnectionTest extends ConnectionTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -36,9 +36,9 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { @Override public void setUp() throws Exception { super.setUp(); - options = new ClickhouseNativeConnectOptions(rule.options()); + options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java index e7140867ad..d9d31da23d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -28,11 +28,11 @@ import java.time.LocalDate; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { +public class ClickhouseBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - public ClickhouseNativeBinaryDataTypeDecodeTest() { + public ClickhouseBinaryDataTypeDecodeTest() { } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java index 89c148d0c1..a9fd7a01bf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -29,7 +29,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { +public class ClickhouseBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java index 7332ce665d..872544c34b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java @@ -21,7 +21,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeDriverTest extends DriverTestBase { +public class ClickhouseBinaryDriverTest extends DriverTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java index 386615fd5c..4d94e796e3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java @@ -27,7 +27,7 @@ import java.util.List; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedBatchTest extends PreparedBatchTestBase { +public class ClickhouseBinaryPreparedBatchTest extends PreparedBatchTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java index 7459610c58..cbee9abe14 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -27,7 +27,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { +public class ClickhouseBinaryPreparedQueryCachedTest extends PreparedQueryCachedTestBase { @Rule public TestName name = new TestName(); @@ -37,9 +37,9 @@ public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCached @Override protected void initConnector() { - options = new ClickhouseNativeConnectOptions(rule.options()); + options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 87% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java index d0127b306a..22640735b7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -18,7 +18,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryPooledTest extends ClickhouseNativePreparedQueryTestBase { +public class ClickhouseBinaryPreparedQueryPooledTest extends ClickhouseBinaryPreparedQueryTestBase { @Override protected void initConnector() { options = rule.options(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java index 6aead392be..e1bea9513b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java @@ -17,7 +17,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryTest extends ClickhouseNativePreparedQueryTestBase { +public class ClickhouseBinaryPreparedQueryTest extends ClickhouseBinaryPreparedQueryTestBase { @Override protected void initConnector() { options = rule.options(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java index 676284f29f..cd43d6faa0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -20,7 +20,7 @@ import org.junit.Ignore; import org.junit.Test; -public abstract class ClickhouseNativePreparedQueryTestBase extends PreparedQueryTestBase { +public abstract class ClickhouseBinaryPreparedQueryTestBase extends PreparedQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java index 9345c9ead0..40be0be2a0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -24,7 +24,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeSimpleQueryPooledTest extends SimpleQueryTestBase { +public class ClickhouseBinarySimpleQueryPooledTest extends SimpleQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java index cbd8888dfb..2b0103fb1f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java @@ -24,7 +24,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeSimpleQueryTest extends SimpleQueryTestBase { +public class ClickhouseBinarySimpleQueryTest extends SimpleQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 95edd2a034..2f26004848 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -26,7 +26,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { +public class ClickhouseBinaryTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java index bad07a71bd..623a17755b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; @@ -27,13 +27,13 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTracingTest extends TracingTestBase { +public class ClickhouseBinaryTracingTest extends TracingTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @Override protected Pool createPool(Vertx vertx) { - return ClickhouseNativePool.pool(vertx, rule.options(), new PoolOptions()); + return ClickhouseBinaryPool.pool(vertx, rule.options(), new PoolOptions()); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java index 40f47e8d0e..f9241aa1db 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java @@ -25,7 +25,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTransactionTest extends DataTypeTestBase { +public class ClickhouseBinaryTransactionTest extends DataTypeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java similarity index 74% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index bac8b75b43..7c6be23a8c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -13,9 +13,9 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; @@ -28,11 +28,11 @@ public enum ClientConfig { CONNECT() { @Override - Connector connect(Vertx vertx, SqlConnectOptions options) { - return new Connector() { + Connector connect(Vertx vertx, SqlConnectOptions options) { + return new Connector() { @Override - public void connect(Handler> handler) { - ClickhouseNativeConnection.connect(vertx, new ClickhouseNativeConnectOptions(options.toJson()), ar -> { + public void connect(Handler> handler) { + ClickhouseBinaryConnection.connect(vertx, new ClickhouseBinaryConnectOptions(options.toJson()), ar -> { if (ar.succeeded()) { handler.handle(Future.succeededFuture(ar.result())); } else { @@ -50,7 +50,7 @@ public void close() { POOLED() { @Override Connector connect(Vertx vertx, SqlConnectOptions options) { - ClickhouseNativePool pool = ClickhouseNativePool.pool(vertx, new ClickhouseNativeConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); + ClickhouseBinaryPool pool = ClickhouseBinaryPool.pool(vertx, new ClickhouseBinaryConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); return new Connector() { @Override public void connect(Handler> handler) { diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py similarity index 100% rename from vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py rename to vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py diff --git a/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml b/vertx-clickhouse-binary-client/src/test/resources/forged_nested_exception.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml rename to vertx-clickhouse-binary-client/src/test/resources/forged_nested_exception.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-binary-client/src/test/resources/init.sql similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/init.sql rename to vertx-clickhouse-binary-client/src/test/resources/init.sql diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/insert_prepare_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/insert_prepare_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml b/vertx-clickhouse-binary-client/src/test/resources/log4j2-test.xml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml rename to vertx-clickhouse-binary-client/src/test/resources/log4j2-test.xml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/select_empty_array_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/select_empty_array_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java deleted file mode 100644 index 660576f56b..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - -package io.vertx.clickhouse.clickhousenative.impl.codec; - -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; - -import java.util.Map; - -import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.*; - -public class ClientInfo { - public static final int NO_QUERY = 0; - public static final int INITIAL_QUERY = 1; - - private final ClickhouseNativeDatabaseMetadata meta; - - public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { - this.meta = meta; - } - - public void serializeTo(ByteBuf buf) { - int serverRevision = meta.getRevision(); - if (serverRevision < DBMS_MIN_REVISION_WITH_CLIENT_INFO) { - throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", - serverRevision, DBMS_MIN_REVISION_WITH_CLIENT_INFO)); - } - buf.writeByte(INITIAL_QUERY); - Map properties = meta.getProperties(); - - //initial_user - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, ""), buf); - //initial_query_id - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_QUERY_ID, ""), buf); - //initial_address - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); - //interface: TCP - buf.writeByte(1); - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); - ByteBufUtils.writePascalString(meta.getFullClientName(), buf); - ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); - ByteBufUtils.writeULeb128(CLIENT_VERSION_MINOR, buf); - ByteBufUtils.writeULeb128(CLIENT_REVISION, buf); - if (serverRevision >= DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { - //quota_key - ByteBufUtils.writePascalString("", buf); - } - if (serverRevision >= DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - ByteBufUtils.writeULeb128(CLIENT_VERSION_PATCH, buf); - } - } -} diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 40f000bfbe..0000000000 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Automatic-Module-Name: io.vertx.client.sql.clickhouse.native - diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver deleted file mode 100644 index 860bd992e9..0000000000 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ /dev/null @@ -1 +0,0 @@ -io.vertx.clickhouse.clickhousenative.spi.ClickhouseNativeDriver diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql deleted file mode 100644 index c92839a52f..0000000000 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ /dev/null @@ -1,354 +0,0 @@ -set allow_suspicious_low_cardinality_types=true; -set allow_experimental_bigint_types=true; -DROP TABLE IF EXISTS vertx_test_int8; -CREATE TABLE vertx_test_int8 ( - id Int8, - simple_t Int8, - nullable_t Nullable(Int8), - array_t Array(Int8), - array3_t Array(Array(Array(Int8))), - nullable_array_t Array(Nullable(Int8)), - nullable_array3_t Array(Array(Array(Nullable(Int8)))), - simple_lc_t LowCardinality(Int8), - nullable_lc_t LowCardinality(Nullable(Int8)), - array_lc_t Array(LowCardinality(Int8)), - array3_lc_t Array(Array(Array(LowCardinality(Int8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint8; -CREATE TABLE vertx_test_uint8 ( - id Int8, - simple_t UInt8, - nullable_t Nullable(UInt8), - array_t Array(UInt8), - array3_t Array(Array(Array(UInt8))), - nullable_array_t Array(Nullable(UInt8)), - nullable_array3_t Array(Array(Array(Nullable(UInt8)))), - simple_lc_t LowCardinality(UInt8), - nullable_lc_t LowCardinality(Nullable(UInt8)), - array_lc_t Array(LowCardinality(UInt8)), - array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int16; -CREATE TABLE vertx_test_int16 ( - id Int8, - simple_t Int16, - nullable_t Nullable(Int16), - array_t Array(Int16), - array3_t Array(Array(Array(Int16))), - nullable_array_t Array(Nullable(Int16)), - nullable_array3_t Array(Array(Array(Nullable(Int16)))), - simple_lc_t LowCardinality(Int16), - nullable_lc_t LowCardinality(Nullable(Int16)), - array_lc_t Array(LowCardinality(Int16)), - array3_lc_t Array(Array(Array(LowCardinality(Int16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint16; -CREATE TABLE vertx_test_uint16 ( - id Int8, - simple_t UInt16, - nullable_t Nullable(UInt16), - array_t Array(UInt16), - array3_t Array(Array(Array(UInt16))), - nullable_array_t Array(Nullable(UInt16)), - nullable_array3_t Array(Array(Array(Nullable(UInt16)))), - simple_lc_t LowCardinality(UInt16), - nullable_lc_t LowCardinality(Nullable(UInt16)), - array_lc_t Array(LowCardinality(UInt16)), - array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int32; -CREATE TABLE vertx_test_int32 ( - id Int8, - simple_t Int32, - nullable_t Nullable(Int32), - array_t Array(Int32), - array3_t Array(Array(Array(Int32))), - nullable_array_t Array(Nullable(Int32)), - nullable_array3_t Array(Array(Array(Nullable(Int32)))), - simple_lc_t LowCardinality(Int32), - nullable_lc_t LowCardinality(Nullable(Int32)), - array_lc_t Array(LowCardinality(Int32)), - array3_lc_t Array(Array(Array(LowCardinality(Int32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint32; -CREATE TABLE vertx_test_uint32 ( - id Int8, - simple_t UInt32, - nullable_t Nullable(UInt32), - array_t Array(UInt32), - array3_t Array(Array(Array(UInt32))), - nullable_array_t Array(Nullable(UInt32)), - nullable_array3_t Array(Array(Array(Nullable(UInt32)))), - simple_lc_t LowCardinality(UInt32), - nullable_lc_t LowCardinality(Nullable(UInt32)), - array_lc_t Array(LowCardinality(UInt32)), - array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int64; -CREATE TABLE vertx_test_int64 ( - id Int8, - simple_t Int64, - nullable_t Nullable(Int64), - array_t Array(Int64), - array3_t Array(Array(Array(Int64))), - nullable_array_t Array(Nullable(Int64)), - nullable_array3_t Array(Array(Array(Nullable(Int64)))), - simple_lc_t LowCardinality(Int64), - nullable_lc_t LowCardinality(Nullable(Int64)), - array_lc_t Array(LowCardinality(Int64)), - array3_lc_t Array(Array(Array(LowCardinality(Int64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint64; -CREATE TABLE vertx_test_uint64 ( - id Int8, - simple_t UInt64, - nullable_t Nullable(UInt64), - array_t Array(UInt64), - array3_t Array(Array(Array(UInt64))), - nullable_array_t Array(Nullable(UInt64)), - nullable_array3_t Array(Array(Array(Nullable(UInt64)))), - simple_lc_t LowCardinality(UInt64), - nullable_lc_t LowCardinality(Nullable(UInt64)), - array_lc_t Array(LowCardinality(UInt64)), - array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int128; -CREATE TABLE vertx_test_int128 ( - id Int8, - simple_t Int128, - nullable_t Nullable(Int128), - array_t Array(Int128), - array3_t Array(Array(Array(Int128))), - nullable_array_t Array(Nullable(Int128)), - nullable_array3_t Array(Array(Array(Nullable(Int128)))), - simple_lc_t LowCardinality(Int128), - nullable_lc_t LowCardinality(Nullable(Int128)), - array_lc_t Array(LowCardinality(Int128)), - array3_lc_t Array(Array(Array(LowCardinality(Int128)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_string; -CREATE TABLE vertx_test_string ( - id Int8, - simple_t String, - nullable_t Nullable(String), - array_t Array(String), - array3_t Array(Array(Array(String))), - nullable_array_t Array(Nullable(String)), - nullable_array3_t Array(Array(Array(Nullable(String)))), - simple_lc_t LowCardinality(String), - nullable_lc_t LowCardinality(Nullable(String)), - array_lc_t Array(LowCardinality(String)), - array3_lc_t Array(Array(Array(LowCardinality(String)))), - nullable_array_lc_t Array(LowCardinality(Nullable(String))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_fixedstring; -CREATE TABLE vertx_test_fixedstring ( - id Int8, - simple_t FixedString(12), - nullable_t Nullable(FixedString(12)), - array_t Array(FixedString(12)), - array3_t Array(Array(Array(FixedString(12)))), - nullable_array_t Array(Nullable(FixedString(12))), - nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), - simple_lc_t LowCardinality(FixedString(12)), - nullable_lc_t LowCardinality(Nullable(FixedString(12))), - array_lc_t Array(LowCardinality(FixedString(12))), - array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), - nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_datetime; -CREATE TABLE vertx_test_datetime ( - id Int8, - simple_t DateTime, - nullable_t Nullable(DateTime), - array_t Array(DateTime), - array3_t Array(Array(Array(DateTime))), - nullable_array_t Array(Nullable(DateTime)), - nullable_array3_t Array(Array(Array(Nullable(DateTime)))), - simple_lc_t LowCardinality(DateTime), - nullable_lc_t LowCardinality(Nullable(DateTime)), - array_lc_t Array(LowCardinality(DateTime)), - array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), - nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_datetime64; -CREATE TABLE vertx_test_datetime64 ( - id Int8, - simple_t DateTime64(3), - nullable_t Nullable(DateTime64(3)), - array_t Array(DateTime64(3)), - array3_t Array(Array(Array(DateTime64(3)))), - nullable_array_t Array(Nullable(DateTime64(3))), - nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_date; -CREATE TABLE vertx_test_date ( - id Int8, - simple_t Date, - nullable_t Nullable(Date), - array_t Array(Date), - array3_t Array(Array(Array(Date))), - nullable_array_t Array(Nullable(Date)), - nullable_array3_t Array(Array(Array(Nullable(Date)))), - simple_lc_t LowCardinality(Date), - nullable_lc_t LowCardinality(Nullable(Date)), - array_lc_t Array(LowCardinality(Date)), - array3_lc_t Array(Array(Array(LowCardinality(Date)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Date))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uuid; -CREATE TABLE vertx_test_uuid ( - id Int8, - simple_t UUID, - nullable_t Nullable(UUID), - array_t Array(UUID), - array3_t Array(Array(Array(UUID))), - nullable_array_t Array(Nullable(UUID)), - nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal32; -CREATE TABLE vertx_test_decimal32 ( - id Int8, - simple_t Decimal32(4), - nullable_t Nullable(Decimal32(4)), - array_t Array(Decimal32(4)), - array3_t Array(Array(Array(Decimal32(4)))), - nullable_array_t Array(Nullable(Decimal32(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal64; -CREATE TABLE vertx_test_decimal64 ( - id Int8, - simple_t Decimal64(4), - nullable_t Nullable(Decimal64(4)), - array_t Array(Decimal64(4)), - array3_t Array(Array(Array(Decimal64(4)))), - nullable_array_t Array(Nullable(Decimal64(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal128; -CREATE TABLE vertx_test_decimal128 ( - id Int8, - simple_t Decimal128(4), - nullable_t Nullable(Decimal128(4)), - array_t Array(Decimal128(4)), - array3_t Array(Array(Array(Decimal128(4)))), - nullable_array_t Array(Nullable(Decimal128(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal256; -CREATE TABLE vertx_test_decimal256 ( - id Int8, - simple_t Decimal256(4), - nullable_t Nullable(Decimal256(4)), - array_t Array(Decimal256(4)), - array3_t Array(Array(Array(Decimal256(4)))), - nullable_array_t Array(Nullable(Decimal256(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_enum8; -CREATE TABLE vertx_test_enum8 ( - id Int8, - simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), - nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), - nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), - nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_enum16; -CREATE TABLE vertx_test_enum16 ( - id Int8, - simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), - nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), - nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), - nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_float32; -CREATE TABLE vertx_test_float32 ( - id Int8, - simple_t Float32, - nullable_t Nullable(Float32), - array_t Array(Float32), - array3_t Array(Array(Array(Float32))), - nullable_array_t Array(Nullable(Float32)), - nullable_array3_t Array(Array(Array(Nullable(Float32)))), - simple_lc_t LowCardinality(Float32), - nullable_lc_t LowCardinality(Nullable(Float32)), - array_lc_t Array(LowCardinality(Float32)), - array3_lc_t Array(Array(Array(LowCardinality(Float32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_float64; -CREATE TABLE vertx_test_float64 ( - id Int8, - simple_t Float64, - nullable_t Nullable(Float64), - array_t Array(Float64), - array3_t Array(Array(Array(Float64))), - nullable_array_t Array(Nullable(Float64)), - nullable_array3_t Array(Array(Array(Nullable(Float64)))), - simple_lc_t LowCardinality(Float64), - nullable_lc_t LowCardinality(Nullable(Float64)), - array_lc_t Array(LowCardinality(Float64)), - array3_lc_t Array(Array(Array(LowCardinality(Float64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_ipv6; -CREATE TABLE vertx_test_ipv6 ( - id Int8, - simple_t IPv6, - nullable_t Nullable(IPv6), - array_t Array(IPv6), - array3_t Array(Array(Array(IPv6))), - nullable_array_t Array(Nullable(IPv6)), - nullable_array3_t Array(Array(Array(Nullable(IPv6)))), - simple_lc_t LowCardinality(IPv6), - nullable_lc_t LowCardinality(Nullable(IPv6)), - array_lc_t Array(LowCardinality(IPv6)), - array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_ipv4; -CREATE TABLE vertx_test_ipv4 ( - id Int8, - simple_t IPv4, - nullable_t Nullable(IPv4), - array_t Array(IPv4), - array3_t Array(Array(Array(IPv4))), - nullable_array_t Array(Nullable(IPv4)), - nullable_array3_t Array(Array(Array(Nullable(IPv4)))), - simple_lc_t LowCardinality(IPv4), - nullable_lc_t LowCardinality(Nullable(IPv4)), - array_lc_t Array(LowCardinality(IPv4)), - array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = Memory(); From 5ff7b1f82a9fbfe0fc25325fb7bfc6b0c76a8fe9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 15:35:55 +0300 Subject: [PATCH 078/176] replaced confusing 'native' to 'binary' in pom.xml Signed-off-by: vladimir --- pom.xml | 2 +- vertx-clickhouse-binary-client/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4f19494cc1..cc61887230 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,7 @@ vertx-mysql-client vertx-mssql-client vertx-db2-client - vertx-clickhouse-native-client + vertx-clickhouse-binary-client vertx-sql-client-templates diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 7e33378c9d..96ed3a092d 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -25,7 +25,7 @@ 4.1.0-SNAPSHOT - vertx-clickhouse-native-client + vertx-clickhouse-binary-client Vertx Clickhouse native Client https://github.com/eclipse-vertx/vertx-sql-client From ba517dd2e7a4be59f2dfdd35d9562d2715fb9f72 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:08:59 +0300 Subject: [PATCH 079/176] replaced confusing 'native' to 'binary' in tests and package-info Signed-off-by: vladimir --- .../io/vertx/clickhouse/clickhouse/binary/package-info.java | 2 +- .../ArraySerDesTest.java | 2 +- .../BasicClickhouseTest.java | 2 +- .../ClickhouseResource.java | 2 +- .../ExtendedClickhouseTest.java | 2 +- .../NestedExceptionsTest.java | 2 +- .../PacketReaderReplayTest.java | 2 +- .../PacketUtil.java | 2 +- .../Sleep.java | 2 +- .../SpecialTypesTest.java | 2 +- .../alltypes/AllTypesBase.java | 6 +++--- .../alltypes/BlobTest.java | 2 +- .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 2 +- .../alltypes/Enum8Test.java | 2 +- .../alltypes/EnumTest.java | 2 +- .../alltypes/FixedStringTest.java | 2 +- .../alltypes/Float32Test.java | 2 +- .../alltypes/Float64Test.java | 2 +- .../alltypes/HugeDecimalTest.java | 2 +- .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 2 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 2 +- .../alltypes/Int32Test.java | 2 +- .../alltypes/Int64Test.java | 2 +- .../alltypes/Int8Test.java | 2 +- .../alltypes/StringArrayDeduplicationTester.java | 2 +- .../alltypes/StringTest.java | 2 +- .../alltypes/TestEnum.java | 2 +- .../alltypes/UInt16Test.java | 2 +- .../alltypes/UInt32Test.java | 2 +- .../alltypes/UInt64Test.java | 2 +- .../alltypes/UInt8Test.java | 2 +- .../alltypes/UUIDTest.java | 2 +- .../tck/ClickhouseBinaryCollectorTest.java | 4 ++-- .../tck/ClickhouseBinaryConnectionAutoRetryTest.java | 4 ++-- .../tck/ClickhouseBinaryConnectionTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeEncodeTest.java | 6 +++--- .../tck/ClickhouseBinaryDriverTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedBatchTest.java | 6 +++--- .../tck/ClickhouseBinaryPreparedQueryCachedTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTestBase.java | 4 ++-- .../tck/ClickhouseBinarySimpleQueryPooledTest.java | 6 +++--- .../tck/ClickhouseBinarySimpleQueryTest.java | 6 +++--- .../tck/ClickhouseBinaryTextDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryTracingTest.java | 4 ++-- .../tck/ClickhouseBinaryTransactionTest.java | 4 ++-- .../tck/ClientConfig.java | 2 +- 58 files changed, 78 insertions(+), 78 deletions(-) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ArraySerDesTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/BasicClickhouseTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ClickhouseResource.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ExtendedClickhouseTest.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/NestedExceptionsTest.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/PacketReaderReplayTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/PacketUtil.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/Sleep.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/SpecialTypesTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/AllTypesBase.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/BlobTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTime64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTimeTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal128Test.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal256Test.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Enum16Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Enum8Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/EnumTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/FixedStringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Float32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Float64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/HugeDecimalTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/IPv4Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/IPv6Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int128Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/StringArrayDeduplicationTester.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/StringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/TestEnum.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UUIDTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryCollectorTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryConnectionAutoRetryTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryConnectionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDataTypeEncodeTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDriverTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedBatchTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryCachedTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryPooledTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryTestBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinarySimpleQueryPooledTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinarySimpleQueryTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTracingTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTransactionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClientConfig.java (98%) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java index c78f412786..3ef668416c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java @@ -11,7 +11,7 @@ * */ -@ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") +@ModuleGen(name = "vertx-clickhousebinary-client", groupPackage = "io.vertx") package io.vertx.clickhouse.clickhouse.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java index 48ea406572..18cde58df4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java index b3a76f2577..54bbe3b837 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java index cdf5655b7d..d87115aef1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java index fe004d4cf2..06a6ed82ed 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java index 73fb38384b..6a882dd478 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java index 0c5bd4e66a..907652f71d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java index f53eaf4c47..da45f55aac 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java index 884e90d080..b9475eea86 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; public class Sleep { //updates may be async even for non-replicated tables; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java index 5c828136b9..5ebe88a09d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java index 66ce8f0257..9586dbf898 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java index f2f8169a0c..fd9370dc64 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java index cca6bf6c42..0ce83aed5e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java index 169752de52..cdb07a3396 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java index e5c6596869..74c872adac 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java index 27f0774820..de4939436f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java index 6ae41401b3..d7952f7c85 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java index e35d01c098..585a55849c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java index 58f16b4bcb..d11311a486 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java index 47c9ca9cfd..5a3d5347fd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java index 759125f59b..52ea8288d4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java index 6bcaad22ae..f32c404139 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java index ecfbb6addc..5ddae4fbb6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java index 9443ee0be6..24e8889eb8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java index 0df858e0ca..09c4f2823c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java index 42c012f2d9..5f247afe8a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java index e252c4ed81..b069c9f6be 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java index 1bf329cc6c..1e5f66c5c2 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java index 5aaf4c5c62..425b7f3ad6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java index 36b47628e5..f294302b0e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java index a204a07840..c27f00ea38 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java index 9c402df55a..e0d945dd40 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java index c1b8a29438..b5955ae48e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java index 37f6eb00f3..9c876125cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java index 46925a0ab9..77aa9ff526 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java index 1853465c37..7bf109f73c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; enum TestEnum { v0, v1, v2, v3, v4, v5, v6 diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java index 4434b1dd84..002d375a94 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java index 1158e4820c..faef27decd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java index cec0bd6361..c0e98619dc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java index b2e1f87fc7..47d7b47bdc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java index df8c288eec..20c3d2a13f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java index ff98cdf9b5..c495cc2d83 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.CollectorTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 2e1f20ca6f..2d74957077 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java index a5032138dc..bd937d3567 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java index d9d31da23d..42664f48f1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java index a9fd7a01bf..6a920940a8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java index 872544c34b..0a3b3a619a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.DriverTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java index 4d94e796e3..6533c220e3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java index cbee9abe14..91d4d472bb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java index 22640735b7..01ebd21e40 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java index e1bea9513b..c2ed50216e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java index cd43d6faa0..a3d542ce44 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.tck.PreparedQueryTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java index 40be0be2a0..63d484b143 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java index 2b0103fb1f..486e347735 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 2f26004848..6cadfacd34 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java index 623a17755b..4c7f3d14a8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java index f9241aa1db..b3eae566f4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java index 7c6be23a8c..7368987ce4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; From 3157dabce41e98839727caa942545837856ba309 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:16:45 +0300 Subject: [PATCH 080/176] replaced confusing 'native' to 'binary' in tests and package-info Signed-off-by: vladimir --- .../ClickhouseBinaryConnectOptionsConverter.java | 6 +++--- .../src/main/java/examples/SqlClientExamples.java | 2 +- .../binary/ClickhouseBinaryConnectOptions.java | 4 ++-- .../binary/ClickhouseBinaryConnection.java | 4 ++-- .../binary/ClickhouseBinaryPool.java | 4 ++-- .../binary/ClickhouseConstants.java | 2 +- .../binary/impl/BaseBlock.java | 6 +++--- .../binary/impl/BlockInfo.java | 6 +++--- .../impl/ClickhouseBinaryConnectionFactory.java | 6 +++--- .../impl/ClickhouseBinaryConnectionImpl.java | 6 +++--- .../impl/ClickhouseBinaryConnectionUriParser.java | 2 +- .../impl/ClickhouseBinaryDatabaseMetadata.java | 2 +- .../binary/impl/ClickhouseBinaryPoolImpl.java | 6 +++--- .../binary/impl/ClickhouseBinaryRowDesc.java | 2 +- .../binary/impl/ClickhouseBinaryRowImpl.java | 4 ++-- .../impl/ClickhouseBinarySocketConnection.java | 4 ++-- .../binary/impl/ClickhouseServerException.java | 2 +- .../binary/impl/ColumnOrientedBlock.java | 6 +++--- .../binary/impl/RowOrientedBlock.java | 12 ++++++------ .../binary/impl/codec/BlockStreamProfileInfo.java | 2 +- .../impl/codec/BlockStreamProfileInfoReader.java | 2 +- .../binary/impl/codec/ByteBufUtils.java | 2 +- .../binary/impl/codec/ClickhouseBinaryCodec.java | 4 ++-- .../codec/ClickhouseBinaryColumnDescriptor.java | 2 +- .../impl/codec/ClickhouseBinaryCommandCodec.java | 2 +- .../binary/impl/codec/ClickhouseBinaryDecoder.java | 4 ++-- .../binary/impl/codec/ClickhouseBinaryEncoder.java | 4 ++-- .../impl/codec/ClickhouseBinaryParamDesc.java | 2 +- .../codec/ClickhouseBinaryPreparedStatement.java | 4 ++-- .../ClickhouseBinaryQueryCommandBaseCodec.java | 2 +- .../impl/codec/ClickhouseExceptionReader.java | 4 ++-- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../impl/codec/ClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/ClientInfo.java | 6 +++--- .../binary/impl/codec/ClientPacketTypes.java | 2 +- .../impl/codec/CloseConnectionCommandCodec.java | 2 +- .../binary/impl/codec/CloseCursorCommandCodec.java | 4 ++-- .../impl/codec/CloseStatementCommandCodec.java | 4 ++-- .../impl/codec/ColumnOrientedBlockReader.java | 14 +++++++------- .../binary/impl/codec/Compression.java | 2 +- .../binary/impl/codec/DatabaseMetadataReader.java | 6 +++--- .../impl/codec/ExtendedQueryCommandCodec.java | 12 ++++++------ .../binary/impl/codec/InitCommandCodec.java | 8 ++++---- .../impl/codec/Lz4ClickhouseStreamDataSink.java | 4 ++-- .../impl/codec/Lz4ClickhouseStreamDataSource.java | 4 ++-- .../impl/codec/MultistringMessageReader.java | 2 +- .../binary/impl/codec/PacketForge.java | 12 ++++++------ .../binary/impl/codec/PacketReader.java | 12 ++++++------ .../binary/impl/codec/PrepareStatementCodec.java | 4 ++-- .../binary/impl/codec/QueryInfo.java | 2 +- .../binary/impl/codec/QueryParsers.java | 2 +- .../binary/impl/codec/QueryProcessingStage.java | 2 +- .../binary/impl/codec/QueryProgressInfo.java | 2 +- .../binary/impl/codec/QueryProgressInfoReader.java | 6 +++--- .../impl/codec/RawClickhouseStreamDataSink.java | 2 +- .../impl/codec/RawClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/RowResultDecoder.java | 10 +++++----- .../binary/impl/codec/ServerPacketType.java | 2 +- .../binary/impl/codec/SimpleQueryCommandCodec.java | 8 ++++---- .../binary/impl/codec/TableColumns.java | 4 ++-- .../binary/impl/codec/columns/ArrayColumn.java | 6 +++--- .../impl/codec/columns/ArrayColumnReader.java | 8 ++++---- .../impl/codec/columns/ArrayColumnWriter.java | 8 ++++---- .../impl/codec/columns/ArrayIntPairIterator.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 4 ++-- .../impl/codec/columns/ClickhouseColumnReader.java | 6 +++--- .../impl/codec/columns/ClickhouseColumnWriter.java | 6 +++--- .../impl/codec/columns/ClickhouseColumns.java | 10 +++++----- .../binary/impl/codec/columns/ColumnUtils.java | 4 ++-- .../binary/impl/codec/columns/DateColumn.java | 4 ++-- .../impl/codec/columns/DateColumnReader.java | 4 ++-- .../impl/codec/columns/DateColumnWriter.java | 6 +++--- .../impl/codec/columns/DateTime64Column.java | 4 ++-- .../impl/codec/columns/DateTime64ColumnReader.java | 6 +++--- .../impl/codec/columns/DateTime64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/DateTimeColumn.java | 4 ++-- .../impl/codec/columns/DateTimeColumnReader.java | 6 +++--- .../impl/codec/columns/DateTimeColumnWriter.java | 6 +++--- .../impl/codec/columns/Decimal128Column.java | 4 ++-- .../impl/codec/columns/Decimal256Column.java | 4 ++-- .../binary/impl/codec/columns/Decimal32Column.java | 4 ++-- .../impl/codec/columns/Decimal32ColumnReader.java | 6 +++--- .../impl/codec/columns/Decimal32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Decimal64Column.java | 4 ++-- .../impl/codec/columns/Decimal64ColumnReader.java | 6 +++--- .../impl/codec/columns/Decimal64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Enum16Column.java | 4 ++-- .../impl/codec/columns/Enum16ColumnReader.java | 4 ++-- .../impl/codec/columns/Enum16ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Enum8Column.java | 4 ++-- .../impl/codec/columns/Enum8ColumnReader.java | 4 ++-- .../impl/codec/columns/Enum8ColumnWriter.java | 6 +++--- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../impl/codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 6 +++--- .../codec/columns/FixedStringColumnReader.java | 8 ++++---- .../codec/columns/FixedStringColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Float32Column.java | 4 ++-- .../impl/codec/columns/Float32ColumnReader.java | 6 +++--- .../impl/codec/columns/Float32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Float64Column.java | 4 ++-- .../impl/codec/columns/Float64ColumnReader.java | 6 +++--- .../impl/codec/columns/Float64ColumnWriter.java | 6 +++--- .../codec/columns/GenericDecimalColumnReader.java | 6 +++--- .../codec/columns/GenericDecimalColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IPv4Column.java | 4 ++-- .../impl/codec/columns/IPv4ColumnReader.java | 4 ++-- .../impl/codec/columns/IPv4ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IPv6Column.java | 6 +++--- .../impl/codec/columns/IPv6ColumnReader.java | 6 +++--- .../impl/codec/columns/IPv6ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Int128Column.java | 4 ++-- .../impl/codec/columns/Int128ColumnReader.java | 6 +++--- .../impl/codec/columns/Int128ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IntPairIterator.java | 2 +- .../binary/impl/codec/columns/IntervalColumn.java | 4 ++-- .../impl/codec/columns/IntervalColumnReader.java | 4 ++-- .../impl/codec/columns/ListPairedIterator.java | 2 +- .../impl/codec/columns/LowCardinalityColumn.java | 6 +++--- .../codec/columns/LowCardinalityColumnReader.java | 8 ++++---- .../codec/columns/LowCardinalityColumnWriter.java | 8 ++++---- .../binary/impl/codec/columns/PairedIterator.java | 2 +- .../binary/impl/codec/columns/StringCache.java | 2 +- .../binary/impl/codec/columns/StringColumn.java | 6 +++--- .../impl/codec/columns/StringColumnReader.java | 8 ++++---- .../impl/codec/columns/StringColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Triplet.java | 2 +- .../binary/impl/codec/columns/UInt16Column.java | 4 ++-- .../impl/codec/columns/UInt16ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt16ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt32Column.java | 4 ++-- .../impl/codec/columns/UInt32ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt64Column.java | 4 ++-- .../impl/codec/columns/UInt64ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt8Column.java | 4 ++-- .../impl/codec/columns/UInt8ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt8ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UUIDColumn.java | 4 ++-- .../impl/codec/columns/UUIDColumnReader.java | 6 +++--- .../impl/codec/columns/UUIDColumnWriter.java | 6 +++--- .../binary/package-info.java | 2 +- .../binary/spi/ClickhouseBinaryDriver.java | 6 +++--- .../services/io.vertx.sqlclient.spi.Driver | 2 +- .../binary}/ArraySerDesTest.java | 14 +++++++------- .../binary}/BasicClickhouseTest.java | 8 +++----- .../binary}/ClickhouseResource.java | 6 +++--- .../binary}/ExtendedClickhouseTest.java | 4 +--- .../binary}/NestedExceptionsTest.java | 8 ++++---- .../binary}/PacketReaderReplayTest.java | 7 +++---- .../binary}/PacketUtil.java | 2 +- .../binary}/Sleep.java | 2 +- .../binary}/SpecialTypesTest.java | 4 +--- .../binary}/alltypes/AllTypesBase.java | 10 +++++----- .../binary}/alltypes/BlobTest.java | 2 +- .../binary}/alltypes/DateTest.java | 4 ++-- .../binary}/alltypes/DateTime64Test.java | 4 ++-- .../binary}/alltypes/DateTimeTest.java | 4 ++-- .../binary}/alltypes/Decimal128Test.java | 4 ++-- .../binary}/alltypes/Decimal256Test.java | 4 ++-- .../binary}/alltypes/Decimal32Test.java | 4 ++-- .../binary}/alltypes/Decimal64Test.java | 4 ++-- .../binary}/alltypes/Enum16Test.java | 2 +- .../binary}/alltypes/Enum8Test.java | 2 +- .../binary}/alltypes/EnumTest.java | 2 +- .../binary}/alltypes/FixedStringTest.java | 2 +- .../binary}/alltypes/Float32Test.java | 2 +- .../binary}/alltypes/Float64Test.java | 2 +- .../binary}/alltypes/HugeDecimalTest.java | 2 +- .../binary}/alltypes/IPv4Test.java | 4 ++-- .../binary}/alltypes/IPv6Test.java | 4 ++-- .../binary}/alltypes/Int128Test.java | 4 ++-- .../binary}/alltypes/Int16Test.java | 2 +- .../binary}/alltypes/Int32Test.java | 2 +- .../binary}/alltypes/Int64Test.java | 2 +- .../binary}/alltypes/Int8Test.java | 2 +- .../alltypes/StringArrayDeduplicationTester.java | 6 +++--- .../binary}/alltypes/StringTest.java | 2 +- .../binary}/alltypes/TestEnum.java | 2 +- .../binary}/alltypes/UInt16Test.java | 2 +- .../binary}/alltypes/UInt32Test.java | 2 +- .../binary}/alltypes/UInt64Test.java | 2 +- .../binary}/alltypes/UInt8Test.java | 2 +- .../binary}/alltypes/UUIDTest.java | 2 +- .../codec/columns/ClickhouseColumnsTestReader.java | 4 ++-- .../binary}/tck/ClickhouseBinaryCollectorTest.java | 4 ++-- .../ClickhouseBinaryConnectionAutoRetryTest.java | 6 +++--- .../tck/ClickhouseBinaryConnectionTest.java | 8 ++++---- .../tck/ClickhouseBinaryDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeEncodeTest.java | 6 +++--- .../binary}/tck/ClickhouseBinaryDriverTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedBatchTest.java | 6 +++--- .../ClickhouseBinaryPreparedQueryCachedTest.java | 8 ++++---- .../ClickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTestBase.java | 4 ++-- .../tck/ClickhouseBinarySimpleQueryPooledTest.java | 6 +++--- .../tck/ClickhouseBinarySimpleQueryTest.java | 6 +++--- .../ClickhouseBinaryTextDataTypeDecodeTest.java | 4 ++-- .../binary}/tck/ClickhouseBinaryTracingTest.java | 6 +++--- .../tck/ClickhouseBinaryTransactionTest.java | 4 ++-- .../binary}/tck/ClientConfig.java | 8 ++++---- 205 files changed, 468 insertions(+), 475 deletions(-) rename vertx-clickhouse-binary-client/src/main/generated/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnectOptionsConverter.java (74%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnectOptions.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnection.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryPool.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseConstants.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/BaseBlock.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/BlockInfo.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionFactory.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionImpl.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionUriParser.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryDatabaseMetadata.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryPoolImpl.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryRowDesc.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryRowImpl.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinarySocketConnection.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseServerException.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ColumnOrientedBlock.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/RowOrientedBlock.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/BlockStreamProfileInfo.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/BlockStreamProfileInfoReader.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ByteBufUtils.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryCodec.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java (99%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryCommandCodec.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryDecoder.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryEncoder.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryParamDesc.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryPreparedStatement.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseExceptionReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseStreamDataSink.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseStreamDataSource.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClientInfo.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClientPacketTypes.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseConnectionCommandCodec.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseCursorCommandCodec.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseStatementCommandCodec.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ColumnOrientedBlockReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Compression.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/DatabaseMetadataReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ExtendedQueryCommandCodec.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/InitCommandCodec.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Lz4ClickhouseStreamDataSink.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Lz4ClickhouseStreamDataSource.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/MultistringMessageReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PacketForge.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PacketReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PrepareStatementCodec.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryInfo.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryParsers.java (99%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProcessingStage.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProgressInfo.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProgressInfoReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RawClickhouseStreamDataSink.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RawClickhouseStreamDataSource.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RowResultDecoder.java (81%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ServerPacketType.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/SimpleQueryCommandCodec.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/TableColumns.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumn.java (83%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumnReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumnWriter.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayIntPairIterator.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnReader.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnWriter.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumns.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ColumnUtils.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumn.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumnWriter.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64ColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64ColumnWriter.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumn.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumnWriter.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal128Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal256Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32ColumnWriter.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64ColumnWriter.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnDecoder.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnEncoder.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumResolutionMethod.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumnWriter.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32ColumnReader.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64ColumnReader.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/GenericDecimalColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/GenericDecimalColumnWriter.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4ColumnReader.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6ColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntPairIterator.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntervalColumn.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntervalColumnReader.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ListPairedIterator.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumn.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumnReader.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumnWriter.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/PairedIterator.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringCache.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumnWriter.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Triplet.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16Column.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8Column.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumn.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumnReader.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumnWriter.java (81%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/package-info.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/spi/ClickhouseBinaryDriver.java (88%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ArraySerDesTest.java (88%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/BasicClickhouseTest.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ClickhouseResource.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ExtendedClickhouseTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/NestedExceptionsTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/PacketReaderReplayTest.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/PacketUtil.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/Sleep.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/SpecialTypesTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/AllTypesBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/BlobTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTime64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTimeTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal128Test.java (85%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal256Test.java (85%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Enum16Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Enum8Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/EnumTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/FixedStringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Float32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Float64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/HugeDecimalTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/IPv4Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/IPv6Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int128Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/StringArrayDeduplicationTester.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/StringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/TestEnum.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UUIDTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnsTestReader.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryCollectorTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryConnectionAutoRetryTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryConnectionTest.java (87%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDataTypeEncodeTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDriverTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedBatchTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryCachedTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryPooledTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryTestBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinarySimpleQueryPooledTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinarySimpleQueryTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTracingTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTransactionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClientConfig.java (89%) diff --git a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java similarity index 74% rename from vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java rename to vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java index 2e95b6fe11..19713b0555 100644 --- a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java +++ b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonArray; @@ -7,8 +7,8 @@ import java.time.format.DateTimeFormatter; /** - * Converter and mapper for {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions}. - * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. + * Converter and mapper for {@link io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. */ public class ClickhouseBinaryConnectOptionsConverter { diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index d04097aeb9..d8d974dbdc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -13,7 +13,7 @@ package examples; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Vertx; import io.vertx.core.tracing.TracingPolicy; import io.vertx.docgen.Source; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java index b9f39e5dd9..933785622d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionUriParser; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java index 7bae45479e..2286fb7212 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java index 9faecb2cce..3a88270b24 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryPoolImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java index 79bae6273a..6b6f9e9c4f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java index 96e9d59f93..d2b1f1ac15 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java index d4f8726a84..01e7a2bd10 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java index 743397ce31..793cfd830d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java index b1fedcee47..a3d6babf3e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java index e9c9f057c3..6bab120db6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java index d4876c2798..54742b2577 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java index 2ce15a2fd0..a3b04f4298 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.VertxInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java index dce90eb334..389274f9fb 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java index a5ccd677b0..5242dfb804 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java index 17bec4badb..6d51e9830d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryCodec; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java index 1ca2e5e663..6668bd0680 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; public class ClickhouseServerException extends RuntimeException { private final int code; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java index aba4768701..2bf023f7c2 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import java.util.ArrayList; import java.util.Collection; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java index 2661eb6157..e4790ec37f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java index 08f197774e..f5e3d8e177 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class BlockStreamProfileInfo { private final int rows; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java index 7a72282b4e..88f13158f7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java index e60ba5ddf4..6cab2cedbf 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java index dfdcb077a7..63cfcfeda8 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java similarity index 99% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index cce4542c24..1d52912d6b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java index 1216082603..0341c7723f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index 29db476266..b99b88b0e1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index 805f7f8b47..a2816cb9a5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java index 5fe13ea7d9..cfc3903fd9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java index aad4ed18c0..cf00015657 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.impl.ParamDesc; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java index d1432047fb..76a6de4efc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java index a1872467a4..c759549524 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java index ca77bb7ac4..17fe21f11f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public interface ClickhouseStreamDataSink { void writeULeb128(int value); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java index 2ee1387744..68740315b4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java index bfc5d11aee..62b06cddd5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java index a8486e3fe8..e10aae2259 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class ClientPacketTypes { public static final int HELLO = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java index a42476b556..e3aae1203a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java index d662c6efee..63713edd44 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java index b460a7dc12..4812f375fe 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseStatementCommand; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java index e44bcffec1..183851389d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; -import io.vertx.clickhouse.clickhouse.binary.impl.BlockInfo; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.BlockInfo; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java index 0d701a5e07..6260df9d07 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class Compression { public static final int DISABLED = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java index 44f9fad5cf..24cf8930a4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java index 1162b8561f..625175cb5c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index bfb76cbeae..0648104bc7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java index d80afe549f..1b30a9514f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Compressor; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java index 87fadef2d4..46737eb285 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java index 8e244584cd..9ffff81b2d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java index 178d10c85e..e9629d0c7d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java index 1d41a09c66..46809c43e9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java index 8b81df304c..c81adc9861 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java index 64c690501e..66f81d953a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java similarity index 99% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java index dc13492ee2..ba7da9ff97 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java index 6d1a94c50a..7f599aa375 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class QueryProcessingStage { public static final int FETCH_COLUMNS = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java index a7e43611a4..bf4c0fb570 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class QueryProgressInfo { private final int rows; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java index 7532e65d00..af035986d1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; public class QueryProgressInfoReader { private final int serverRevision; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java index 0acec8c0ca..2a42ab5703 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java index 2459890995..d5c48a9b37 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java similarity index 81% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java index 6b9fa7148a..0ace9003a8 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java index 67ebe88a02..21cd7c23a1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java index bbbfdca1d9..924460383d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java index eff3093b7c..d4a368919f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java similarity index 83% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java index 51cb75aaa1..f8a0f69444 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java index 6fc93b14e8..83489b2e06 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java index e568480bd0..5d70e93696 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java index a90f68fe5f..4baa75622d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public class ArrayIntPairIterator implements IntPairIterator { private final int[] src; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java index 85b98dbf31..bc9402c2b5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java index 8a1e304189..52be5e83df 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; public abstract class ClickhouseColumnReader { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java index d9dc6ca42b..2408d8c269 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java index 05916ef8b0..bb904e0347 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java index d3ff7d1940..67d575e793 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java index 983cf20b3f..0339a202d0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java index c247a8ef75..3a56b4219b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.LocalDate; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java index 3e2303a9d2..ae8217d54f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.LocalDate; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java index 4b629a23c0..91976da596 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java index f5b487b6b5..36736deb2e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java index 5c10c25bcf..339548c36f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java index cdae818fbf..a941791752 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java index 268a7336f8..8521c5b0a6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; import java.time.OffsetDateTime; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java index 352b3be14a..f315db02e3 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java index 99d42c4951..108f8a4c7c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java index 75df301530..fa5886efb0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java index 754393375e..8d87167c62 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java index 2d47c1f478..20d805e615 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java index 130f97c16d..c17dc2d29e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java index f95e841235..3d9e54cb3a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java index 54d2a22fdd..7c346b4c3e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java index 4de35beaf0..dcd317708e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java index 6ce63d5b02..41e4a33c6e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java index 052c382774..8c8ae5762e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java index f1d25ad459..89e8025845 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java index e281a7099d..b5344b0b9a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java index 1d53478694..13c21f766b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java index 6e0eff6911..ea518220e9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java index 246c4ae248..686e680c46 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java index 1c21f46c64..ab5fc33028 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java index a68100cab4..e324651d0d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public interface EnumColumnReader { Object[] recodeValues(Object[] src, Class desired); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java index eff99571d4..2c97d2a271 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.Arrays; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java index 2054b13de8..624ea84079 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java index 7c766bfbb6..13018f368c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java index 99da8811b0..a6b2f3d0bb 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java index 63b02d4b97..d07a9e3caf 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java index 49a263a243..f6cc6f4d98 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class Float32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java index 9df1cde405..b74a82b539 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java index 5883af01d1..4f540dc7e6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java index df741363a8..e42264c94c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class Float64ColumnReader extends ClickhouseColumnReader { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java index db0a7c3067..a60bde6933 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java index 344c6b1320..8f28560f25 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java index 0ab90b8694..da07fc5560 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java index 6faa6f0a58..fef8da9724 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java index f328b51425..5e5e2c9cc3 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet4Address; import java.net.InetAddress; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java index cc9c96d919..f3744fb634 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java index bf4167b732..9aa5cb1731 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java index 67ac74a737..929eceecf7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet6Address; import java.net.InetAddress; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java index 7ce48bfc23..a76d37bd28 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java index db7717f4b2..f1c0051be4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java index 6dba11b4ec..8842d339e1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java index d766becf0a..b5306e1f9c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java index 9f5e7ba760..c75d0ba0d5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public interface IntPairIterator { IntPairIterator EMPTY = new IntPairIterator() { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java index 8dd972e2b8..ab174a4d7f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Duration; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java index 5d01f8e650..ac745f2bd0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.Duration; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java index d05d97457e..0144eabb39 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.AbstractMap; import java.util.Iterator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java index e7d95619df..e6283b125a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java index 2df335c4e3..6039fbd2b6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java index 37f1db4840..2e1e8b86ad 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.*; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java index cc032e5386..ada29f101b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java index e292f20ad6..481e9b0567 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.lang.ref.SoftReference; import java.util.function.Supplier; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java index a280e7cc40..5d8ff74d95 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java index 60caebba4f..d9f9c36fb1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java index a04be22888..f0b179b695 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java index a31517e4d7..a38664649b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public class Triplet { private final L left; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java index 950ef17396..6d17ed2b88 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java index 2b552cff58..9ece8f3574 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt16ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 2; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java index d82b82acf0..33522d87fe 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java index 41064396b3..0815f8323d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java index 1add1ebcad..3fe9a064c1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java index 1e0eec91d6..3e1e785530 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java index 57480fdb30..132f283f60 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java index 78a9115a08..04123f8400 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java index 828e5eb67c..1092b57dce 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java index 2204d167e3..3688b2c195 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java index f22055ecdc..6caef1943f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java index 0903f2fe97..d9b45f9b9c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java index 469d90c122..d1a1ba9705 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java index c666f622f7..ee4615f8d5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.UUID; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java similarity index 81% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java index a43d218c5e..6e8cef3077 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java index 3ef668416c..af8cf1930a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java @@ -12,6 +12,6 @@ */ @ModuleGen(name = "vertx-clickhousebinary-client", groupPackage = "io.vertx") -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java index 401f1a7095..17be970381 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.spi; +package io.vertx.clickhouseclient.binary.spi; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver index 29ad5b1ceb..cabf3f74eb 100644 --- a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -1 +1 @@ -io.vertx.clickhouse.clickhouse.binary.spi.ClickhouseBinaryDriver +io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java similarity index 88% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java index 18cde58df4..b64684d74d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.buffer.UnpooledByteBufAllocator; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.*; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.*; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java index 54bbe3b837..1e7906da38 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java @@ -11,12 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java index d87115aef1..ddacf9f601 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import org.junit.rules.ExternalResource; import org.testcontainers.containers.ClickHouseContainer; import org.testcontainers.utility.DockerImageName; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java index 06a6ed82ed..23b8f18c7a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java @@ -11,10 +11,8 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java index 6a882dd478..6eb82fda19 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java index 907652f71d..ea00264f27 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; @@ -19,9 +19,8 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.PacketReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java index da45f55aac..139ae14417 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java index b9475eea86..3c3b4cac6e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; public class Sleep { //updates may be async even for non-replicated tables; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java index 5ebe88a09d..704f24dced 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java @@ -11,10 +11,8 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java index 9586dbf898..1374a50743 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java index fd9370dc64..b72fde37f8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java index 0ce83aed5e..7a1b868fa0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java index cdb07a3396..9a3b6834f5 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java index 74c872adac..33c9dd37ee 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java similarity index 85% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java index de4939436f..91d6c125d0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java similarity index 85% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java index d7952f7c85..1d40bb71cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java index 585a55849c..abf16a724d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java index d11311a486..5dc3969d26 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java index 5a3d5347fd..d37ad13266 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java index 52ea8288d4..4bff0e1cdc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java index f32c404139..3cad322644 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java index 5ddae4fbb6..694281be92 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java index 24e8889eb8..9c00780877 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java index 09c4f2823c..f811c1fd11 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java index 5f247afe8a..31b6ff89a2 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java index b069c9f6be..5b10135c65 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java index 1e5f66c5c2..e3e69dad6d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java index 425b7f3ad6..d387c6efb1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java index f294302b0e..d6df64d952 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java index c27f00ea38..347b938dc8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java index e0d945dd40..640aecd1cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java index b5955ae48e..f6ffe91e37 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java index 9c876125cb..ae98086f1c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java index 77aa9ff526..a8bb4aa846 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java index 7bf109f73c..740f43a443 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; enum TestEnum { v0, v1, v2, v3, v4, v5, v6 diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java index 002d375a94..9db5606a8b 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java index faef27decd..be3d2f88c5 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java index c0e98619dc..1a8e1721cf 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java index 47d7b47bdc..8df66036c8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java index 20c3d2a13f..32a51f36e3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java index c9bcad9c15..befe3ba4fd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; +import io.vertx.clickhouseclient.binary.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java index c495cc2d83..b8415707a4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.CollectorTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 2d74957077..0bd44349e1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java similarity index 87% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java index bd937d3567..c18d17dac1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java index 42664f48f1..aa4993bac6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java index 6a920940a8..fa5d07e1bc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java index 0a3b3a619a..f1042a6cc3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.DriverTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java index 6533c220e3..214cf3e5f7 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java index 91d4d472bb..e8ac554e5f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java index 01ebd21e40..d8303129f0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java index c2ed50216e..850222b7a6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java index a3d542ce44..385aac667a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.tck.PreparedQueryTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java index 63d484b143..56ea6520c4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java index 486e347735..e24a6dd122 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 6cadfacd34..344fbf6d4e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java index 4c7f3d14a8..f4494e1b25 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java index b3eae566f4..980081150a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java index 7368987ce4..7d19167a03 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; From 59be4d2ed25382a857ed88df6b28650890947662 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:35:18 +0300 Subject: [PATCH 081/176] replaced confusing 'native' to 'binary' in pom description Signed-off-by: vladimir --- vertx-clickhouse-binary-client/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 96ed3a092d..617362ba22 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -27,7 +27,7 @@ vertx-clickhouse-binary-client - Vertx Clickhouse native Client + Vertx Clickhouse native(binary) Client https://github.com/eclipse-vertx/vertx-sql-client The Reactive Clickhouse Client From ffe427e84ab39daed300bf052d48cca54b9a6966 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:36:48 +0300 Subject: [PATCH 082/176] replaced confusing 'native' to 'binary' in pom description Signed-off-by: vladimir --- vertx-clickhouse-binary-client/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 617362ba22..060f2046db 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -27,7 +27,7 @@ vertx-clickhouse-binary-client - Vertx Clickhouse native(binary) Client + Vertx Clickhouse binary Client https://github.com/eclipse-vertx/vertx-sql-client The Reactive Clickhouse Client From 7a6f899fca39ef38ad7064a2c470e65bf3897ce4 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Feb 2021 20:09:51 +0300 Subject: [PATCH 083/176] Added clickhouse InitCommand handler Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 0 .../clickhousenative/ClickhouseConstants.java | 7 ++ .../ClickhouseNativeConnectOptions.java | 32 ++++++++++ ...ickhouseNativeConnectOptionsConverter.java | 15 +++++ .../ClickhouseNativeConnection.java | 24 +++++++ .../ClickhouseNativePool.java | 26 ++++++++ .../ClickhouseNativeConnectionFactory.java | 59 +++++++++++++++++ .../impl/ClickhouseNativeConnectionImpl.java | 40 ++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 37 +++++++++++ .../impl/ClickhouseNativePoolImpl.java | 48 ++++++++++++++ .../ClickhouseNativeSocketConnection.java | 50 +++++++++++++++ .../impl/ClickhouseServerException.java | 2 + .../impl/codec/ByteBufUtils.java | 24 +++++++ .../impl/codec/ClickhouseNativeCodec.java | 17 +++++ .../codec/ClickhouseNativeCommandCodec.java | 31 +++++++++ .../impl/codec/ClickhouseNativeDecoder.java | 28 ++++++++ .../impl/codec/ClickhouseNativeEncoder.java | 64 +++++++++++++++++++ ...ClickhouseNativeQueryCommandBaseCodec.java | 2 + .../impl/codec/ClientPacketTypes.java | 5 ++ .../impl/codec/InitCommandCodec.java | 42 ++++++++++++ .../impl/codec/ServerPacketTypes.java | 2 + .../impl/codec/SimpleQueryCodec.java | 2 + .../spi/ClickhouseNativeDriver.java | 34 ++++++++++ .../src/main/resources/META-INF/MANIFEST.MF | 2 + .../services/io.vertx.sqlclient.spi.Driver | 1 + 25 files changed, 594 insertions(+) create mode 100644 vertx-clickhouse-native-client/pom.xml create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java create mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF create mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java new file mode 100644 index 0000000000..d313a788d5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -0,0 +1,7 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Defines { + public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; + public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; + public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java new file mode 100644 index 0000000000..85ced66106 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.codegen.annotations.DataObject; +import io.vertx.core.json.JsonObject; +import io.vertx.sqlclient.SqlConnectOptions; + +@DataObject(generateConverter = true) +public class ClickhouseNativeConnectOptions extends SqlConnectOptions { + public static final int DEFAULT_PIPELINING_LIMIT = 256; + + private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; + + public ClickhouseNativeConnectOptions(JsonObject json) { + super(json); + ClickhouseNativeConnectOptionsConverter.fromJson(json, this); + } + + public ClickhouseNativeConnectOptions(SqlConnectOptions other) { + super(other); + if (other instanceof ClickhouseNativeConnectOptions) { + ClickhouseNativeConnectOptions opts = (ClickhouseNativeConnectOptions) other; + } + } + + public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { + super(other); + } + + public int getPipeliningLimit() { + return pipeliningLimit; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java new file mode 100644 index 0000000000..627956809f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -0,0 +1,15 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.core.json.JsonObject; + +public class ClickhouseNativeConnectOptionsConverter { + public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + } + + public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + toJson(obj, json.getMap()); + } + + public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java new file mode 100644 index 0000000000..e13f78f394 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.codegen.annotations.VertxGen; +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Vertx; +import io.vertx.core.impl.ContextInternal; +import io.vertx.sqlclient.SqlConnection; + +@VertxGen +public interface ClickhouseNativeConnection extends SqlConnection { + static void connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, Handler> handler) { + Future fut = connect(vertx, connectOptions); + if (handler != null) { + fut.onComplete(handler); + } + } + + static Future connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions) { + return ClickhouseNativeConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java new file mode 100644 index 0000000000..c9829f7293 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clikhousenative; + +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.codegen.annotations.VertxGen; +import io.vertx.core.Vertx; +import io.vertx.core.VertxOptions; +import io.vertx.core.impl.VertxInternal; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; + +@VertxGen +public interface ClickhouseNativePool extends Pool { + static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + if (Vertx.currentContext() != null) { + throw new IllegalStateException("Running in a Vertx context => use PgPool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); + } + VertxOptions vertxOptions = new VertxOptions(); + VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); + return ClickhouseNativePoolImpl.create(vertx.getOrCreateContext(), true, connectOptions, poolOptions); + } + + + static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + return ClickhouseNativePoolImpl.create(((VertxInternal)vertx).getOrCreateContext(), false, connectOptions, poolOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java new file mode 100644 index 0000000000..2facd19cbb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -0,0 +1,59 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.core.Future; +import io.vertx.core.Promise; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.net.NetClientOptions; +import io.vertx.core.net.NetSocket; +import io.vertx.core.net.impl.NetSocketInternal; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; + +public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private int pipeliningLimit; + + ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { + super(context, options); + } + + @Override + protected void initializeConfiguration(SqlConnectOptions connectOptions) { + ClickhouseNativeConnectOptions options = (ClickhouseNativeConnectOptions) connectOptions; + this.pipeliningLimit = options.getPipeliningLimit(); + } + + @Override + protected void configureNetClientOptions(NetClientOptions netClientOptions) { + netClientOptions.setSsl(false); + } + + @Override + protected void doConnectInternal(Promise promise) { + doConnect().flatMap(conn -> { + ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; + socket.init(); + return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) + .map(conn); + }).onComplete(promise); + } + + private Future doConnect() { + Future soFut; + try { + soFut = netClient.connect(socketAddress, (String) null); + } catch (Exception e) { + // Client is closed + return context.failedFuture(e); + } + Future connFut = soFut.map(so -> newSocketConnection((NetSocketInternal) so)); + return connFut; + } + + private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { + return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, + preparedStatementCacheSqlFilter, pipeliningLimit, context); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java new file mode 100644 index 0000000000..132dd8d053 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnection; +import io.vertx.core.Future; +import io.vertx.core.impl.ContextInternal; +import io.vertx.core.impl.future.PromiseInternal; +import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.QueryTracer; + +public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl implements ClickhouseNativeConnection { + private final ClickhouseNativeConnectionFactory factory; + + public static Future connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { + ClickhouseNativeConnectionFactory client; + try { + client = new ClickhouseNativeConnectionFactory(ConnectionFactory.asEventLoopContext(ctx), options); + } catch (Exception e) { + return ctx.failedFuture(e); + } + ctx.addCloseHook(client); + QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); + PromiseInternal promise = ctx.promise(); + client.connect(promise); + return promise.future().map(conn -> { + ClickhouseNativeConnectionImpl mySQLConnection = new ClickhouseNativeConnectionImpl(client, ctx, conn, tracer, null); + conn.init(mySQLConnection); + return mySQLConnection; + }); + } + + ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { + super(context, conn, tracer, metrics); + + this.factory = factory; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java new file mode 100644 index 0000000000..9bfad341f0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.sqlclient.spi.DatabaseMetadata; + +public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { + private final String productName; + private final String fullVersion; + private final String major; + private final String minor; + + public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, String major, String minor) { + this.productName = productName; + this.fullVersion = fullVersion; + this.major = major; + this.minor = minor; + } + + @Override + public String productName() { + return null; + } + + @Override + public String fullVersion() { + return null; + } + + @Override + public int majorVersion() { + return 0; + } + + @Override + public int minorVersion() { + return 0; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java new file mode 100644 index 0000000000..3c892b54c0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.core.impl.CloseFuture; +import io.vertx.core.impl.ContextInternal; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.core.spi.metrics.VertxMetrics; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.ConnectionFactory; +import io.vertx.sqlclient.impl.PoolBase; +import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.QueryTracer; + +public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { + public static ClickhouseNativePoolImpl create(ContextInternal context, boolean closeVertx, + ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); + VertxMetrics vertxMetrics = context.owner().metricsSPI(); + ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), + "sql", connectOptions.getMetricsName()) : null; + EventLoopContext eventLoopContext = ConnectionFactory.asEventLoopContext(context); + ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(eventLoopContext, + new ClickhouseNativeConnectionFactory(eventLoopContext, connectOptions), tracer, metrics, poolOptions); + CloseFuture closeFuture = pool.closeFuture(); + if (closeVertx) { + closeFuture.onComplete(ar -> context.owner().close()); + } else { + context.addCloseHook(closeFuture); + } + return pool; + } + + private final ClickhouseNativeConnectionFactory factory; + + private ClickhouseNativePoolImpl(EventLoopContext context, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + ClientMetrics metrics, PoolOptions poolOptions) { + super(context, factory, tracer, metrics, poolOptions); + this.factory = factory; + } + + @Override + protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { + return new ClickhouseNativeConnectionImpl(factory, context, conn, tracer, metrics); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java new file mode 100644 index 0000000000..aabc88bf52 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clikhousenative.impl; + +import io.netty.channel.ChannelPipeline; +import io.vertx.clickhouse.clikhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.core.Promise; +import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.net.impl.NetSocketInternal; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.SocketConnectionBase; +import io.vertx.sqlclient.impl.command.InitCommand; +import io.vertx.sqlclient.spi.DatabaseMetadata; + +import java.util.Map; +import java.util.function.Predicate; + +public class ClickhouseNativeSocketConnection extends SocketConnectionBase { + private ClickhouseNativeCodec codec; + private ClickhouseNativeDatabaseMetadata md; + + public ClickhouseNativeSocketConnection(NetSocketInternal socket, + boolean cachePreparedStatements, + int preparedStatementCacheSize, + Predicate preparedStatementCacheSqlFilter, + int pipeliningLimit, + EventLoopContext context) { + super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + } + + @Override + public void init() { + codec = new ClickhouseNativeCodec(this); + ChannelPipeline pipeline = socket.channelHandlerContext().pipeline(); + pipeline.addBefore("handler", "codec", codec); + super.init(); + } + + void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { + InitCommand cmd = new InitCommand(this, username, password, database, properties); + schedule(cmd, completionHandler); + } + + public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + } + + @Override + public DatabaseMetadata getDatabaseMetaData() { + return md; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java new file mode 100644 index 0000000000..1a7d402763 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl;public class ClickhouseServerException { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java new file mode 100644 index 0000000000..953d21a006 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +import java.nio.charset.StandardCharsets; + +public class ByteBufUtils { + public static void writeULeb128(int value, ByteBuf buf) { + assert (value >= 0); + int remaining = value >>> 7; + while (remaining != 0) { + buf.writeByte((byte) ((value & 0x7f) | 0x80)); + value = remaining; + remaining >>>= 7; + } + buf.writeByte((byte) (value & 0x7f)); + } + + public static void writeCString(String str, ByteBuf buf) { + byte[] b = str.getBytes(StandardCharsets.UTF_8); + writeULeb128(b.length, buf); + buf.writeBytes(b); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java new file mode 100644 index 0000000000..4c2ec05165 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -0,0 +1,17 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.channel.CombinedChannelDuplexHandler; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; + +import java.util.ArrayDeque; + +public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { + private ArrayDeque> inflight; + + public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { + inflight = new ArrayDeque<>(); + ClickhouseNativeEncoder encoder = new ClickhouseNativeEncoder(inflight, conn); + ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); + init(decoder, encoder); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java new file mode 100644 index 0000000000..d2a386e64e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.Handler; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.CommandResponse; + +abstract class ClickhouseNativeCommandCodec> { + protected ClickhouseNativeEncoder encoder; + protected Handler> completionHandler; + protected final C cmd; + + protected ClickhouseNativeCommandCodec(C cmd) { + this.cmd = cmd; + } + + void encode(ClickhouseNativeEncoder encoder) { + this.encoder = encoder; + } + + abstract void decode(ChannelHandlerContext ctx, ByteBuf in); + + ByteBuf allocateBuffer() { + return encoder.chctx().alloc().ioBuffer(); + } + + ByteBuf allocateBuffer(int capacity) { + return encoder.chctx().alloc().ioBuffer(capacity); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java new file mode 100644 index 0000000000..17ba46cfca --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.ArrayDeque; +import java.util.List; + +public class ClickhouseNativeDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeDecoder.class); + + private final ArrayDeque> inflight; + private final ClickhouseNativeSocketConnection conn; + public ClickhouseNativeDecoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + this.inflight = inflight; + this.conn = conn; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + ClickhouseNativeCommandCodec codec = inflight.peek(); + codec.decode(ctx, in); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java new file mode 100644 index 0000000000..45690fc1cf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.InitCommand; + +import java.util.ArrayDeque; + +public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { + + private final ArrayDeque> inflight; + private final ClickhouseNativeSocketConnection conn; + + private ChannelHandlerContext chctx; + + public ClickhouseNativeEncoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + this.inflight = inflight; + this.conn = conn; + } + + ClickhouseNativeSocketConnection getConn() { + return conn; + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + chctx = ctx; + } + + ChannelHandlerContext chctx() { + return chctx; + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (msg instanceof CommandBase) { + CommandBase cmd = (CommandBase) msg; + write(cmd); + } else { + super.write(ctx, msg, promise); + } + } + + void write(CommandBase cmd) { + ClickhouseNativeCommandCodec codec = wrap(cmd); + codec.completionHandler = resp -> { + ClickhouseNativeCommandCodec c = inflight.poll(); + resp.cmd = (CommandBase) c.cmd; + chctx.fireChannelRead(resp); + }; + inflight.add(codec); + codec.encode(this); + } + + private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { + if (cmd instanceof InitCommand) { + return new InitCommandCodec((InitCommand) cmd); + } + throw new UnsupportedOperationException(cmd.getClass().getName()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java new file mode 100644 index 0000000000..870eeb9739 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class ClickhouseNativeQueryCommandBaseCodec { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java new file mode 100644 index 0000000000..2b1f82a74b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -0,0 +1,5 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class PacketTypes { + public static final int HELLO = 0; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java new file mode 100644 index 0000000000..6a6b9c9d78 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clikhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.command.CommandResponse; +import io.vertx.sqlclient.impl.command.InitCommand; + +public class InitCommandCodec extends ClickhouseNativeCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); + + InitCommandCodec(InitCommand cmd) { + super(cmd); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + + ByteBuf buf = allocateBuffer(); + ByteBufUtils.writeULeb128(PacketTypes.HELLO, buf); + ByteBufUtils.writeCString("ClickHouse " + "test", buf); + ByteBufUtils.writeULeb128(20, buf); + ByteBufUtils.writeULeb128(10, buf); + ByteBufUtils.writeULeb128(54441, buf); + ByteBufUtils.writeCString("default", buf); + ByteBufUtils.writeCString("default", buf); + ByteBufUtils.writeCString("clickhouse4man", buf); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + LOG.info("sent hello packet"); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + encoder.getConn().setDatabaseMetadata(new ClickhouseNativeDatabaseMetadata("", "", "", "")); + LOG.info("decode"); + completionHandler.handle(CommandResponse.success(null)); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java new file mode 100644 index 0000000000..2283eca640 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class ServerPacketTypes { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java new file mode 100644 index 0000000000..8636774735 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec;public class SimpleQueryCodec { +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java new file mode 100644 index 0000000000..54f3fb44e9 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -0,0 +1,34 @@ +package io.vertx.clickhouse.clikhousenative.spi; + +import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.core.Vertx; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.spi.Driver; + +public class ClickhouseNativeDriver implements Driver { + @Override + public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) { + return ClickhouseNativePool.pool(wrap(options), poolOptions); + } + + @Override + public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolOptions) { + return ClickhouseNativePool.pool(vertx, wrap(options), poolOptions); + } + + @Override + public boolean acceptsOptions(SqlConnectOptions options) { + return options instanceof ClickhouseNativeConnectOptions || SqlConnectOptions.class.equals(options.getClass()); + } + + private static ClickhouseNativeConnectOptions wrap(SqlConnectOptions options) { + if (options instanceof ClickhouseNativeConnectOptions) { + return (ClickhouseNativeConnectOptions) options; + } else { + return new ClickhouseNativeConnectOptions(options); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..0b2347374d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Automatic-Module-Name: io.vertx.client.sql.pg + diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver new file mode 100644 index 0000000000..eaa7ce3272 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -0,0 +1 @@ +io.vertx.pgclient.spi.PgDriver \ No newline at end of file From f68bb39893f3a5385b7526e8efaf8da2e3308330 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Feb 2021 20:17:19 +0300 Subject: [PATCH 084/176] Fixed typo Signed-off-by: vladimir --- pom.xml | 1 + vertx-clickhouse-native-client/pom.xml | 170 ++++++++++++++++++ .../clickhousenative/ClickhouseConstants.java | 6 +- .../ClickhouseNativeConnectOptions.java | 2 +- ...ickhouseNativeConnectOptionsConverter.java | 2 +- .../ClickhouseNativeConnection.java | 4 +- .../ClickhouseNativePool.java | 6 +- .../ClickhouseNativeConnectionFactory.java | 4 +- .../impl/ClickhouseNativeConnectionImpl.java | 13 +- .../ClickhouseNativeDatabaseMetadata.java | 31 +++- .../impl/ClickhouseNativePoolImpl.java | 6 +- .../ClickhouseNativeSocketConnection.java | 4 +- .../impl/ClickhouseServerException.java | 33 +++- .../impl/codec/ByteBufUtils.java | 47 ++++- .../impl/codec/ClickhouseNativeCodec.java | 16 +- .../codec/ClickhouseNativeCommandCodec.java | 2 +- .../impl/codec/ClickhouseNativeDecoder.java | 4 +- .../impl/codec/ClickhouseNativeEncoder.java | 7 +- ...ClickhouseNativeQueryCommandBaseCodec.java | 9 +- .../impl/codec/ClientPacketTypes.java | 2 +- .../impl/codec/InitCommandCodec.java | 124 +++++++++++-- .../impl/codec/ServerPacketTypes.java | 7 +- .../impl/codec/SimpleQueryCodec.java | 15 +- .../spi/ClickhouseNativeDriver.java | 6 +- .../src/main/resources/META-INF/MANIFEST.MF | 2 +- .../services/io.vertx.sqlclient.spi.Driver | 2 +- 26 files changed, 472 insertions(+), 53 deletions(-) diff --git a/pom.xml b/pom.xml index c6e5f67e7b..0252df0300 100644 --- a/pom.xml +++ b/pom.xml @@ -117,6 +117,7 @@ vertx-mysql-client vertx-mssql-client vertx-db2-client + vertx-clickhouse-native-client vertx-sql-client-templates vertx-oracle-client diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index e69de29bb2..454487572a 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -0,0 +1,170 @@ + + + + + 4.0.0 + + + io.vertx + vertx-sql-client-parent + 4.0.3-SNAPSHOT + + + vertx-clickhouse-native-client + + Vertx Clickhouse native Client + https://github.com/eclipse-vertx/vertx-sql-client + The Reactive Clickhouse Client + + + false + ${project.basedir}/src/main/docs + ${project.basedir}/src/main/generated + + + + + + + + + io.vertx + vertx-core + + + io.vertx + vertx-codegen + true + + + io.vertx + vertx-docgen + true + + + io.vertx + vertx-sql-client + + + + io.vertx + vertx-sql-client + test-jar + test + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + test + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + test + + + + + + + + + maven-surefire-plugin + + -Xmx1024M + + ${project.build.directory} + ${embedded.postgres.version} + ${connection.uri} + ${tls.connection.uri} + ${unix.socket.directory} + ${unix.socket.port} + + + io/vertx/pgclient/it/** + + + + + + + + org.bsc.maven + maven-processor-plugin + + + generate-sources + + + ${project.basedir}/../vertx-sql-client/src/main/asciidoc/*.adoc,${asciidoc.dir}/*.adoc + + + + + + + maven-assembly-plugin + + + + package-sources + + + ${project.basedir}/../assembly/sources.xml + + + none + + true + + + + + + maven-failsafe-plugin + 2.21.0 + + + env-test + + integration-test + + integration-test + + + io/vertx/pgclient/it/EnvTest.java + + + test_host + test_database + 1234 + test_user + test_password + require + + + + + + + + + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index d313a788d5..37bcec7c34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,7 +1,9 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative; -public class Defines { +public class ClickhouseConstants { public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; + + public static final String CLIENT_NAME = "CLIENT_NAME"; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 85ced66106..dacf708b77 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 627956809f..e085fa9144 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index e13f78f394..eee51f5f1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index c9829f7293..0583f93244 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative; +package io.vertx.clickhouse.clickhousenative; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; @@ -12,7 +12,7 @@ public interface ClickhouseNativePool extends Pool { static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { if (Vertx.currentContext() != null) { - throw new IllegalStateException("Running in a Vertx context => use PgPool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); + throw new IllegalStateException("Running in a Vertx context => use ClickhouseNativePool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 2facd19cbb..48f4135fc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,6 +1,6 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index 132dd8d053..e0e483b487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,11 +1,12 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionImpl; @@ -34,7 +35,11 @@ public static Future connect(ContextInternal ctx, Cl ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { super(context, conn, tracer, metrics); - this.factory = factory; } + + @Override + public Future begin() { + throw new UnsupportedOperationException(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 9bfad341f0..ea5bc55667 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,18 +1,27 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; - private final String major; - private final String minor; + private final int major; + private final int minor; + private final int revision; + private final int patchVersion; + private final String displayName; + private final String timezone; - public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, String major, String minor) { + public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, + int patchVersion, String displayName, String timezone) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; this.minor = minor; + this.revision = revision; + this.patchVersion = patchVersion; + this.displayName = displayName; + this.timezone = timezone; } @Override @@ -34,4 +43,18 @@ public int majorVersion() { public int minorVersion() { return 0; } + + @Override + public String toString() { + return "ClickhouseNativeDatabaseMetadata{" + + "productName='" + productName + '\'' + + ", fullVersion='" + fullVersion + '\'' + + ", major=" + major + + ", minor=" + minor + + ", revision=" + revision + + ", patchVersion=" + patchVersion + + ", displayName='" + displayName + '\'' + + ", timezone='" + timezone + '\'' + + '}'; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 3c892b54c0..2f43623e6b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index aabc88bf52..fb4aa31825 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.impl; +package io.vertx.clickhouse.clickhousenative.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clikhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 1a7d402763..0561b90795 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,2 +1,33 @@ -package io.vertx.clickhouse.clickhousenative.impl;public class ClickhouseServerException { +package io.vertx.clickhouse.clickhousenative.impl; + +public class ClickhouseServerException extends RuntimeException { + private final Integer code; + private final String name; + private final String message; + private final String stacktrace; + + public ClickhouseServerException(Integer code, String name, String message, String stacktrace) { + super(message); + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + @Override + public String getMessage() { + return message; + } + + public String getStacktrace() { + return stacktrace; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 953d21a006..e7d9fe0474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; @@ -16,7 +16,50 @@ public static void writeULeb128(int value, ByteBuf buf) { buf.writeByte((byte) (value & 0x7f)); } - public static void writeCString(String str, ByteBuf buf) { + public static Integer readULeb128(ByteBuf buf) { + int value = 0; + int read = 0; + int count = 0; + int readerIndex = buf.readerIndex(); + boolean notEnoughData = false; + do { + if (buf.readableBytes() >= 1) { + read = buf.readByte() & 0xff; + value |= (read & 0x7f) << (count * 7); + count++; + } else { + notEnoughData = true; + break; + } + } while (((read & 0x80) == 0x80) && count < 5); + + if (notEnoughData) { + buf.readerIndex(readerIndex); + return null; + } + if ((read & 0x80) == 0x80) { + buf.readerIndex(readerIndex); + throw new RuntimeException("invalid LEB128 sequence"); + } + return value; + } + + public static String readPascalString(ByteBuf buf) { + int readerIndex = buf.readerIndex(); + Integer length = readULeb128(buf); + if (length == null) { + return null; + } + if (buf.readableBytes() >= length) { + byte[] b = new byte[length]; + buf.readBytes(b); + return new String(b, StandardCharsets.UTF_8); + } + buf.readerIndex(readerIndex); + return null; + } + + public static void writePascalString(String str, ByteBuf buf) { byte[] b = str.getBytes(StandardCharsets.UTF_8); writeULeb128(b.length, buf); buf.writeBytes(b); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index 4c2ec05165..c594165bb0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,11 +1,16 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; +import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); + private ArrayDeque> inflight; public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { @@ -14,4 +19,11 @@ public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); init(decoder, encoder); } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + //TODO smagellan: maybe remove method + LOG.error("caught exception", cause); + super.exceptionCaught(ctx, cause); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index d2a386e64e..369ae7d18a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 17ba46cfca..fb1ea517fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,9 +1,9 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 45690fc1cf..37b4511547 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,11 +1,12 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.InitCommand; +import io.vertx.sqlclient.impl.command.SimpleQueryCommand; import java.util.ArrayDeque; @@ -58,6 +59,8 @@ void write(CommandBase cmd) { private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); + } else if (cmd instanceof SimpleQueryCommand) { + return new SimpleQueryCodec<>((SimpleQueryCommand) cmd); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 870eeb9739..8b4596e7e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,2 +1,9 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class ClickhouseNativeQueryCommandBaseCodec { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.impl.command.QueryCommandBase; + +abstract class ClickhouseNativeQueryCommandBaseCodec > extends ClickhouseNativeCommandCodec{ + protected ClickhouseNativeQueryCommandBaseCodec(C cmd) { + super(cmd); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 2b1f82a74b..00e2d8f3ff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,5 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -public class PacketTypes { +public class ClientPacketTypes { public static final int HELLO = 0; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6a6b9c9d78..fa241013d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,8 +1,10 @@ -package io.vertx.clickhouse.clikhousenative.impl.codec; +package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clikhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; @@ -12,6 +14,22 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); + //server-related info + private Integer packetType; + private String productName; + private Integer major; + private Integer minor; + private Integer revision; + private String timezone; + private String displayName; + private Integer patchVersion; + + //server-error related info + private Integer code; + private String name; + private String message; + private String stacktrace; + InitCommandCodec(InitCommand cmd) { super(cmd); } @@ -21,22 +39,108 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); ByteBuf buf = allocateBuffer(); - ByteBufUtils.writeULeb128(PacketTypes.HELLO, buf); - ByteBufUtils.writeCString("ClickHouse " + "test", buf); + ByteBufUtils.writeULeb128(ClientPacketTypes.HELLO, buf); + String clientId = "ClickHouse " + cmd.properties() + .getOrDefault(ClickhouseConstants.CLIENT_NAME, "vertx-sql"); + ByteBufUtils.writePascalString(clientId, buf); ByteBufUtils.writeULeb128(20, buf); ByteBufUtils.writeULeb128(10, buf); ByteBufUtils.writeULeb128(54441, buf); - ByteBufUtils.writeCString("default", buf); - ByteBufUtils.writeCString("default", buf); - ByteBufUtils.writeCString("clickhouse4man", buf); + ByteBufUtils.writePascalString(cmd.database(), buf); + ByteBufUtils.writePascalString(cmd.username(), buf); + ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); LOG.info("sent hello packet"); } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - encoder.getConn().setDatabaseMetadata(new ClickhouseNativeDatabaseMetadata("", "", "", "")); - LOG.info("decode"); - completionHandler.handle(CommandResponse.success(null)); + if (packetType == null) { + packetType = ByteBufUtils.readULeb128(in); + LOG.info("packet type: " + packetType); + if (packetType == null) { + return; + } + } + if (packetType == ServerPacketTypes.HELLO) { + productName = ByteBufUtils.readPascalString(in); + if (productName == null) { + return; + } + if (major == null) { + major = ByteBufUtils.readULeb128(in); + if (major == null) { + return; + } + } + if (minor == null) { + minor = ByteBufUtils.readULeb128(in); + if (minor == null) { + return; + } + } + if (revision == null) { + revision = ByteBufUtils.readULeb128(in); + if (revision == null) { + return; + } + } + if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + timezone = ByteBufUtils.readPascalString(in); + if (timezone == null) { + return; + } + } + if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { + displayName = ByteBufUtils.readPascalString(in); + if (displayName == null) { + return; + } + } + patchVersion = revision; + if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + patchVersion = ByteBufUtils.readULeb128(in); + if (patchVersion == null) { + return; + } + } + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, + String.format("%d.%d.%d", major, minor, revision), + major, minor, revision, patchVersion, displayName, timezone); + encoder.getConn().setDatabaseMetadata(md); + LOG.info("decode: " + md); + completionHandler.handle(CommandResponse.success(null)); + } else if (packetType == ServerPacketTypes.EXCEPTION) { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return; + } + } + if (name == null) { + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return; + } + } + if (message == null) { + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return; + } + } + if (stacktrace == null) { + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return; + } + } + completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); + } else { + String msg = "unknown packet type: " + packetType; + LOG.error(msg); + completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java index 2283eca640..116d2b523f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java @@ -1,2 +1,7 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class ServerPacketTypes { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class ServerPacketTypes { + public static final int HELLO = 0; + public static final int DATA = 1; + public static final int EXCEPTION = 2; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java index 8636774735..57f077082b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -1,2 +1,15 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec;public class SimpleQueryCodec { +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.sqlclient.impl.command.SimpleQueryCommand; + +public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + protected SimpleQueryCodec(SimpleQueryCommand cmd) { + super(cmd); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 54f3fb44e9..7390ea7f9e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,7 +1,7 @@ -package io.vertx.clickhouse.clikhousenative.spi; +package io.vertx.clickhouse.clickhousenative.spi; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clikhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF index 0b2347374d..40f000bfbe 100644 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF @@ -1,2 +1,2 @@ -Automatic-Module-Name: io.vertx.client.sql.pg +Automatic-Module-Name: io.vertx.client.sql.clickhouse.native diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver index eaa7ce3272..860bd992e9 100644 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -1 +1 @@ -io.vertx.pgclient.spi.PgDriver \ No newline at end of file +io.vertx.clickhouse.clickhousenative.spi.ClickhouseNativeDriver From 3e7c29cefd09d9f65c567cbc46aa7908d0f6bfbd Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Feb 2021 22:33:48 +0300 Subject: [PATCH 085/176] implemented SimpleQueryCodec Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 18 ++- .../clickhousenative/impl/BaseBlock.java | 40 ++++++ .../clickhousenative/impl/BlockInfo.java | 76 ++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 24 +++- .../impl/ClickhouseNativeRow.java | 67 ++++++++++ .../impl/ClickhouseNativeRowDesc.java | 16 +++ .../ClickhouseNativeSocketConnection.java | 2 +- .../impl/ColumnOrientedBlock.java | 31 +++++ .../clickhousenative/impl/Pair.java | 27 ++++ .../impl/RowOrientedBlock.java | 29 +++++ .../impl/codec/BlockStreamProfileInfo.java | 95 ++++++++++++++ .../ClickhouseNativeColumnDescriptor.java | 64 ++++++++++ .../impl/codec/ClientInfo.java | 47 +++++++ .../impl/codec/ClientPacketTypes.java | 2 + .../impl/codec/ColumnOrientedBlockReader.java | 117 ++++++++++++++++++ .../impl/codec/Compression.java | 6 + .../impl/codec/InitCommandCodec.java | 35 ++++-- .../impl/codec/PacketReader.java | 76 ++++++++++++ .../impl/codec/QueryProcessingStage.java | 7 ++ .../impl/codec/QueryProgressInfo.java | 79 ++++++++++++ .../impl/codec/RowResultDecoder.java | 47 +++++++ .../impl/codec/ServerPacketType.java | 73 +++++++++++ .../impl/codec/ServerPacketTypes.java | 7 -- .../impl/codec/SimpleQueryCodec.java | 108 ++++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 77 ++++++++++++ .../impl/codec/columns/ClickhouseColumns.java | 58 +++++++++ .../impl/codec/columns/ColumnSpec.java | 16 +++ .../impl/codec/columns/FixedStringColumn.java | 31 +++++ .../impl/codec/columns/StringColumn.java | 40 ++++++ .../impl/codec/columns/UInt32Column.java | 24 ++++ .../impl/codec/columns/UInt8Column.java | 24 ++++ 31 files changed, 1342 insertions(+), 21 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 37bcec7c34..b696a0409c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,9 +1,25 @@ package io.vertx.clickhouse.clickhousenative; public class ClickhouseConstants { + public static final int DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES = 50264; + public static final int DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS = 51554; + public static final int DBMS_MIN_REVISION_WITH_BLOCK_INFO = 51903; + + public static final int DBMS_MIN_REVISION_WITH_CLIENT_INFO = 54032; public static final int DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE = 54058; + public static final int DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO = 54060; public static final int DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME = 54372; public static final int DBMS_MIN_REVISION_WITH_VERSION_PATCH = 54401; + public static final int DBMS_MIN_REVISION_WITH_SERVER_LOGS = 54406; + public static final int DBMS_MIN_REVISION_WITH_COLUMN_DEFAULTS_METADATA = 54410; + public static final int DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO = 54420; + public static final int DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS = 54429; + public static final int DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET = 54441; + + public static final int CLIENT_VERSION_MAJOR = 20; + public static final int CLIENT_VERSION_MINOR = 10; + public static final int CLIENT_VERSION_PATCH = 2; + public static final int CLIENT_REVISION = 54441; - public static final String CLIENT_NAME = "CLIENT_NAME"; + public static final String OPTION_CLIENT_NAME = "CLIENT_NAME"; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java new file mode 100644 index 0000000000..5f25466814 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ColumnSpec; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class BaseBlock { + private final Map columnsWithTypes; + private final List data; + private final BlockInfo blockInfo; + private final ClickhouseNativeDatabaseMetadata md; + + public BaseBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + this.columnsWithTypes = columnsWithTypes; + this.data = data; + this.blockInfo = blockInfo; + this.md = md; + } + + public Map getColumnsWithTypes() { + return columnsWithTypes; + } + + public List getData() { + return data; + } + + public BlockInfo getBlockInfo() { + return blockInfo; + } + + public ClickhouseNativeDatabaseMetadata getMd() { + return md; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java new file mode 100644 index 0000000000..607d0f0b52 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +public class BlockInfo { + private static final Logger LOG = LoggerFactory.getLogger(BlockInfo.class); + + private Boolean isOverflows; + private Integer bucketNum; + private boolean complete; + + public BlockInfo() { + isOverflows = false; + bucketNum = -1; + } + + public BlockInfo(Boolean isOverflows, Integer bucketNum) { + this.isOverflows = isOverflows; + this.bucketNum = bucketNum; + } + + public void serializeTo(ByteBuf buf) { + ByteBufUtils.writeULeb128(1, buf); + buf.writeByte(isOverflows ? 1 : 0); + ByteBufUtils.writeULeb128(2, buf); + buf.writeIntLE(bucketNum); + ByteBufUtils.writeULeb128(0, buf); + } + + public boolean isComplete() { + return complete; + } + + public boolean isPartial() { + return !complete; + } + + public void readFrom(ByteBuf buf) { + while (isPartial()) { + Integer fieldNum = ByteBufUtils.readULeb128(buf); + if (fieldNum != null) { + LOG.info("fieldNum: " + fieldNum); + if (fieldNum == 0) { + complete = true; + return; + } + if (fieldNum == 1) { + if (buf.readableBytes() >= 1) { + isOverflows = buf.readByte() != 0; + LOG.info("isOverflows: " + isOverflows); + } else { + return; + } + } else if (fieldNum == 2) { + if (buf.readableBytes() >= 4) { + bucketNum = buf.readInt(); + LOG.info("bucketNum: " + bucketNum); + } else { + return; + } + } + } + } + } + + @Override + public String toString() { + return "BlockInfo{" + + "isOverflows=" + isOverflows + + ", bucketNum=" + bucketNum + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index ea5bc55667..d167ec24d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -11,9 +11,10 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int patchVersion; private final String displayName; private final String timezone; + private final String clientName; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, String timezone) { + int patchVersion, String displayName, String timezone, String clientName) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -22,6 +23,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.patchVersion = patchVersion; this.displayName = displayName; this.timezone = timezone; + this.clientName = clientName; } @Override @@ -44,6 +46,26 @@ public int minorVersion() { return 0; } + public int getRevision() { + return revision; + } + + public int getPatchVersion() { + return patchVersion; + } + + public String getDisplayName() { + return displayName; + } + + public String getTimezone() { + return timezone; + } + + public String getClientName() { + return clientName; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java new file mode 100644 index 0000000000..c2d668cff8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -0,0 +1,67 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class ClickhouseNativeRow implements Row { + private final int rowNo; + private final Charset stringCharset; + private final ClickhouseNativeRowDesc rowDesc; + private final ColumnOrientedBlock block; + + public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block) { + this.rowNo = rowNo; + this.rowDesc = rowDesc; + this.block = block; + this.stringCharset = StandardCharsets.UTF_8; + } + + @Override + public String getColumnName(int pos) { + return rowDesc.columnNames().get(pos); + } + + @Override + public int getColumnIndex(String column) { + return rowDesc.columnIndex(column); + } + + @Override + public Object getValue(int columnIndex) { + return block.getData().get(columnIndex).getElement(rowNo); + } + + @Override + public String getString(int pos) { + Object val = getValue(pos); + if (val == null) { + return null; + } else if (val instanceof String) { + return (String) val; + } else if (val instanceof Enum) { + return ((Enum) val).name(); + } else if (val.getClass() == byte[].class) { + return new String((byte[])val, stringCharset); + } else { + throw new ClassCastException("Invalid String value type " + val.getClass()); + } + } + + @Override + public Tuple addValue(Object value) { + throw new IllegalStateException("not implemented"); + } + + @Override + public int size() { + return block.numRows(); + } + + @Override + public void clear() { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java new file mode 100644 index 0000000000..3db511730d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -0,0 +1,16 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.sqlclient.desc.ColumnDescriptor; +import io.vertx.sqlclient.impl.RowDesc; + +import java.util.List; + +public class ClickhouseNativeRowDesc extends RowDesc { + public ClickhouseNativeRowDesc(List columnNames) { + super(columnNames); + } + + public ClickhouseNativeRowDesc(List columnNames, List columnDescriptors) { + super(columnNames, columnDescriptors); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index fb4aa31825..6f0b9100e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -44,7 +44,7 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { } @Override - public DatabaseMetadata getDatabaseMetaData() { + public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java new file mode 100644 index 0000000000..f1e538e0a0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class ColumnOrientedBlock extends BaseBlock { + public static final ColumnOrientedBlock PARTIAL = new ColumnOrientedBlock(null, null, null, null); + + public ColumnOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + super(columnsWithTypes, data, blockInfo, md); + } + + public int numColumns() { + Collection dt = getData(); + return dt == null ? 0 : dt.size(); + } + + public int numRows() { + if (numColumns() > 0) { + ClickhouseColumn firstRow = getData().iterator().next(); + return java.lang.reflect.Array.getLength(firstRow.getItems()); + } else { + return 0; + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java new file mode 100644 index 0000000000..1c3cf43dcd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +public class Pair { + private final K left; + private final V right; + + public Pair(K left, V right) { + this.left = left; + this.right = right; + } + + public K getLeft() { + return left; + } + + public V getRight() { + return right; + } + + @Override + public String toString() { + return "Pair{" + + "left=" + left + + ", right=" + right + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java new file mode 100644 index 0000000000..2c15f7f8bc --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; + +import java.util.List; +import java.util.Map; + +public class RowOrientedBlock extends BaseBlock { + + public RowOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + super(columnsWithTypes, data, blockInfo, md); + } + + public void serializeTo(ByteBuf buf) { + if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + getBlockInfo().serializeTo(buf); + } + //n_columns + ByteBufUtils.writeULeb128(0, buf); + //n_rows + ByteBufUtils.writeULeb128(0, buf); + //TODO smagellan + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java new file mode 100644 index 0000000000..bae2e68a88 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -0,0 +1,95 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +public class BlockStreamProfileInfo { + private Integer rows; + private Integer blocks; + private Integer bytes; + private Boolean appliedLimit; + private Integer rowsBeforeLimit; + private Boolean calculatedRowsBeforeLimit; + + public void readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return; + } + } + if (blocks == null) { + blocks = ByteBufUtils.readULeb128(in); + if (blocks == null) { + return; + } + } + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return; + } + } + if (appliedLimit == null) { + if (in.readableBytes() == 0) { + return; + } + appliedLimit = in.readBoolean(); + } + if (rowsBeforeLimit == null) { + rowsBeforeLimit = ByteBufUtils.readULeb128(in); + if (rowsBeforeLimit == null) { + return; + } + } + if (calculatedRowsBeforeLimit == null) { + if (in.readableBytes() == 0) { + return; + } + calculatedRowsBeforeLimit = in.readBoolean(); + } + } + + public Integer getRows() { + return rows; + } + + public Integer getBlocks() { + return blocks; + } + + public Integer getBytes() { + return bytes; + } + + public Boolean getAppliedLimit() { + return appliedLimit; + } + + public Integer getRowsBeforeLimit() { + return rowsBeforeLimit; + } + + public Boolean getCalculatedRowsBeforeLimit() { + return calculatedRowsBeforeLimit; + } + + public boolean isComplete() { + return !isPartial(); + } + + public boolean isPartial() { + return calculatedRowsBeforeLimit == null; + } + + @Override + public String toString() { + return "BlockStreamProfileInfo{" + + "rows=" + rows + + ", blocks=" + blocks + + ", bytes=" + bytes + + ", appliedLimit=" + appliedLimit + + ", rowsBeforeLimit=" + rowsBeforeLimit + + ", calculatedRowsBeforeLimit=" + calculatedRowsBeforeLimit + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java new file mode 100644 index 0000000000..2dd5a1bcad --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.desc.ColumnDescriptor; + +import java.sql.JDBCType; + +public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { + public static final int NOSIZE = -1; + + private final String name; + private final String unparsedNativeType; + private final String nativeType; + private final boolean isArray; + private final JDBCType jdbcType; + private final int elementSize; + private final boolean nullable; + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable) { + this.name = name; + this.unparsedNativeType = unparsedNativeType; + this.nativeType = nativeType; + this.isArray = isArray; + this.elementSize = elementSize; + this.jdbcType = jdbcType; + this.nullable = nullable; + } + + @Override + public String name() { + return name; + } + + @Override + public boolean isArray() { + return isArray; + } + + @Override + public JDBCType jdbcType() { + return jdbcType; + } + + public int getElementSize() { + return elementSize; + } + + public boolean isNullable() { + return nullable; + } + + @Override + public String toString() { + return "ClickhouseNativeColumnDescriptor{" + + "name='" + name + '\'' + + ", unparsedNativeType='" + unparsedNativeType + '\'' + + ", nativeType='" + nativeType + '\'' + + ", isArray=" + isArray + + ", jdbcType=" + jdbcType + + ", elementSize=" + elementSize + + ", nullable=" + nullable + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java new file mode 100644 index 0000000000..4799c319ec --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -0,0 +1,47 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class ClientInfo { + public static final int NO_QUERY = 0; + public static final int INITIAL_QUERY = 1; + + private final ClickhouseNativeDatabaseMetadata meta; + + public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { + this.meta = meta; + } + + public void serializeTo(ByteBuf buf) { + int serverRevision = meta.getRevision(); + if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", + serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + } + buf.writeByte(INITIAL_QUERY); + //initial_user + ByteBufUtils.writePascalString("", buf); + //initial_query_id + ByteBufUtils.writePascalString("", buf); + //initial_address + ByteBufUtils.writePascalString("0.0.0.0:0", buf); + //interface: TCP + buf.writeByte(1); + ByteBufUtils.writePascalString(System.getProperty("user.name"), buf); + //TODO smagellan: fix client_hostname resolution + ByteBufUtils.writePascalString("bhorse", buf); + ByteBufUtils.writePascalString(meta.getClientName(), buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + //quota_key + ByteBufUtils.writePascalString("", buf); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 00e2d8f3ff..7573773f4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -2,4 +2,6 @@ public class ClientPacketTypes { public static final int HELLO = 0; + public static final int QUERY = 1; + public static final int DATA = 2; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java new file mode 100644 index 0000000000..1e5199d24f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -0,0 +1,117 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhousenative.impl.Pair; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.*; + +public class ColumnOrientedBlockReader { + private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); + + private final int serverRevision; + private final ClickhouseNativeDatabaseMetadata md; + + private String tempTableInfo; + private BlockInfo blockInfo; + private Integer nColumns; + private Integer nRows; + private Map colWithTypes; + private List data; + + private String colName; + private String colType; + private ClickhouseColumn columnData; + + public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + this.serverRevision = md.getRevision(); + } + + public ColumnOrientedBlock readFrom(ByteBuf in) { + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + } + + //BlockInputStream.read + if (blockInfo == null) { + blockInfo = new BlockInfo(); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + if (blockInfo.isPartial()) { + blockInfo.readFrom(in); + if (blockInfo.isPartial()) { + return ColumnOrientedBlock.PARTIAL; + } + } + } + if (nColumns == null) { + nColumns = ByteBufUtils.readULeb128(in); + if (nColumns == null) { + return ColumnOrientedBlock.PARTIAL; + } + colWithTypes = new LinkedHashMap<>(); + } + if (nRows == null) { + nRows = ByteBufUtils.readULeb128(in); + if (nRows == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + + if (colWithTypes.size() < nColumns) { + if (colName == null) { + colName = ByteBufUtils.readPascalString(in); + if (colName == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + if (colType == null) { + colType = ByteBufUtils.readPascalString(in); + if (colType == null) { + return ColumnOrientedBlock.PARTIAL; + } + } + colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); + if (nRows > 0) { + if (data == null) { + data = new ArrayList<>(nColumns); + } + if (columnData == null) { + LOG.info("reading column " + colName + " of type " + colType); + columnData = ClickhouseColumns.columnForSpec(colName, colWithTypes, nRows); + columnData.readColumn(in); + + if (columnData.isPartial()) { + return ColumnOrientedBlock.PARTIAL; + } else { + data.add(columnData); + columnData = null; + } + } + } + colName = null; + colType = null; + } + if (colWithTypes.size() == nColumns) { + LOG.info("nColumns: " + nColumns + "; nRows: " + nRows); + LOG.info("columns: " + colWithTypes); + LOG.info("decoded: ColumnOrientedBlock"); + return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); + } + return ColumnOrientedBlock.PARTIAL; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java new file mode 100644 index 0000000000..221252ea35 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -0,0 +1,6 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Compression { + public static final int DISABLED = 0; + public static final int ENABLED = 1; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index fa241013d9..226d55926a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -29,6 +29,9 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { patchVersion = ByteBufUtils.readULeb128(in); if (patchVersion == null) { return; } + } else { + patchVersion = revision; } ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone); + major, minor, revision, patchVersion, displayName, timezone, clientName); encoder.getConn().setDatabaseMetadata(md); - LOG.info("decode: " + md); + LOG.info("connected to server: " + md); completionHandler.handle(CommandResponse.success(null)); - } else if (packetType == ServerPacketTypes.EXCEPTION) { + } else if (packetType == ServerPacketType.EXCEPTION.code()) { if (code == null) { if (in.readableBytes() >= 4) { code = in.readIntLE(); @@ -136,6 +141,14 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { return; } } + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readByte() != 0; + } else { + return; + } + } + //TODO smagellan: read nested exception if nested == true completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); } else { String msg = "unknown packet type: " + packetType; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java new file mode 100644 index 0000000000..6cd795f3f9 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +public class PacketReader { + private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); + + private final ClickhouseNativeDatabaseMetadata md; + + private Integer packetType; + + private ColumnOrientedBlockReader columnBlockReader; + + private BlockStreamProfileInfo blockStreamProfileInfo; + private QueryProgressInfo queryProgress; + private boolean endOfStream; + + public PacketReader(ClickhouseNativeDatabaseMetadata md) { + this.md = md; + } + + public ColumnOrientedBlock receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + if (packetType == null) { + packetType = ByteBufUtils.readULeb128(in); + if (packetType == null) { + return ColumnOrientedBlock.PARTIAL; + } + LOG.info("packet type: " + ServerPacketType.fromCode(packetType)); + } + if (packetType == ServerPacketType.DATA.code()) { + if (columnBlockReader == null) { + columnBlockReader = new ColumnOrientedBlockReader(md); + } + ColumnOrientedBlock block = columnBlockReader.readFrom(in); + if (block != ColumnOrientedBlock.PARTIAL) { + columnBlockReader = null; + packetType = null; + } + return block; + } else if (packetType == ServerPacketType.PROFILE_INFO.code()) { + if (blockStreamProfileInfo == null) { + blockStreamProfileInfo = new BlockStreamProfileInfo(); + } + blockStreamProfileInfo.readFrom(in); + if (blockStreamProfileInfo.isComplete()) { + LOG.info("decoded: BlockStreamProfileInfo: " + blockStreamProfileInfo); + blockStreamProfileInfo = null; + packetType = null; + } + } else if (packetType == ServerPacketType.PROGRESS.code()) { + if (queryProgress == null) { + queryProgress = new QueryProgressInfo(md); + } + queryProgress.readFrom(in); + if (queryProgress.isComplete()) { + LOG.info("decoded: QueryProgressInfo: " + queryProgress); + queryProgress = null; + packetType = null; + } + } else if (packetType == ServerPacketType.END_OF_STREAM.code()) { + LOG.info("reached end of stream"); + packetType = null; + endOfStream = true; + } + return null; + } + + public boolean isEndOfStream() { + return endOfStream; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java new file mode 100644 index 0000000000..9c5f44fd2f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -0,0 +1,7 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class QueryProcessingStage { + public static final int FETCH_COLUMNS = 0; + public static final int WITH_MERGEABLE_STATE = 1; + public static final int COMPLETE = 2; +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java new file mode 100644 index 0000000000..d8cbc8c637 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -0,0 +1,79 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class QueryProgressInfo { + private final int serverRevision; + + private Integer rows; + private Integer bytes; + private Integer totalRows; + private Integer writtenRows; + private Integer writtenBytes; + + public QueryProgressInfo(ClickhouseNativeDatabaseMetadata md) { + this.serverRevision = md.getRevision(); + } + + public void readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return; + } + } + + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { + if (totalRows == null) { + totalRows = ByteBufUtils.readULeb128(in); + } + if (totalRows == null) { + return; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { + if (writtenRows == null) { + writtenRows = ByteBufUtils.readULeb128(in); + } + if (writtenRows == null) { + return; + } + if (writtenBytes == null) { + writtenBytes = ByteBufUtils.readULeb128(in); + if (writtenBytes == null) { + return; + } + } + } + } + + public boolean isComplete() { + return !isPartial(); + } + + public boolean isPartial() { + return writtenBytes == null; + } + + @Override + public String toString() { + return "QueryProgressInfo{" + + "serverRevision=" + serverRevision + + ", rows=" + rows + + ", bytes=" + bytes + + ", totalRows=" + totalRows + + ", writtenRows=" + writtenRows + + ", writtenBytes=" + writtenBytes + + '}'; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java new file mode 100644 index 0000000000..fcc4ef690a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -0,0 +1,47 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.impl.RowDecoder; + +import java.util.stream.Collector; + +class RowResultDecoder extends RowDecoder { + private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); + + private final ClickhouseNativeRowDesc rowDesc; + private ColumnOrientedBlock block; + private int rowNo; + + protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc) { + super(collector); + this.rowDesc = rowDesc; + } + + @Override + protected Row decodeRow(int len, ByteBuf in) { + LOG.info("generating row"); + ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); + ++rowNo; + return row; + } + + public void generateRows(ColumnOrientedBlock block) { + this.block = block; + this.rowNo = 0; + for (int i = 0; i < block.numRows(); ++i) { + this.handleRow(-1, null); + } + this.block = null; + this.rowNo = 0; + } + + public ClickhouseNativeRowDesc getRowDesc() { + return rowDesc; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java new file mode 100644 index 0000000000..e51bb1fd0b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -0,0 +1,73 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import java.util.HashMap; +import java.util.Map; + +public enum ServerPacketType { + //Name, version, revision. + HELLO(0), + //A block of data (compressed or not). + DATA(1), + + //The exception during query execution. + EXCEPTION(2), + + //Query execution progress: rows read, bytes read. + PROGRESS( 3), + + //Ping response + PONG(4), + + //All packets were transmitted + END_OF_STREAM(5), + + //Packet with profiling info. + PROFILE_INFO(6), + + //A block with totals (compressed or not). + TOTALS(7), + + //A block with minimums and maximums (compressed or not). + EXTREMES(8), + + //A response to TablesStatus request. + TABLES_STATUS_RESPONSE(9), + + //System logs of the query execution + LOG(10), + + //Columns' description for default values calculation + TABLE_COLUMNS(11); + + private static final Map CODE_INDEX = buildCodeIndex(); + + private final int code; + ServerPacketType(int code) { + this.code = code; + } + + public int code() { + return code; + } + + @Override + public String toString() { + return this.name() + "(" + this.code + ")"; + } + + public static ServerPacketType fromCode(int code) { + ServerPacketType ret = CODE_INDEX.get(code); + if (ret == null) { + throw new IllegalArgumentException("unknown code: " + code); + } + return ret; + } + + private static Map buildCodeIndex() { + Map ret = new HashMap<>(); + for (ServerPacketType pType : ServerPacketType.values()) { + ret.put(pType.code(), pType); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java deleted file mode 100644 index 116d2b523f..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketTypes.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -public class ServerPacketTypes { - public static final int HELLO = 0; - public static final int DATA = 1; - public static final int EXCEPTION = 2; -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java index 57f077082b..97a55374c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java @@ -2,14 +2,122 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.desc.ColumnDescriptor; +import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import java.util.*; + public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCodec.class); + private RowResultDecoder rowResultDecoder; + private PacketReader packetReader; + private int dataPacketNo; + protected SimpleQueryCodec(SimpleQueryCommand cmd) { super(cmd); } + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + ByteBuf buf = allocateBuffer(); + sendQuery(cmd.sql(), buf); + sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } + + private void sendExternalTables(ByteBuf buf, Collection blocks) { + ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + for (RowOrientedBlock block : blocks) { + //TODO smagellan + sendData(buf, block, null); + } + sendData(buf, new RowOrientedBlock(null, null, new BlockInfo(), md), ""); + } + + private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { + ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); + if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + ByteBufUtils.writePascalString(tableName, buf); + } + block.serializeTo(buf); + } + + private void sendQuery(String query, ByteBuf buf) { + ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); + //query id + ByteBufUtils.writePascalString("", buf); + ClickhouseNativeDatabaseMetadata meta = encoder.getConn().getDatabaseMetaData(); + int serverRevision = meta.getRevision(); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + ClientInfo clInfo = new ClientInfo(meta); + clInfo.serializeTo(buf); + } + boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; + writeSettings(Collections.emptyMap(), settingsAsStrings, true, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { + ByteBufUtils.writePascalString("", buf); + } + ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); + ByteBufUtils.writeULeb128(Compression.DISABLED, buf); + ByteBufUtils.writePascalString(query, buf); + } + + private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + //TODO smagellan + //end of settings + ByteBufUtils.writePascalString("", buf); + } + @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { + LOG.info("decode: " + in.readableBytes()); + if (packetReader == null) { + //TODO: reimplement PacketReader via RowResultDecoder + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData()); + } + ColumnOrientedBlock block = packetReader.receivePacket(ctx, in); + if (block != null && block != ColumnOrientedBlock.PARTIAL) { + LOG.info("decoded packet: " + block + " row count " + block.numRows()); + if (dataPacketNo == 0) { + ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + } + packetReader = null; + rowResultDecoder.generateRows(block); + ++dataPacketNo; + } else if (packetReader.isEndOfStream()) { + notifyOperationComplete(); + } + } + + private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { + Map data = block.getColumnsWithTypes(); + List columnNames = new ArrayList<>(data.keySet()); + List columnTypes = new ArrayList<>(data.values()); + return new ClickhouseNativeRowDesc(columnNames, columnTypes); + } + + private void notifyOperationComplete() { + Throwable failure = rowResultDecoder.complete(); + T result = rowResultDecoder.result(); + int size = rowResultDecoder.size(); + rowResultDecoder.reset(); + + cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + rowResultDecoder.reset(); + + CommandResponse response; + if (failure == null) { + response = CommandResponse.success(true); + } else { + response = CommandResponse.failure(failure); + } + completionHandler.handle(response); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java new file mode 100644 index 0000000000..64f82e08d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -0,0 +1,77 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import java.util.BitSet; + +public abstract class ClickhouseColumn { + protected final int nItems; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected BitSet nullsMap; + protected Object items; + + protected ClickhouseColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + this.columnDescriptor = columnDescriptor; + this.nItems = nItems; + } + + public void readColumn(ByteBuf in){ + readStatePrefix(in); + readData(in); + } + + protected void readStatePrefix(ByteBuf in) { + } + + protected void readData(ByteBuf in) { + if (columnDescriptor.isNullable() && nullsMap == null) { + nullsMap = readNullsMap(in); + if (nullsMap == null) { + return; + } + } + readDataInternal(in); + } + + protected void readDataInternal(ByteBuf in) { + if (items == null) { + items = readItems(in); + if (items == null) { + return; + } + } + afterReadItems(in); + } + + protected abstract Object readItems(ByteBuf in); + protected void afterReadItems(ByteBuf in) { + } + + protected BitSet readNullsMap(ByteBuf in) { + int nBytes = nItems / 8 + (nItems % 8 == 0 ? 0 : 1); + return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + } + + public boolean isPartial() { + return items == null; + } + + public Object getItems() { + return items; + } + + public Object getElement(int rowNo) { + if (nullsMap != null && nullsMap.get(rowNo)) { + return null; + } + return getElementInternal(rowNo); + } + + protected Object getElementInternal(int rowNo) { + return java.lang.reflect.Array.get(items, rowNo); + } + + public ClickhouseNativeColumnDescriptor getColumnDescriptor() { + return columnDescriptor; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java new file mode 100644 index 0000000000..ab8cf880d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -0,0 +1,58 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.sql.JDBCType; +import java.util.Map; + +public class ClickhouseColumns { + public static final String NULLABLE_PREFIX = "Nullable("; + public static final int NULLABLE_PREFIX_LENGTH = NULLABLE_PREFIX.length(); + + public static final String FIXED_STRING_PREFIX = "FixedString("; + public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String spec, String name) { + if (spec.startsWith(NULLABLE_PREFIX)) { + String subSpec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); + return columnDescriptorForSpec(spec, subSpec, name, true); + } + return columnDescriptorForSpec(spec, spec, name, false); + } + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { + if (spec.equals("UInt32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable); + } else if (spec.equals("UInt8")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable); + } else if (spec.equals("String")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable); + } else if (spec.startsWith(FIXED_STRING_PREFIX)) { + String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); + int bytesLength = Integer.parseInt(lengthStr); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable); + } + throw new IllegalArgumentException("unknown spec: " + spec); + } + + public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nItems) { + ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); + if (descr == null) { + throw new IllegalArgumentException("no parsed spec for column name: " + name); + } + JDBCType jdbcType = descr.jdbcType(); + if (jdbcType == JDBCType.INTEGER) { + return new UInt32Column(nItems, descr); + } else if (jdbcType == JDBCType.TINYINT) { + return new UInt8Column(nItems, descr); + } else if (jdbcType == JDBCType.VARCHAR) { + if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + return new StringColumn(nItems, descr); + } else { + return new FixedStringColumn(nItems, descr); + } + } else { + throw new IllegalArgumentException("no column type for jdbc type " + jdbcType); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java new file mode 100644 index 0000000000..a1c22beea0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java @@ -0,0 +1,16 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public enum ColumnSpec { + UInt32(4), + String(null); + + private final Integer elementSize; + + ColumnSpec(Integer elementSize) { + this.elementSize = elementSize; + } + + public Integer elSize() { + return elementSize; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java new file mode 100644 index 0000000000..8b120ba6d0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -0,0 +1,31 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.ArrayList; +import java.util.List; + +public class FixedStringColumn extends ClickhouseColumn { + private List elements; + + protected FixedStringColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + this.elements = new ArrayList<>(nItems); + } + + @Override + protected Object[] readItems(ByteBuf in) { + while (elements.size() < nItems) { + if (in.readableBytes() < columnDescriptor.getElementSize()) { + return null; + } + byte[] stringBytes = new byte[columnDescriptor.getElementSize()]; + in.readBytes(stringBytes); + elements.add(stringBytes); + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java new file mode 100644 index 0000000000..b495da9484 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -0,0 +1,40 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.ArrayList; +import java.util.List; + +public class StringColumn extends ClickhouseColumn { + private Integer curStrLength; + private List elements; + + protected StringColumn(int nItems, ClickhouseNativeColumnDescriptor descriptor) { + super(nItems, descriptor); + this.elements = new ArrayList<>(nItems); + } + + @Override + protected Object[] readItems(ByteBuf in) { + while (elements.size() < nItems) { + if (curStrLength == null) { + curStrLength = ByteBufUtils.readULeb128(in); + if (curStrLength == null) { + return null; + } + } + if (in.readableBytes() < curStrLength) { + return null; + } + byte[] stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + elements.add(stringBytes); + curStrLength = null; + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java new file mode 100644 index 0000000000..9b6a6340d0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +public class UInt32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + public UInt32Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + int[] data = new int[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readIntLE(); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java new file mode 100644 index 0000000000..6b3fd4b8a5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +public class UInt8Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 1; + + public UInt8Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + byte[] data = new byte[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readByte(); + } + return data; + } + return null; + } +} From 372f6d8bd7a2b45bebf95f65da51a4a608bcb5b9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 19:36:17 +0300 Subject: [PATCH 086/176] added unit test Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 15 +++++ .../ClickhouseNativeConnectOptions.java | 13 +++- .../ClickhouseNativeConnectionUriParser.java | 63 +++++++++++++++++++ .../ClickhouseNativeDatabaseMetadata.java | 8 ++- .../ClickhouseNativeColumnDescriptor.java | 8 ++- .../impl/codec/ClickhouseNativeEncoder.java | 5 +- .../codec/CloseConnectionCommandCodec.java | 26 ++++++++ .../impl/codec/InitCommandCodec.java | 4 +- ...odec.java => SimpleQueryCommandCodec.java} | 9 ++- .../impl/codec/columns/ClickhouseColumns.java | 12 ++-- .../impl/codec/columns/UInt32Column.java | 9 +++ .../impl/codec/columns/UInt8Column.java | 9 +++ .../ClickhouseResource.java | 55 ++++++++++++++++ .../ClickhouseTest.java | 49 +++++++++++++++ 14 files changed, 267 insertions(+), 18 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/{SimpleQueryCodec.java => SimpleQueryCommandCodec.java} (94%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 454487572a..167a843653 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -68,6 +68,21 @@ test + + org.testcontainers + clickhouse + ${testcontainers.version} + test + + + + ru.yandex.clickhouse + clickhouse-jdbc + 0.2.6 + test + + + org.openjdk.jmh jmh-core diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index dacf708b77..716487ccd7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; @@ -10,6 +11,15 @@ public class ClickhouseNativeConnectOptions extends SqlConnectOptions { private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; + public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { + JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); + return new ClickhouseNativeConnectOptions(parsedConfiguration); + } + + public ClickhouseNativeConnectOptions() { + super(); + } + public ClickhouseNativeConnectOptions(JsonObject json) { super(json); ClickhouseNativeConnectOptionsConverter.fromJson(json, this); @@ -17,9 +27,6 @@ public ClickhouseNativeConnectOptions(JsonObject json) { public ClickhouseNativeConnectOptions(SqlConnectOptions other) { super(other); - if (other instanceof ClickhouseNativeConnectOptions) { - ClickhouseNativeConnectOptions opts = (ClickhouseNativeConnectOptions) other; - } } public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java new file mode 100644 index 0000000000..c9db877bb5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -0,0 +1,63 @@ +package io.vertx.clickhouse.clickhousenative.impl; + +import io.vertx.core.json.JsonObject; + +import java.net.URI; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.AbstractMap.SimpleImmutableEntry; + +public class ClickhouseNativeConnectionUriParser { + public static JsonObject parse(String connectionUri) { + try { + JsonObject configuration = new JsonObject(); + URI location = URI.create(connectionUri); + String userInfo = location.getUserInfo(); + String user = userInfo; + String password = null; + if (userInfo.contains(":")) { + String[] tokens = userInfo.split(":"); + user = tokens[0]; + password = tokens[1]; + } + configuration.put("user", user); + configuration.put("password", password); + configuration.put("host", location.getHost()); + int port = location.getPort(); + if (port == -1) { + port = 9000; + } + configuration.put("port", port); + String path = location.getPath(); + int startDbOffset = path.startsWith("/") ? 1 : 0; + int endLocOffset = path.endsWith("/") && path.length() >= 2 ? 1 : 0; + path = path.substring(startDbOffset, path.length() - endLocOffset); + configuration.put("database", path); + + configuration.put("properties", queryAsMap(location.getQuery())); + + return configuration; + } catch (Exception e) { + throw new IllegalArgumentException("Cannot parse invalid connection URI: " + connectionUri, e); + } + } + + public static Map queryAsMap(String query) { + if (query == null || query.isEmpty()) { + return Collections.emptyMap(); + } + return Arrays.stream(query.split("&")) + .map(ClickhouseNativeConnectionUriParser::asEntry) + .collect(Collectors.toMap(SimpleImmutableEntry::getKey, SimpleImmutableEntry::getValue)); + } + + public static AbstractMap.SimpleImmutableEntry asEntry(String str) { + int idx = str.indexOf("="); + String key = idx > 0 ? str.substring(0, idx) : str; + String value = idx > 0 && str.length() > idx + 1 ? str.substring(idx + 1) : null; + return new AbstractMap.SimpleImmutableEntry<>(key, value); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index d167ec24d2..243610ca79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -2,6 +2,8 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; +import java.time.ZoneId; + public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; @@ -10,11 +12,11 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int revision; private final int patchVersion; private final String displayName; - private final String timezone; + private final ZoneId timezone; private final String clientName; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, String timezone, String clientName) { + int patchVersion, String displayName, ZoneId timezone, String clientName) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -58,7 +60,7 @@ public String getDisplayName() { return displayName; } - public String getTimezone() { + public ZoneId getTimezone() { return timezone; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 2dd5a1bcad..56e5febec8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -14,9 +14,10 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final JDBCType jdbcType; private final int elementSize; private final boolean nullable; + private final boolean unsigned; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, - boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable) { + boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -24,6 +25,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.elementSize = elementSize; this.jdbcType = jdbcType; this.nullable = nullable; + this.unsigned = unsigned; } @Override @@ -49,6 +51,10 @@ public boolean isNullable() { return nullable; } + public boolean isUnsigned() { + return unsigned; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 37b4511547..9be689edfd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,6 +4,7 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseConnectionCommand; import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.InitCommand; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; @@ -60,7 +61,9 @@ void write(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { - return new SimpleQueryCodec<>((SimpleQueryCommand) cmd); + return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd); + } else if (cmd instanceof CloseConnectionCommand) { + return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java new file mode 100644 index 0000000000..f7eebd8260 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.CloseConnectionCommand; + +public class CloseConnectionCommandCodec extends ClickhouseNativeCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(CloseConnectionCommandCodec.class); + + protected CloseConnectionCommandCodec(CloseConnectionCommand cmd) { + super(cmd); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } + + @Override + public void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + LOG.info("closing channel"); + encoder.chctx().channel().close(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 226d55926a..2e292709dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -11,6 +11,8 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; +import java.time.ZoneId; + public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); @@ -111,7 +113,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone, clientName); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), clientName); encoder.getConn().setDatabaseMetadata(md); LOG.info("connected to server: " + md); completionHandler.handle(CommandResponse.success(null)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 97a55374c2..3e011ec6e0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -12,13 +12,13 @@ import java.util.*; -public class SimpleQueryCodec extends ClickhouseNativeQueryCommandBaseCodec>{ - private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCodec.class); +public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - protected SimpleQueryCodec(SimpleQueryCommand cmd) { + protected SimpleQueryCommandCodec(SimpleQueryCommand cmd) { super(cmd); } @@ -105,6 +105,9 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { private void notifyOperationComplete() { Throwable failure = rowResultDecoder.complete(); + if (failure != null) { + failure = new RuntimeException(failure); + } T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index ab8cf880d8..4477e29d4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -21,16 +21,16 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String sp } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { - if (spec.equals("UInt32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable); - } else if (spec.equals("UInt8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable); + if (spec.equals("UInt32") || spec.equals("Int32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + } else if (spec.equals("UInt8") || spec.equals("Int8")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable, false); } throw new IllegalArgumentException("unknown spec: " + spec); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 9b6a6340d0..02884e367a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -21,4 +21,13 @@ protected Object readItems(ByteBuf in) { } return null; } + + @Override + protected Object getElementInternal(int rowNo) { + int element = ((int[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Integer.toUnsignedLong(element); + } + return element; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 6b3fd4b8a5..a1a694fa4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -21,4 +21,13 @@ protected Object readItems(ByteBuf in) { } return null; } + + @Override + protected Object getElementInternal(int rowNo) { + byte element = ((byte[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Byte.toUnsignedInt(element); + } + return element; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java new file mode 100644 index 0000000000..e9f4742ff7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -0,0 +1,55 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import org.junit.rules.ExternalResource; +import org.testcontainers.containers.ClickHouseContainer; +import org.testcontainers.utility.DockerImageName; + +public class ClickhouseResource extends ExternalResource { + private static final String connectionUri = System.getProperty("connection.uri"); + private static final String tlsConnectionUri = System.getProperty("tls.connection.uri"); + + private ClickHouseContainer server; + private ClickhouseNativeConnectOptions options; + + @Override + protected void before() throws Throwable { + if (isTestingWithExternalDatabase()) { + this.options = ClickhouseNativeConnectOptions.fromUri(connectionUri); + return; + } + if (this.server != null) { + return; + } + DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag("20.10.2"); + server = new ClickHouseContainer(imageName); + server.start(); + this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() + .setPort(server.getMappedPort(ClickHouseContainer.NATIVE_PORT)) + .setHost(server.getContainerIpAddress()) + .setUser(server.getUsername()) + .setPassword(server.getPassword()) + .setDatabase("default") + .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver"); + } + + @Override + protected void after() { + if (server != null) { + server.stop(); + } + } + + public ClickhouseNativeConnectOptions options() { + return new ClickhouseNativeConnectOptions(options); + } + + public static boolean isTestingWithExternalDatabase() { + return isSystemPropertyValid(connectionUri) || isSystemPropertyValid(tlsConnectionUri); + } + + private static boolean isSystemPropertyValid(String systemProperty) { + return systemProperty != null && !systemProperty.isEmpty(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java new file mode 100644 index 0000000000..7dc75fe5b3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java @@ -0,0 +1,49 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlClient; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseTest { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup() { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void baseConnectTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); + } + + @Test + public void baseQueryTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("select 4 as resource, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + conn.close(); + }) + ); + })); + } +} From 1386a5d56adb590f0d691cb831c6be0907fa13d9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 21:49:25 +0300 Subject: [PATCH 087/176] added UInt16, UInt64 types support Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 20 +++++++--- .../impl/codec/columns/UInt16Column.java | 33 ++++++++++++++++ .../impl/codec/columns/UInt64Column.java | 39 +++++++++++++++++++ .../impl/codec/columns/UInt8Column.java | 2 +- 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 4477e29d4c..bda7bcb54f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -21,10 +21,14 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String sp } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { - if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); - } else if (spec.equals("UInt8") || spec.equals("Int8")) { + if (spec.equals("UInt8") || spec.equals("Int8")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); + } else if (spec.equals("UInt16") || spec.equals("Int16")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U")); + } if (spec.equals("UInt32") || spec.equals("Int32")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + } if (spec.equals("UInt64") || spec.equals("Int64")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 8, JDBCType.BIGINT, nullable, spec.startsWith("U")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { @@ -41,10 +45,14 @@ public static ClickhouseColumn columnForSpec(String name, Map= ELEMENT_SIZE * nItems) { + short[] data = new short[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readShortLE(); + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowNo) { + short element = ((short[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + return Short.toUnsignedInt(element); + } + return element; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java new file mode 100644 index 0000000000..cd26f39535 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigInteger; + +public class UInt64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + + public UInt64Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nItems, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nItems) { + long[] data = new long[nItems]; + for (int i = 0; i < nItems; ++i) { + data[i] = in.readLongLE(); + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowNo) { + long element = ((long[])this.items)[rowNo]; + if (columnDescriptor.isUnsigned()) { + BigInteger ret = BigInteger.valueOf(element); + if (element < 0) { + ret = ret.negate(); + } + return ret; + } + return element; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index a1a694fa4a..19fc275010 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -26,7 +26,7 @@ protected Object readItems(ByteBuf in) { protected Object getElementInternal(int rowNo) { byte element = ((byte[])this.items)[rowNo]; if (columnDescriptor.isUnsigned()) { - return Byte.toUnsignedInt(element); + return (short)Byte.toUnsignedInt(element); } return element; } From a2e88ce2cb17b99f784c02ce588ba694c5dc0115 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Feb 2021 22:49:08 +0300 Subject: [PATCH 088/176] renamed nItems to nRows, removed reflection API calls Signed-off-by: vladimir --- .../impl/ColumnOrientedBlock.java | 4 +- .../ClickhouseNativeColumnDescriptor.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 38 ++++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 14 +++---- .../impl/codec/columns/FixedStringColumn.java | 13 +++++-- .../impl/codec/columns/StringColumn.java | 13 +++++-- .../impl/codec/columns/UInt16Column.java | 12 +++--- .../impl/codec/columns/UInt32Column.java | 12 +++--- .../impl/codec/columns/UInt64Column.java | 12 +++--- .../impl/codec/columns/UInt8Column.java | 12 +++--- ...ouseTest.java => BasicClickhouseTest.java} | 3 +- 11 files changed, 79 insertions(+), 56 deletions(-) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/{ClickhouseTest.java => BasicClickhouseTest.java} (97%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index f1e538e0a0..859bf6fd70 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -22,8 +22,8 @@ public int numColumns() { public int numRows() { if (numColumns() > 0) { - ClickhouseColumn firstRow = getData().iterator().next(); - return java.lang.reflect.Array.getLength(firstRow.getItems()); + ClickhouseColumn firstColumn = getData().iterator().next(); + return firstColumn.nRows(); } else { return 0; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 56e5febec8..351e86434a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -10,9 +10,9 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final String name; private final String unparsedNativeType; private final String nativeType; - private final boolean isArray; private final JDBCType jdbcType; private final int elementSize; + private final boolean isArray; private final boolean nullable; private final boolean unsigned; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 64f82e08d8..1a37b6b4ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -5,14 +5,14 @@ import java.util.BitSet; public abstract class ClickhouseColumn { - protected final int nItems; + protected final int nRows; protected final ClickhouseNativeColumnDescriptor columnDescriptor; protected BitSet nullsMap; - protected Object items; + protected Object itemsArray; - protected ClickhouseColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { this.columnDescriptor = columnDescriptor; - this.nItems = nItems; + this.nRows = nRows; } public void readColumn(ByteBuf in){ @@ -20,6 +20,10 @@ public void readColumn(ByteBuf in){ readData(in); } + public int nRows() { + return nRows; + } + protected void readStatePrefix(ByteBuf in) { } @@ -34,9 +38,9 @@ protected void readData(ByteBuf in) { } protected void readDataInternal(ByteBuf in) { - if (items == null) { - items = readItems(in); - if (items == null) { + if (itemsArray == null) { + itemsArray = readItems(in); + if (itemsArray == null) { return; } } @@ -48,16 +52,19 @@ protected void afterReadItems(ByteBuf in) { } protected BitSet readNullsMap(ByteBuf in) { - int nBytes = nItems / 8 + (nItems % 8 == 0 ? 0 : 1); - return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); + if (in.readableBytes() >= nBytes) { + return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + } + return null; } public boolean isPartial() { - return items == null; + return itemsArray == null; } - public Object getItems() { - return items; + public Object getItemsArray() { + return itemsArray; } public Object getElement(int rowNo) { @@ -68,7 +75,12 @@ public Object getElement(int rowNo) { } protected Object getElementInternal(int rowNo) { - return java.lang.reflect.Array.get(items, rowNo); + return java.lang.reflect.Array.get(itemsArray, rowNo); + } + + protected Object getObjectsArrayElement(int rowNo) { + Object[] data = (Object[]) itemsArray; + return data[rowNo]; } public ClickhouseNativeColumnDescriptor getColumnDescriptor() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index bda7bcb54f..1d8d6f9ffc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -39,25 +39,25 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un throw new IllegalArgumentException("unknown spec: " + spec); } - public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nItems) { + public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT) { - return new UInt8Column(nItems, descr); + return new UInt8Column(nRows, descr); } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nItems, descr); + return new UInt16Column(nRows, descr); } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nItems, descr); + return new UInt32Column(nRows, descr); } else if (jdbcType == JDBCType.BIGINT && descr.getElementSize() == 8) { - return new UInt64Column(nItems, descr); + return new UInt64Column(nRows, descr); } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nItems, descr); + return new StringColumn(nRows, descr); } else { - return new FixedStringColumn(nItems, descr); + return new FixedStringColumn(nRows, descr); } } else { throw new IllegalArgumentException("no column type for jdbc type " + jdbcType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 8b120ba6d0..374d740a95 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -9,14 +9,14 @@ public class FixedStringColumn extends ClickhouseColumn { private List elements; - protected FixedStringColumn(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); - this.elements = new ArrayList<>(nItems); + protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + this.elements = new ArrayList<>(nRows); } @Override protected Object[] readItems(ByteBuf in) { - while (elements.size() < nItems) { + while (elements.size() < nRows) { if (in.readableBytes() < columnDescriptor.getElementSize()) { return null; } @@ -28,4 +28,9 @@ protected Object[] readItems(ByteBuf in) { elements = null; return ret; } + + @Override + protected Object getElementInternal(int rowNo) { + return getObjectsArrayElement(rowNo); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index b495da9484..2612f90947 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -11,14 +11,14 @@ public class StringColumn extends ClickhouseColumn { private Integer curStrLength; private List elements; - protected StringColumn(int nItems, ClickhouseNativeColumnDescriptor descriptor) { - super(nItems, descriptor); - this.elements = new ArrayList<>(nItems); + protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + super(nRows, descriptor); + this.elements = new ArrayList<>(nRows); } @Override protected Object[] readItems(ByteBuf in) { - while (elements.size() < nItems) { + while (elements.size() < nRows) { if (curStrLength == null) { curStrLength = ByteBufUtils.readULeb128(in); if (curStrLength == null) { @@ -37,4 +37,9 @@ protected Object[] readItems(ByteBuf in) { elements = null; return ret; } + + @Override + protected Object getElementInternal(int rowNo) { + return getObjectsArrayElement(rowNo); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index aa3028a50e..f63af7aae9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -6,15 +6,15 @@ public class UInt16Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 2; - public UInt16Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - short[] data = new short[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + short[] data = new short[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readShortLE(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - short element = ((short[])this.items)[rowNo]; + short element = ((short[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return Short.toUnsignedInt(element); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 02884e367a..3ef29d986d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -6,15 +6,15 @@ public class UInt32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; - public UInt32Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - int[] data = new int[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int[] data = new int[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readIntLE(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - int element = ((int[])this.items)[rowNo]; + int element = ((int[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return Integer.toUnsignedLong(element); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index cd26f39535..f450c8dc60 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -8,15 +8,15 @@ public class UInt64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; - public UInt64Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - long[] data = new long[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + long[] data = new long[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readLongLE(); } return data; @@ -26,7 +26,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - long element = ((long[])this.items)[rowNo]; + long element = ((long[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { BigInteger ret = BigInteger.valueOf(element); if (element < 0) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 19fc275010..3626d523a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -6,15 +6,15 @@ public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; - public UInt8Column(int nItems, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nItems, columnDescriptor); + public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); } @Override protected Object readItems(ByteBuf in) { - if (in.readableBytes() >= ELEMENT_SIZE * nItems) { - byte[] data = new byte[nItems]; - for (int i = 0; i < nItems; ++i) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + byte[] data = new byte[nRows]; + for (int i = 0; i < nRows; ++i) { data[i] = in.readByte(); } return data; @@ -24,7 +24,7 @@ protected Object readItems(ByteBuf in) { @Override protected Object getElementInternal(int rowNo) { - byte element = ((byte[])this.items)[rowNo]; + byte element = ((byte[])this.itemsArray)[rowNo]; if (columnDescriptor.isUnsigned()) { return (short)Byte.toUnsignedInt(element); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 7dc75fe5b3..a59cef2190 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -13,9 +13,10 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseTest { +public class BasicClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + private ClickhouseNativeConnectOptions options; private Vertx vertx; From e4c97cc5d915daaf99f8f7cfbd1b336194cf9111 Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 26 Feb 2021 22:11:26 +0300 Subject: [PATCH 089/176] initial writeSettings implementation; initial PreparedStatement implementation Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 15 +++- .../ClickhouseNativeConnectionUriParser.java | 1 + .../ClickhouseNativeDatabaseMetadata.java | 18 ++-- .../ClickhouseNativeSocketConnection.java | 24 +++++- .../clickhousenative/impl/Pair.java | 15 ++++ .../ClickhouseNativeColumnDescriptor.java | 14 +++- .../impl/codec/ClickhouseNativeEncoder.java | 13 +-- .../impl/codec/ClickhouseNativeParamDesc.java | 13 +++ .../ClickhouseNativePreparedStatement.java | 39 +++++++++ .../impl/codec/ClientInfo.java | 35 ++++---- .../impl/codec/CloseCursorCodec.java | 27 ++++++ .../impl/codec/ExtendedQueryCodec.java | 35 ++++++++ .../impl/codec/InitCommandCodec.java | 9 +- .../impl/codec/PrepareStatementCodec.java | 32 +++++++ .../impl/codec/SimpleQueryCommandCodec.java | 26 +++++- .../impl/codec/columns/ClickhouseColumn.java | 14 ++-- .../impl/codec/columns/ClickhouseColumns.java | 83 +++++++++++++------ .../impl/codec/columns/FixedStringColumn.java | 4 +- .../impl/codec/columns/StringColumn.java | 4 +- .../impl/codec/columns/UInt16Column.java | 4 +- .../impl/codec/columns/UInt32Column.java | 4 +- .../impl/codec/columns/UInt64Column.java | 4 +- .../impl/codec/columns/UInt8Column.java | 4 +- 23 files changed, 354 insertions(+), 83 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index b696a0409c..419c8460aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,5 +1,10 @@ package io.vertx.clickhouse.clickhousenative; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + public class ClickhouseConstants { public static final int DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES = 50264; public static final int DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS = 51554; @@ -21,5 +26,13 @@ public class ClickhouseConstants { public static final int CLIENT_VERSION_PATCH = 2; public static final int CLIENT_REVISION = 54441; - public static final String OPTION_CLIENT_NAME = "CLIENT_NAME"; + public static final String OPTION_CLIENT_NAME = "application_name"; + public static final String OPTION_INITIAL_USER = "initial_user"; + public static final String OPTION_INITIAL_QUERY_ID = "initial_query_id"; + public static final String OPTION_INITIAL_ADDRESS = "initial_address"; + public static final String OPTION_INITIAL_USERNAME = "initial_username"; + public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( + OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index c9db877bb5..272438c081 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.json.JsonObject; import java.net.URI; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 243610ca79..6e6e089c5d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -3,6 +3,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; import java.time.ZoneId; +import java.util.Map; public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String productName; @@ -13,10 +14,12 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int patchVersion; private final String displayName; private final ZoneId timezone; - private final String clientName; + private final String fullClientName; + private final Map properties; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, ZoneId timezone, String clientName) { + int patchVersion, String displayName, ZoneId timezone, String fullClientName, + Map properties) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -25,7 +28,8 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.patchVersion = patchVersion; this.displayName = displayName; this.timezone = timezone; - this.clientName = clientName; + this.fullClientName = fullClientName; + this.properties = properties; } @Override @@ -64,8 +68,12 @@ public ZoneId getTimezone() { return timezone; } - public String getClientName() { - return clientName; + public String getFullClientName() { + return fullClientName; + } + + public Map getProperties() { + return properties; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 6f0b9100e6..1bf3cf53cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -8,14 +8,15 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; import io.vertx.sqlclient.impl.command.InitCommand; -import io.vertx.sqlclient.spi.DatabaseMetadata; import java.util.Map; +import java.util.Objects; import java.util.function.Predicate; public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; + private String pendingCursorId; public ClickhouseNativeSocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, @@ -43,6 +44,27 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { this.md = md; } + public void setPendingCursorId(String cursorId) { + this.pendingCursorId = cursorId; + } + + public String getPendingCursorId() { + return pendingCursorId; + } + + public void releasePendingCursor(String cursorId) { + if (!Objects.equals(this.pendingCursorId, cursorId)) { + throw new IllegalArgumentException("can't release pending cursor: pending = " + pendingCursorId + "; provided: " + cursorId); + } + this.pendingCursorId = null; + } + + public void throwExceptionIfBusy() { + if (pendingCursorId != null) { + throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + } + } + @Override public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java index 1c3cf43dcd..81160b4f1b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java @@ -1,5 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; +import java.util.Objects; + public class Pair { private final K left; private final V right; @@ -17,6 +19,19 @@ public V getRight() { return right; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pair pair = (Pair) o; + return Objects.equals(left, pair.left) && Objects.equals(right, pair.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } + @Override public String toString() { return "Pair{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 351e86434a..56356eaebf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -15,9 +15,12 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final boolean isArray; private final boolean nullable; private final boolean unsigned; + private final boolean lowCardinality; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, - boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned) { + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -26,6 +29,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.jdbcType = jdbcType; this.nullable = nullable; this.unsigned = unsigned; + this.lowCardinality = lowCardinality; } @Override @@ -43,6 +47,10 @@ public JDBCType jdbcType() { return jdbcType; } + public String getUnparsedNativeType() { + return unparsedNativeType; + } + public int getElementSize() { return elementSize; } @@ -55,6 +63,10 @@ public boolean isUnsigned() { return unsigned; } + public boolean isLowCardinality() { + return lowCardinality; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 9be689edfd..9809629750 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,10 +4,7 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.sqlclient.impl.command.CloseConnectionCommand; -import io.vertx.sqlclient.impl.command.CommandBase; -import io.vertx.sqlclient.impl.command.InitCommand; -import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; @@ -61,9 +58,15 @@ void write(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { - return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd); + return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd, conn); } else if (cmd instanceof CloseConnectionCommand) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); + } else if (cmd instanceof PrepareStatementCommand) { + return new PrepareStatementCodec((PrepareStatementCommand) cmd); + } else if (cmd instanceof ExtendedQueryCommand) { + return new ExtendedQueryCodec<>((ExtendedQueryCommand)cmd, conn); + } else if (cmd instanceof CloseCursorCommand) { + return new CloseCursorCodec((CloseCursorCommand)cmd, conn); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java new file mode 100644 index 0000000000..c8454ed1d5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -0,0 +1,13 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.impl.ParamDesc; + +import java.util.List; + +public class ClickhouseNativeParamDesc extends ParamDesc { + private final List paramDescr; + + public ClickhouseNativeParamDesc(List paramDescr) { + this.paramDescr = paramDescr; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java new file mode 100644 index 0000000000..ce076217f4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.sqlclient.impl.ParamDesc; +import io.vertx.sqlclient.impl.PreparedStatement; +import io.vertx.sqlclient.impl.RowDesc; +import io.vertx.sqlclient.impl.TupleInternal; + +public class ClickhouseNativePreparedStatement implements PreparedStatement { + private final String sql; + private final ClickhouseNativeParamDesc paramDesc; + private final ClickhouseNativeRowDesc rowDesc; + + public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc) { + this.sql = sql; + this.paramDesc = paramDesc; + this.rowDesc = rowDesc; + } + + @Override + public ParamDesc paramDesc() { + return null; + } + + @Override + public RowDesc rowDesc() { + return null; + } + + @Override + public String sql() { + return null; + } + + @Override + public String prepare(TupleInternal values) { + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 4799c319ec..365199b154 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,9 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import java.util.Map; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.*; + public class ClientInfo { public static final int NO_QUERY = 0; public static final int INITIAL_QUERY = 1; @@ -16,32 +19,34 @@ public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { public void serializeTo(ByteBuf buf) { int serverRevision = meta.getRevision(); - if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + if (serverRevision < DBMS_MIN_REVISION_WITH_CLIENT_INFO) { throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", - serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + serverRevision, DBMS_MIN_REVISION_WITH_CLIENT_INFO)); } buf.writeByte(INITIAL_QUERY); + Map properties = meta.getProperties(); + //initial_user - ByteBufUtils.writePascalString("", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, ""), buf); //initial_query_id - ByteBufUtils.writePascalString("", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_QUERY_ID, ""), buf); //initial_address - ByteBufUtils.writePascalString("0.0.0.0:0", buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); //interface: TCP buf.writeByte(1); - ByteBufUtils.writePascalString(System.getProperty("user.name"), buf); + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); //TODO smagellan: fix client_hostname resolution - ByteBufUtils.writePascalString("bhorse", buf); - ByteBufUtils.writePascalString(meta.getClientName(), buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); + ByteBufUtils.writePascalString(meta.getFullClientName(), buf); + ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(CLIENT_REVISION, buf); + if (serverRevision >= DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { //quota_key ByteBufUtils.writePascalString("", buf); } - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + if (serverRevision >= DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(CLIENT_VERSION_PATCH, buf); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java new file mode 100644 index 0000000000..ab9a75e59d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseCursorCommand; +import io.vertx.sqlclient.impl.command.CommandResponse; + +public class CloseCursorCodec extends ClickhouseNativeCommandCodec{ + private final ClickhouseNativeSocketConnection conn; + + protected CloseCursorCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + this.conn = conn; + } + + void encode(ClickhouseNativeEncoder encoder) { + conn.releasePendingCursor(cmd.id()); + super.encode(encoder); + completionHandler.handle(CommandResponse.success(null)); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java new file mode 100644 index 0000000000..b7224aa581 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CommandResponse; +import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; + +import java.util.Collections; + +public class ExtendedQueryCodec extends ClickhouseNativeQueryCommandBaseCodec> { + private final ClickhouseNativeSocketConnection conn; + + public ExtendedQueryCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + this.conn = conn; + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + conn.throwExceptionIfBusy(); + conn.setPendingCursorId(cmd.cursorId()); + super.encode(encoder); + ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(Collections.emptyList()); + RowResultDecoder rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + Throwable t = rowResultDecoder.complete(); + cmd.resultHandler().handleResult(0, 0, rowDesc, rowResultDecoder.result(), t); + completionHandler.handle(CommandResponse.success(false)); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 2e292709dd..749a7bc3a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -32,8 +32,7 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec{ + private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); + + protected PrepareStatementCodec(PrepareStatementCommand cmd) { + super(cmd); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + LOG.info("handle ready for query"); + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), new ClickhouseNativeParamDesc(Collections.emptyList()), + new ClickhouseNativeRowDesc(Collections.emptyList())))); + } + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 3e011ec6e0..2dcf3bdd2a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -10,20 +10,27 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; + private final ClickhouseNativeSocketConnection conn; - protected SimpleQueryCommandCodec(SimpleQueryCommand cmd) { + protected SimpleQueryCommandCodec(SimpleQueryCommand cmd, ClickhouseNativeSocketConnection conn) { super(cmd); - } + this.conn = conn; + } @Override void encode(ClickhouseNativeEncoder encoder) { + conn.throwExceptionIfBusy(); super.encode(encoder); ByteBuf buf = allocateBuffer(); sendQuery(cmd.sql(), buf); @@ -69,7 +76,18 @@ private void sendQuery(String query, ByteBuf buf) { } private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { - //TODO smagellan + if (settingsAsStrings) { + for (Map.Entry entry : settings.entrySet()) { + if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + ByteBufUtils.writePascalString(entry.getKey(), buf); + buf.writeBoolean(settingsAreImportant); + ByteBufUtils.writePascalString(entry.getValue().toString(), buf); + } + } + } else { + //TODO smagellan + throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); + } //end of settings ByteBufUtils.writePascalString("", buf); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1a37b6b4ba..774c5b5457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -67,20 +67,20 @@ public Object getItemsArray() { return itemsArray; } - public Object getElement(int rowNo) { - if (nullsMap != null && nullsMap.get(rowNo)) { + public Object getElement(int rowIdx) { + if (nullsMap != null && nullsMap.get(rowIdx)) { return null; } - return getElementInternal(rowNo); + return getElementInternal(rowIdx); } - protected Object getElementInternal(int rowNo) { - return java.lang.reflect.Array.get(itemsArray, rowNo); + protected Object getElementInternal(int rowIdx) { + return java.lang.reflect.Array.get(itemsArray, rowIdx); } - protected Object getObjectsArrayElement(int rowNo) { + protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; - return data[rowNo]; + return data[rowIdx]; } public ClickhouseNativeColumnDescriptor getColumnDescriptor() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 1d8d6f9ffc..de4139ac17 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -9,34 +9,55 @@ public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; public static final int NULLABLE_PREFIX_LENGTH = NULLABLE_PREFIX.length(); + public static final String ARRAY_PREFIX = "Array("; + public static final int ARRAY_PREFIX_LENGTH = ARRAY_PREFIX.length(); + + public static final String LOW_CARDINALITY_PREFIX = "LowCardinality"; + public static final int LOW_CARDINALITY_PREFIX_LENGTH = LOW_CARDINALITY_PREFIX.length(); + public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String spec, String name) { + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { + String spec = unparsedSpec; + boolean nullable = false; + boolean isArray = false; + boolean isLowCardinality = false; + if (spec.startsWith(ARRAY_PREFIX)) { + spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + isArray = true; + throw new IllegalStateException("arrays are not supported"); + } + if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { + spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); + isLowCardinality = true; + throw new IllegalStateException("low cardinality columns are not supported"); + } if (spec.startsWith(NULLABLE_PREFIX)) { - String subSpec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); - return columnDescriptorForSpec(spec, subSpec, name, true); + spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); + nullable = true; } - return columnDescriptorForSpec(spec, spec, name, false); + return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, isArray, isLowCardinality); } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable) { + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, + boolean nullable, boolean isArray, boolean isLowCardinality) { if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 1, JDBCType.TINYINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, spec.startsWith("U"), isLowCardinality); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U"), isLowCardinality); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 4, JDBCType.INTEGER, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, spec.startsWith("U"), isLowCardinality); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, false, 8, JDBCType.BIGINT, nullable, spec.startsWith("U")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, spec.startsWith("U"), isLowCardinality); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec,false, bytesLength, JDBCType.VARCHAR, nullable, false); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality); } - throw new IllegalArgumentException("unknown spec: " + spec); + throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { @@ -45,22 +66,30 @@ public static ClickhouseColumn columnForSpec(String name, Map Date: Sat, 27 Feb 2021 19:06:11 +0300 Subject: [PATCH 090/176] refactored PacketReader Signed-off-by: vladimir --- .../impl/ClickhouseServerException.java | 6 +- .../impl/ColumnOrientedBlock.java | 1 - .../impl/codec/BlockStreamProfileInfo.java | 85 ++++-------- .../codec/BlockStreamProfileInfoReader.java | 52 +++++++ .../impl/codec/ClickhouseExceptionReader.java | 49 +++++++ .../impl/codec/ColumnOrientedBlockReader.java | 17 +-- .../impl/codec/DatabaseMetadataReader.java | 81 +++++++++++ .../impl/codec/InitCommandCodec.java | 130 +++--------------- .../impl/codec/PacketReader.java | 86 ++++++++---- .../impl/codec/QueryProgressInfo.java | 89 ++++-------- .../impl/codec/QueryProgressInfoReader.java | 60 ++++++++ .../impl/codec/ServerPacketType.java | 1 + .../impl/codec/SimpleQueryCommandCodec.java | 25 ++-- .../BasicClickhouseTest.java | 7 + 14 files changed, 401 insertions(+), 288 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 0561b90795..819f3fdb31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,12 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl; public class ClickhouseServerException extends RuntimeException { - private final Integer code; + private final int code; private final String name; private final String message; private final String stacktrace; - public ClickhouseServerException(Integer code, String name, String message, String stacktrace) { + public ClickhouseServerException(Integer code, String name, String message, String stacktrace, boolean hasNested) { super(message); this.code = code; this.name = name; @@ -14,7 +14,7 @@ public ClickhouseServerException(Integer code, String name, String message, Stri this.stacktrace = stacktrace; } - public Integer getCode() { + public int getCode() { return code; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 859bf6fd70..3bb756c68d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -8,7 +8,6 @@ import java.util.Map; public class ColumnOrientedBlock extends BaseBlock { - public static final ColumnOrientedBlock PARTIAL = new ColumnOrientedBlock(null, null, null, null); public ColumnOrientedBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index bae2e68a88..437cea6365 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,86 +1,47 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; - public class BlockStreamProfileInfo { - private Integer rows; - private Integer blocks; - private Integer bytes; - private Boolean appliedLimit; - private Integer rowsBeforeLimit; - private Boolean calculatedRowsBeforeLimit; - - public void readFrom(ByteBuf in) { - if (rows == null) { - rows = ByteBufUtils.readULeb128(in); - if (rows == null) { - return; - } - } - if (blocks == null) { - blocks = ByteBufUtils.readULeb128(in); - if (blocks == null) { - return; - } - } - if (bytes == null) { - bytes = ByteBufUtils.readULeb128(in); - if (bytes == null) { - return; - } - } - if (appliedLimit == null) { - if (in.readableBytes() == 0) { - return; - } - appliedLimit = in.readBoolean(); - } - if (rowsBeforeLimit == null) { - rowsBeforeLimit = ByteBufUtils.readULeb128(in); - if (rowsBeforeLimit == null) { - return; - } - } - if (calculatedRowsBeforeLimit == null) { - if (in.readableBytes() == 0) { - return; - } - calculatedRowsBeforeLimit = in.readBoolean(); - } - } - - public Integer getRows() { + private final int rows; + private final int blocks; + private final int bytes; + private final boolean appliedLimit; + private final int rowsBeforeLimit; + private final boolean calculatedRowsBeforeLimit; + + public BlockStreamProfileInfo(int rows, int blocks, int bytes, boolean appliedLimit, int rowsBeforeLimit, + boolean calculatedRowsBeforeLimit) { + this.rows = rows; + this.blocks = blocks; + this.bytes = bytes; + this.appliedLimit = appliedLimit; + this.rowsBeforeLimit = rowsBeforeLimit; + this.calculatedRowsBeforeLimit = calculatedRowsBeforeLimit; + } + + public int getRows() { return rows; } - public Integer getBlocks() { + public int getBlocks() { return blocks; } - public Integer getBytes() { + public int getBytes() { return bytes; } - public Boolean getAppliedLimit() { + public boolean getAppliedLimit() { return appliedLimit; } - public Integer getRowsBeforeLimit() { + public int getRowsBeforeLimit() { return rowsBeforeLimit; } - public Boolean getCalculatedRowsBeforeLimit() { + public boolean getCalculatedRowsBeforeLimit() { return calculatedRowsBeforeLimit; } - public boolean isComplete() { - return !isPartial(); - } - - public boolean isPartial() { - return calculatedRowsBeforeLimit == null; - } - @Override public String toString() { return "BlockStreamProfileInfo{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java new file mode 100644 index 0000000000..20ed90f8cf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -0,0 +1,52 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +public class BlockStreamProfileInfoReader { + private Integer rows; + private Integer blocks; + private Integer bytes; + private Boolean appliedLimit; + private Integer rowsBeforeLimit; + private Boolean calculatedRowsBeforeLimit; + + public BlockStreamProfileInfo readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return null; + } + } + if (blocks == null) { + blocks = ByteBufUtils.readULeb128(in); + if (blocks == null) { + return null; + } + } + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return null; + } + } + if (appliedLimit == null) { + if (in.readableBytes() == 0) { + return null; + } + appliedLimit = in.readBoolean(); + } + if (rowsBeforeLimit == null) { + rowsBeforeLimit = ByteBufUtils.readULeb128(in); + if (rowsBeforeLimit == null) { + return null; + } + } + if (calculatedRowsBeforeLimit == null) { + if (in.readableBytes() == 0) { + return null; + } + calculatedRowsBeforeLimit = in.readBoolean(); + } + return new BlockStreamProfileInfo(rows, blocks, bytes, appliedLimit, rowsBeforeLimit, calculatedRowsBeforeLimit); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java new file mode 100644 index 0000000000..8ee99cf2c2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -0,0 +1,49 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; + +public class ClickhouseExceptionReader { + private Integer code; + private String name; + private String message; + private String stacktrace; + private Boolean hasNested; + + public ClickhouseServerException readFrom(ByteBuf in) { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return null; + } + } + if (name == null) { + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return null; + } + } + if (message == null) { + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return null; + } + } + if (stacktrace == null) { + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return null; + } + } + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readByte() != 0; + } else { + return null; + } + } + //TODO smagellan: read nested exception + return new ClickhouseServerException(code, name, message, stacktrace, hasNested); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 1e5199d24f..79bac58ce4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -31,6 +31,7 @@ public class ColumnOrientedBlockReader { private ClickhouseColumn columnData; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + assert(md != null); this.md = md; this.serverRevision = md.getRevision(); } @@ -41,7 +42,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { tempTableInfo = ByteBufUtils.readPascalString(in); LOG.info("tempTableInfo: " + tempTableInfo); if (tempTableInfo == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } } @@ -54,21 +55,21 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { if (blockInfo.isPartial()) { blockInfo.readFrom(in); if (blockInfo.isPartial()) { - return ColumnOrientedBlock.PARTIAL; + return null; } } } if (nColumns == null) { nColumns = ByteBufUtils.readULeb128(in); if (nColumns == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } colWithTypes = new LinkedHashMap<>(); } if (nRows == null) { nRows = ByteBufUtils.readULeb128(in); if (nRows == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } @@ -76,13 +77,13 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { if (colName == null) { colName = ByteBufUtils.readPascalString(in); if (colName == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } if (colType == null) { colType = ByteBufUtils.readPascalString(in); if (colType == null) { - return ColumnOrientedBlock.PARTIAL; + return null; } } colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); @@ -96,7 +97,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { columnData.readColumn(in); if (columnData.isPartial()) { - return ColumnOrientedBlock.PARTIAL; + return null; } else { data.add(columnData); columnData = null; @@ -112,6 +113,6 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { LOG.info("decoded: ColumnOrientedBlock"); return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); } - return ColumnOrientedBlock.PARTIAL; + return null; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java new file mode 100644 index 0000000000..e1575ed546 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -0,0 +1,81 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +import java.time.ZoneId; +import java.util.Map; + +public class DatabaseMetadataReader { + private final String fullClientName; + private final Map properties; + + private String productName; + private Integer major; + private Integer minor; + private Integer revision; + private String timezone; + private String displayName; + private Integer patchVersion; + + public DatabaseMetadataReader(String fullClientName, Map properties) { + assert(fullClientName != null); + assert(properties != null); + this.fullClientName = fullClientName; + this.properties = properties; + } + + public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { + if (productName == null) { + productName = ByteBufUtils.readPascalString(in); + if (productName == null) { + return null; + } + } + if (major == null) { + major = ByteBufUtils.readULeb128(in); + if (major == null) { + return null; + } + } + if (minor == null) { + minor = ByteBufUtils.readULeb128(in); + if (minor == null) { + return null; + } + } + if (revision == null) { + revision = ByteBufUtils.readULeb128(in); + if (revision == null) { + return null; + } + } + if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + timezone = ByteBufUtils.readPascalString(in); + if (timezone == null) { + return null; + } + } + if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { + displayName = ByteBufUtils.readPascalString(in); + if (displayName == null) { + return null; + } + } + + if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + if (patchVersion == null) { + patchVersion = ByteBufUtils.readULeb128(in); + if (patchVersion == null) { + return null; + } + } + } else { + patchVersion = revision; + } + return new ClickhouseNativeDatabaseMetadata(productName, + String.format("%d.%d.%d", major, minor, revision), + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 749a7bc3a1..7740ddad97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -11,27 +11,10 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; -import java.time.ZoneId; - public class InitCommandCodec extends ClickhouseNativeCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); - //server-related info - private Integer packetType; - private String productName; - private Integer major; - private Integer minor; - private Integer revision; - private String timezone; - private String displayName; - private Integer patchVersion; - - //server-error related info - private Integer code; - private String name; - private String message; - private String stacktrace; - private Boolean hasNested; + private PacketReader packetReader; private String fullClientName; InitCommandCodec(InitCommand cmd) { @@ -54,107 +37,30 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBufUtils.writePascalString(cmd.username(), buf); ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); - LOG.info("sent hello packet"); + LOG.info("sent hello packet "); } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - if (packetType == null) { - packetType = ByteBufUtils.readULeb128(in); - LOG.info("packet type: " + packetType); - if (packetType == null) { - return; - } + if (packetReader == null) { + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties()); } - if (packetType == ServerPacketType.HELLO.code()) { - productName = ByteBufUtils.readPascalString(in); - if (productName == null) { - return; - } - if (major == null) { - major = ByteBufUtils.readULeb128(in); - if (major == null) { - return; - } - } - if (minor == null) { - minor = ByteBufUtils.readULeb128(in); - if (minor == null) { - return; - } - } - if (revision == null) { - revision = ByteBufUtils.readULeb128(in); - if (revision == null) { - return; - } - } - if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - timezone = ByteBufUtils.readPascalString(in); - if (timezone == null) { - return; - } - } - if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { - displayName = ByteBufUtils.readPascalString(in); - if (displayName == null) { - return; - } - } - - if (revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - patchVersion = ByteBufUtils.readULeb128(in); - if (patchVersion == null) { - return; - } + Object packet = packetReader.receivePacket(ctx, in); + if (packet != null) { + if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; + encoder.getConn().setDatabaseMetadata(md); + LOG.info("connected to server: " + md); + completionHandler.handle(CommandResponse.success(null)); + } else if (packet.getClass() == ClickhouseServerException.class) { + ClickhouseServerException exc = (ClickhouseServerException)packet; + completionHandler.handle(CommandResponse.failure(exc)); } else { - patchVersion = revision; - } - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata(productName, - String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, cmd.properties()); - encoder.getConn().setDatabaseMetadata(md); - LOG.info("connected to server: " + md); - completionHandler.handle(CommandResponse.success(null)); - } else if (packetType == ServerPacketType.EXCEPTION.code()) { - if (code == null) { - if (in.readableBytes() >= 4) { - code = in.readIntLE(); - } else { - return; - } - } - if (name == null) { - name = ByteBufUtils.readPascalString(in); - if (name == null) { - return; - } - } - if (message == null) { - message = ByteBufUtils.readPascalString(in); - if (message == null) { - return; - } - } - if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); - if (stacktrace == null) { - return; - } - } - if (hasNested == null) { - if (in.readableBytes() >= 1) { - hasNested = in.readByte() != 0; - } else { - return; - } + String msg = "unknown packet type: " + packet.getClass(); + LOG.error(msg); + completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } - //TODO smagellan: read nested exception if nested == true - completionHandler.handle(CommandResponse.failure(new ClickhouseServerException(code, name, message, stacktrace))); - } else { - String msg = "unknown packet type: " + packetType; - LOG.error(msg); - completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); + packetReader = null; } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 6cd795f3f9..4e4148ec03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -3,66 +3,100 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import java.util.Map; + public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); private final ClickhouseNativeDatabaseMetadata md; + private final String fullClientName; + private final Map properties; - private Integer packetType; + private ServerPacketType packetType; + private DatabaseMetadataReader metadataReader; + private ClickhouseExceptionReader exceptionReader; private ColumnOrientedBlockReader columnBlockReader; - private BlockStreamProfileInfo blockStreamProfileInfo; - private QueryProgressInfo queryProgress; + private BlockStreamProfileInfoReader blockStreamProfileReader; + private QueryProgressInfoReader queryProgressInfoReader; + private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md) { + public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties) { this.md = md; + this.fullClientName = fullClientName; + this.properties = properties; } - public ColumnOrientedBlock receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { if (packetType == null) { - packetType = ByteBufUtils.readULeb128(in); - if (packetType == null) { - return ColumnOrientedBlock.PARTIAL; + Integer packetTypeCode = ByteBufUtils.readULeb128(in); + if (packetTypeCode == null) { + return null; } - LOG.info("packet type: " + ServerPacketType.fromCode(packetType)); + packetType = ServerPacketType.fromCode(packetTypeCode); + LOG.info("packet type: " + packetType); } - if (packetType == ServerPacketType.DATA.code()) { + + if (packetType == ServerPacketType.HELLO) { + if (metadataReader == null) { + metadataReader = new DatabaseMetadataReader(fullClientName, properties); + } + ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + if (md != null) { + metadataReader = null; + packetType = null; + return md; + } + } else if (packetType == ServerPacketType.DATA) { if (columnBlockReader == null) { columnBlockReader = new ColumnOrientedBlockReader(md); } ColumnOrientedBlock block = columnBlockReader.readFrom(in); - if (block != ColumnOrientedBlock.PARTIAL) { + if (block != null) { columnBlockReader = null; packetType = null; } return block; - } else if (packetType == ServerPacketType.PROFILE_INFO.code()) { - if (blockStreamProfileInfo == null) { - blockStreamProfileInfo = new BlockStreamProfileInfo(); + } else if (packetType == ServerPacketType.EXCEPTION) { + if (exceptionReader == null) { + exceptionReader = new ClickhouseExceptionReader(); + } + ClickhouseServerException exc = exceptionReader.readFrom(in); + if (exc != null) { + exceptionReader = null; + packetType = null; + } + return exc; + } else if (packetType == ServerPacketType.PROFILE_INFO) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); } - blockStreamProfileInfo.readFrom(in); - if (blockStreamProfileInfo.isComplete()) { - LOG.info("decoded: BlockStreamProfileInfo: " + blockStreamProfileInfo); - blockStreamProfileInfo = null; + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: BlockStreamProfileInfo: " + profileInfo); + blockStreamProfileReader = null; packetType = null; } - } else if (packetType == ServerPacketType.PROGRESS.code()) { - if (queryProgress == null) { - queryProgress = new QueryProgressInfo(md); + return profileInfo; + } else if (packetType == ServerPacketType.PROGRESS) { + if (queryProgressInfoReader == null) { + queryProgressInfoReader = new QueryProgressInfoReader(md); } - queryProgress.readFrom(in); - if (queryProgress.isComplete()) { - LOG.info("decoded: QueryProgressInfo: " + queryProgress); - queryProgress = null; + QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); + if (queryProgressInfo != null) { + LOG.info("decoded: QueryProgressInfo: " + queryProgressInfo); + queryProgressInfoReader = null; packetType = null; } - } else if (packetType == ServerPacketType.END_OF_STREAM.code()) { + return queryProgressInfo; + } else if (packetType == ServerPacketType.END_OF_STREAM) { LOG.info("reached end of stream"); packetType = null; endOfStream = true; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index d8cbc8c637..ae4ee983ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,79 +1,38 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; - public class QueryProgressInfo { - private final int serverRevision; - - private Integer rows; - private Integer bytes; - private Integer totalRows; - private Integer writtenRows; - private Integer writtenBytes; - - public QueryProgressInfo(ClickhouseNativeDatabaseMetadata md) { - this.serverRevision = md.getRevision(); + private final int rows; + private final int bytes; + private final int totalRows; + private final int writtenRows; + private final int writtenBytes; + + public QueryProgressInfo(int rows, int bytes, int totalRows, int writtenRows, int writtenBytes) { + this.rows = rows; + this.bytes = bytes; + this.totalRows = totalRows; + + this.writtenRows = writtenRows; + this.writtenBytes = writtenBytes; } - public void readFrom(ByteBuf in) { - if (rows == null) { - rows = ByteBufUtils.readULeb128(in); - if (rows == null) { - return; - } - } - - if (bytes == null) { - bytes = ByteBufUtils.readULeb128(in); - if (bytes == null) { - return; - } - } - - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { - if (totalRows == null) { - totalRows = ByteBufUtils.readULeb128(in); - } - if (totalRows == null) { - return; - } - } + public int getRows() { + return rows; + } - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { - if (writtenRows == null) { - writtenRows = ByteBufUtils.readULeb128(in); - } - if (writtenRows == null) { - return; - } - if (writtenBytes == null) { - writtenBytes = ByteBufUtils.readULeb128(in); - if (writtenBytes == null) { - return; - } - } - } + public int getBytes() { + return bytes; } - public boolean isComplete() { - return !isPartial(); + public int getTotalRows() { + return totalRows; } - public boolean isPartial() { - return writtenBytes == null; + public int getWrittenRows() { + return writtenRows; } - @Override - public String toString() { - return "QueryProgressInfo{" + - "serverRevision=" + serverRevision + - ", rows=" + rows + - ", bytes=" + bytes + - ", totalRows=" + totalRows + - ", writtenRows=" + writtenRows + - ", writtenBytes=" + writtenBytes + - '}'; + public int getWrittenBytes() { + return writtenBytes; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java new file mode 100644 index 0000000000..5b44d9d4a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; + +public class QueryProgressInfoReader { + private final int serverRevision; + + private Integer rows; + private Integer bytes; + private Integer totalRows; + private Integer writtenRows; + private Integer writtenBytes; + + public QueryProgressInfoReader(ClickhouseNativeDatabaseMetadata md) { + this.serverRevision = md.getRevision(); + } + + public QueryProgressInfo readFrom(ByteBuf in) { + if (rows == null) { + rows = ByteBufUtils.readULeb128(in); + if (rows == null) { + return null; + } + } + + if (bytes == null) { + bytes = ByteBufUtils.readULeb128(in); + if (bytes == null) { + return null; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TOTAL_ROWS_IN_PROGRESS) { + if (totalRows == null) { + totalRows = ByteBufUtils.readULeb128(in); + } + if (totalRows == null) { + return null; + } + } + + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_WRITE_INFO) { + if (writtenRows == null) { + writtenRows = ByteBufUtils.readULeb128(in); + } + if (writtenRows == null) { + return null; + } + if (writtenBytes == null) { + writtenBytes = ByteBufUtils.readULeb128(in); + if (writtenBytes == null) { + return null; + } + } + } + return new QueryProgressInfo(rows, bytes, totalRows, writtenRows, writtenBytes); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index e51bb1fd0b..dbb872e89a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -6,6 +6,7 @@ public enum ServerPacketType { //Name, version, revision. HELLO(0), + //A block of data (compressed or not). DATA(1), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 2dcf3bdd2a..fa401edde6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -96,19 +96,22 @@ private void writeSettings(Map settings, boolean settingsAsStrin void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode: " + in.readableBytes()); if (packetReader == null) { - //TODO: reimplement PacketReader via RowResultDecoder - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData()); + //TODO: reimplement PacketReader via RowResultDecoder? + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); } - ColumnOrientedBlock block = packetReader.receivePacket(ctx, in); - if (block != null && block != ColumnOrientedBlock.PARTIAL) { - LOG.info("decoded packet: " + block + " row count " + block.numRows()); - if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + Object packet = packetReader.receivePacket(ctx, in); + if (packet != null) { + if (packet.getClass() == ColumnOrientedBlock.class) { + ColumnOrientedBlock block = (ColumnOrientedBlock)packet; + LOG.info("decoded packet: " + block + " row count " + block.numRows()); + if (dataPacketNo == 0) { + ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + } + packetReader = null; + rowResultDecoder.generateRows(block); + ++dataPacketNo; } - packetReader = null; - rowResultDecoder.generateRows(block); - ++dataPacketNo; } else if (packetReader.isEndOfStream()) { notifyOperationComplete(); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index a59cef2190..f980c62a06 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -36,6 +36,13 @@ public void baseConnectTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); } + @Test + public void loginFailureTest(TestContext ctx) { + ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions(options); + opts.setPassword("wrong-password"); + ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { From 05411b420061a2e5c1fb6f8acd4e303ecb870847 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 1 Mar 2021 00:40:46 +0300 Subject: [PATCH 091/176] added ExtendedClickhouseTest Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 2 + .../clickhousenative/impl/BlockInfo.java | 46 ++++++----- .../impl/ClickhouseNativeRow.java | 5 +- .../ClickhouseNativeSocketConnection.java | 6 +- .../impl/ClickhouseServerException.java | 2 +- .../impl/codec/ByteBufUtils.java | 1 + .../impl/codec/ClickhouseNativeEncoder.java | 4 +- .../ClickhouseNativePreparedStatement.java | 2 +- ...odec.java => CloseCursorCommandCodec.java} | 4 +- .../impl/codec/ColumnOrientedBlockReader.java | 18 +++-- .../impl/codec/ExtendedQueryCodec.java | 35 -------- .../impl/codec/ExtendedQueryCommandCodec.java | 60 ++++++++++++++ .../impl/codec/PacketReader.java | 40 +++++---- .../impl/codec/QueryProgressInfo.java | 11 +++ .../impl/codec/RowResultDecoder.java | 2 +- .../impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 81 ++++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 3 +- .../ExtendedClickhouseTest.java | 72 +++++++++++++++++ 19 files changed, 279 insertions(+), 117 deletions(-) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/{CloseCursorCodec.java => CloseCursorCommandCodec.java} (77%) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 419c8460aa..1330bb179b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -33,6 +33,8 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 607d0f0b52..79d65633fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -11,6 +11,7 @@ public class BlockInfo { private Boolean isOverflows; private Integer bucketNum; private boolean complete; + private Integer fieldNum; public BlockInfo() { isOverflows = false; @@ -40,27 +41,34 @@ public boolean isPartial() { public void readFrom(ByteBuf buf) { while (isPartial()) { - Integer fieldNum = ByteBufUtils.readULeb128(buf); - if (fieldNum != null) { - LOG.info("fieldNum: " + fieldNum); - if (fieldNum == 0) { - complete = true; + if (fieldNum == null) { + fieldNum = ByteBufUtils.readULeb128(buf); + if (fieldNum == null) { return; } - if (fieldNum == 1) { - if (buf.readableBytes() >= 1) { - isOverflows = buf.readByte() != 0; - LOG.info("isOverflows: " + isOverflows); - } else { - return; - } - } else if (fieldNum == 2) { - if (buf.readableBytes() >= 4) { - bucketNum = buf.readInt(); - LOG.info("bucketNum: " + bucketNum); - } else { - return; - } + } + + LOG.info("fieldNum: " + fieldNum); + if (fieldNum == 0) { + complete = true; + return; + } + if (fieldNum == 1) { + if (buf.readableBytes() >= 1) { + isOverflows = buf.readBoolean(); + fieldNum = null; + LOG.info("isOverflows: " + isOverflows); + } else { + return; + } + } else if (fieldNum == 2) { + int readable = buf.readableBytes(); + if (readable >= 4) { + bucketNum = buf.readIntLE(); + fieldNum = null; + LOG.info("bucketNum: " + bucketNum); + } else { + return; } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index c2d668cff8..526445601c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -1,10 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.List; public class ClickhouseNativeRow implements Row { private final int rowNo; @@ -31,7 +33,8 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { - return block.getData().get(columnIndex).getElement(rowNo); + List data = block.getData(); + return data.get(columnIndex).getElement(rowNo); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 1bf3cf53cf..06e8c1f0a2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -59,9 +59,11 @@ public void releasePendingCursor(String cursorId) { this.pendingCursorId = null; } - public void throwExceptionIfBusy() { + public void throwExceptionIfBusy(String callerCursorId) { if (pendingCursorId != null) { - throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + if (!Objects.equals(pendingCursorId, callerCursorId)) { + throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 819f3fdb31..0b497d830b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -27,7 +27,7 @@ public String getMessage() { return message; } - public String getStacktrace() { + public String getServerStacktrace() { return stacktrace; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index e7d9fe0474..19e008c788 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 9809629750..57251dd31d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -64,9 +64,9 @@ void write(CommandBase cmd) { } else if (cmd instanceof PrepareStatementCommand) { return new PrepareStatementCodec((PrepareStatementCommand) cmd); } else if (cmd instanceof ExtendedQueryCommand) { - return new ExtendedQueryCodec<>((ExtendedQueryCommand)cmd, conn); + return new ExtendedQueryCommandCodec<>((ExtendedQueryCommand)cmd, conn); } else if (cmd instanceof CloseCursorCommand) { - return new CloseCursorCodec((CloseCursorCommand)cmd, conn); + return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } throw new UnsupportedOperationException(cmd.getClass().getName()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index ce076217f4..fedc263648 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -29,7 +29,7 @@ public RowDesc rowDesc() { @Override public String sql() { - return null; + return sql; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index ab9a75e59d..754d940a41 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -6,10 +6,10 @@ import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseCursorCodec extends ClickhouseNativeCommandCodec{ +public class CloseCursorCommandCodec extends ClickhouseNativeCommandCodec{ private final ClickhouseNativeSocketConnection conn; - protected CloseCursorCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { super(cmd); this.conn = conn; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 79bac58ce4..863439cbb4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -29,6 +29,7 @@ public class ColumnOrientedBlockReader { private String colName; private String colType; private ClickhouseColumn columnData; + private ClickhouseNativeColumnDescriptor columnDescriptor; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { assert(md != null); @@ -73,7 +74,7 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } - if (colWithTypes.size() < nColumns) { + while (colWithTypes.size() < nColumns) { if (colName == null) { colName = ByteBufUtils.readPascalString(in); if (colName == null) { @@ -86,16 +87,20 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { return null; } } - colWithTypes.put(colName, ClickhouseColumns.columnDescriptorForSpec(colType, colName)); + if (columnDescriptor == null) { + columnDescriptor = ClickhouseColumns.columnDescriptorForSpec(colType, colName); + } if (nRows > 0) { if (data == null) { data = new ArrayList<>(nColumns); } if (columnData == null) { + columnData = ClickhouseColumns.columnForSpec(colName, columnDescriptor, nRows); + } + if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); - columnData = ClickhouseColumns.columnForSpec(colName, colWithTypes, nRows); - columnData.readColumn(in); + columnData.readColumn(in); if (columnData.isPartial()) { return null; } else { @@ -104,13 +109,12 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } } + colWithTypes.put(colName, columnDescriptor); + columnDescriptor = null; colName = null; colType = null; } if (colWithTypes.size() == nColumns) { - LOG.info("nColumns: " + nColumns + "; nRows: " + nRows); - LOG.info("columns: " + colWithTypes); - LOG.info("decoded: ColumnOrientedBlock"); return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); } return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java deleted file mode 100644 index b7224aa581..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCodec.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.sqlclient.impl.command.CommandResponse; -import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; - -import java.util.Collections; - -public class ExtendedQueryCodec extends ClickhouseNativeQueryCommandBaseCodec> { - private final ClickhouseNativeSocketConnection conn; - - public ExtendedQueryCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd); - this.conn = conn; - } - - @Override - void encode(ClickhouseNativeEncoder encoder) { - conn.throwExceptionIfBusy(); - conn.setPendingCursorId(cmd.cursorId()); - super.encode(encoder); - ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(Collections.emptyList()); - RowResultDecoder rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); - Throwable t = rowResultDecoder.complete(); - cmd.resultHandler().handleResult(0, 0, rowDesc, rowResultDecoder.result(), t); - completionHandler.handle(CommandResponse.success(false)); - } - - @Override - void decode(ChannelHandlerContext ctx, ByteBuf in) { - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java new file mode 100644 index 0000000000..7ec837c11a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.OPTION_MAX_BLOCK_SIZE; + +public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { + private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); + + public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd, conn); + } + + @Override + void encode(ClickhouseNativeEncoder encoder) { + String ourCursorId = ecmd().cursorId(); + if (conn.getPendingCursorId() == null) { + conn.setPendingCursorId(ourCursorId); + } else { + conn.throwExceptionIfBusy(ourCursorId); + } + super.encode(encoder); + } + + @Override + protected Map settings() { + String fetchSize = Integer.toString(ecmd().fetch()); + Map defaultSettings = super.settings(); + String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); + if (!Objects.equals(defaultFetchSize, fetchSize)) { + if (LOG.isWarnEnabled() && defaultFetchSize != null) { + LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + } + defaultSettings = new HashMap<>(defaultSettings); + defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); + } + return defaultSettings; + } + + @Override + protected void checkIfBusy() { + conn.throwExceptionIfBusy(ecmd().cursorId()); + } + + @Override + protected boolean isSuspended() { + return ecmd().isSuspended(); + } + + private ExtendedQueryCommand ecmd() { + return (ExtendedQueryCommand)cmd; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 4e4148ec03..75fa5aeae0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; @@ -40,8 +41,12 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { if (packetTypeCode == null) { return null; } - packetType = ServerPacketType.fromCode(packetTypeCode); - LOG.info("packet type: " + packetType); + try { + packetType = ServerPacketType.fromCode(packetTypeCode); + LOG.info("packet type: " + packetType); + } catch (IllegalArgumentException ex) { + LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in), ex); + } } if (packetType == ServerPacketType.HELLO) { @@ -50,6 +55,7 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { + LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); metadataReader = null; packetType = null; return md; @@ -60,6 +66,7 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ColumnOrientedBlock block = columnBlockReader.readFrom(in); if (block != null) { + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; } @@ -70,36 +77,39 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { + LOG.info("decoded: EXCEPTION/ClickhouseServerException"); exceptionReader = null; packetType = null; } return exc; - } else if (packetType == ServerPacketType.PROFILE_INFO) { - if (blockStreamProfileReader == null) { - blockStreamProfileReader = new BlockStreamProfileInfoReader(); - } - BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); - if (profileInfo != null) { - LOG.info("decoded: BlockStreamProfileInfo: " + profileInfo); - blockStreamProfileReader = null; - packetType = null; - } - return profileInfo; } else if (packetType == ServerPacketType.PROGRESS) { if (queryProgressInfoReader == null) { queryProgressInfoReader = new QueryProgressInfoReader(md); } QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); if (queryProgressInfo != null) { - LOG.info("decoded: QueryProgressInfo: " + queryProgressInfo); + LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); queryProgressInfoReader = null; packetType = null; } return queryProgressInfo; } else if (packetType == ServerPacketType.END_OF_STREAM) { - LOG.info("reached end of stream"); + LOG.info("decoded: END_OF_STREAM"); packetType = null; endOfStream = true; + } else if (packetType == ServerPacketType.PROFILE_INFO) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); + } + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + blockStreamProfileReader = null; + packetType = null; + } + return profileInfo; + } else { + throw new IllegalStateException("unknown packet type: " + packetType); } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index ae4ee983ce..2f12160f7d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -35,4 +35,15 @@ public int getWrittenRows() { public int getWrittenBytes() { return writtenBytes; } + + @Override + public String toString() { + return "QueryProgressInfo{" + + "rows=" + rows + + ", bytes=" + bytes + + ", totalRows=" + totalRows + + ", writtenRows=" + writtenRows + + ", writtenBytes=" + writtenBytes + + '}'; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index fcc4ef690a..f35260f1e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -25,7 +25,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - LOG.info("generating row"); + LOG.info("generating row " + (rowNo + 1)); ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); ++rowNo; return row; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index dbb872e89a..385f857556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -59,7 +59,7 @@ public String toString() { public static ServerPacketType fromCode(int code) { ServerPacketType ret = CODE_INDEX.get(code); if (ret == null) { - throw new IllegalArgumentException("unknown code: " + code); + throw new IllegalArgumentException("unknown code: " + code + "(" + Integer.toHexString(code) + ")"); } return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index fa401edde6..1bc0c680e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -8,7 +8,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.command.CommandResponse; -import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import io.vertx.sqlclient.impl.command.QueryCommandBase; import java.util.ArrayList; import java.util.Collection; @@ -16,26 +16,28 @@ import java.util.List; import java.util.Map; -public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ +public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - private final ClickhouseNativeSocketConnection conn; + protected final ClickhouseNativeSocketConnection conn; - protected SimpleQueryCommandCodec(SimpleQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { super(cmd); this.conn = conn; } @Override void encode(ClickhouseNativeEncoder encoder) { - conn.throwExceptionIfBusy(); + checkIfBusy(); super.encode(encoder); - ByteBuf buf = allocateBuffer(); - sendQuery(cmd.sql(), buf); - sendExternalTables(buf, Collections.emptyList()); - encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + if (!isSuspended()) { + ByteBuf buf = allocateBuffer(); + sendQuery(cmd.sql(), buf); + sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } } private void sendExternalTables(ByteBuf buf, Collection blocks) { @@ -66,7 +68,7 @@ private void sendQuery(String query, ByteBuf buf) { clInfo.serializeTo(buf); } boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; - writeSettings(Collections.emptyMap(), settingsAsStrings, true, buf); + writeSettings(settings(), settingsAsStrings, true, buf); if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { ByteBufUtils.writePascalString("", buf); } @@ -75,13 +77,26 @@ private void sendQuery(String query, ByteBuf buf) { ByteBufUtils.writePascalString(query, buf); } - private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + protected Map settings() { + return conn.getDatabaseMetaData().getProperties(); + } + + protected boolean isSuspended() { + return false; + } + + protected void checkIfBusy() { + conn.throwExceptionIfBusy(null); + } + + private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { if (settingsAsStrings) { - for (Map.Entry entry : settings.entrySet()) { + for (Map.Entry entry : settings.entrySet()) { if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + LOG.info("writing query setting: " + entry); ByteBufUtils.writePascalString(entry.getKey(), buf); buf.writeBoolean(settingsAreImportant); - ByteBufUtils.writePascalString(entry.getValue().toString(), buf); + ByteBufUtils.writePascalString(entry.getValue(), buf); } } } else { @@ -94,26 +109,33 @@ private void writeSettings(Map settings, boolean settingsAsStrin @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - LOG.info("decode: " + in.readableBytes()); + LOG.info("decode, readable bytes: " + in.readableBytes()); if (packetReader == null) { - //TODO: reimplement PacketReader via RowResultDecoder? packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); } Object packet = packetReader.receivePacket(ctx, in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; - LOG.info("decoded packet: " + block + " row count " + block.numRows()); + LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); } packetReader = null; rowResultDecoder.generateRows(block); + if (block.numRows() > 0) { + notifyOperationUpdate(true); + } ++dataPacketNo; + } else { + String msg = "unknown packet type: " + packet.getClass(); + LOG.error(msg); + //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { - notifyOperationComplete(); + notifyOperationUpdate(false); + packetReader = null; } } @@ -124,21 +146,24 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { return new ClickhouseNativeRowDesc(columnNames, columnTypes); } - private void notifyOperationComplete() { - Throwable failure = rowResultDecoder.complete(); - if (failure != null) { - failure = new RuntimeException(failure); - } - T result = rowResultDecoder.result(); - int size = rowResultDecoder.size(); - rowResultDecoder.reset(); + private void notifyOperationUpdate(boolean hasMoreResults) { + Throwable failure = null; + if (rowResultDecoder != null) { + LOG.info("notifying operation update; has more result = " + hasMoreResults); + failure = rowResultDecoder.complete(); + if (failure != null) { + failure = new RuntimeException(failure); + } + T result = rowResultDecoder.result(); + int size = rowResultDecoder.size(); + rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); - rowResultDecoder.reset(); + cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + } CommandResponse response; if (failure == null) { - response = CommandResponse.success(true); + response = CommandResponse.success(hasMoreResults); } else { response = CommandResponse.failure(failure); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index de4139ac17..b0e3231b49 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -60,8 +60,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } - public static ClickhouseColumn columnForSpec(String name, Map parsedTypes, int nRows) { - ClickhouseNativeColumnDescriptor descr = parsedTypes.get(name); + public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java new file mode 100644 index 0000000000..3dad48df58 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -0,0 +1,72 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.Async; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowStream; +import io.vertx.sqlclient.impl.ArrayTuple; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.concurrent.atomic.LongAdder; + +@RunWith(VertxUnitRunner.class) +public class ExtendedClickhouseTest { + private static final Logger LOG = LoggerFactory.getLogger(ExtendedClickhouseTest.class); + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn + .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") + .execute(ctx.asyncAssertSuccess()); + })); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void extendedQueryTest(TestContext ctx) { + Async async = ctx.async(); + LongAdder adder = new LongAdder(); + final long limit = 55; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn + .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { + RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); + stream.exceptionHandler(err -> { + LOG.error(err.getMessage()); + }); + stream.endHandler(v -> { + LOG.info("got End of stream"); + ctx.assertEquals(limit, adder.sum()); + async.complete(); + }); + stream.handler(row -> { + adder.increment(); + LOG.info("name: " + row.getString("name") + "; value: " + row.getInteger("value")); + }); + })); + })); + } +} From 27fdd76275e386e1dd928a274115e9545b7a127d Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 1 Mar 2021 21:47:59 +0300 Subject: [PATCH 092/176] added testIntegerRanges test Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 22 ++++++++- .../impl/codec/ExtendedQueryCommandCodec.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 9 +++- .../impl/codec/columns/ClickhouseColumns.java | 26 +++++----- .../impl/codec/columns/UInt64Column.java | 19 ++++++-- .../BasicClickhouseTest.java | 48 +++++++++++++++++++ .../ExtendedClickhouseTest.java | 2 +- 7 files changed, 106 insertions(+), 22 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 56356eaebf..2d6134b9c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -2,6 +2,7 @@ import io.vertx.sqlclient.desc.ColumnDescriptor; +import java.math.BigInteger; import java.sql.JDBCType; public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { @@ -16,11 +17,13 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final boolean nullable; private final boolean unsigned; private final boolean lowCardinality; + private final BigInteger minValue; + private final BigInteger maxValue; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, - boolean lowCardinality) { + boolean lowCardinality, Number minValue, Number maxValue) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -30,6 +33,15 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.nullable = nullable; this.unsigned = unsigned; this.lowCardinality = lowCardinality; + this.minValue = bi(minValue); + this.maxValue = bi(maxValue); + } + + private BigInteger bi(Number src) { + if (src instanceof Byte || src instanceof Integer || src instanceof Long) { + return BigInteger.valueOf(src.longValue()); + } + return (BigInteger) src; } @Override @@ -67,6 +79,14 @@ public boolean isLowCardinality() { return lowCardinality; } + public BigInteger getMinValue() { + return minValue; + } + + public BigInteger getMaxValue() { + return maxValue; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 7ec837c11a..eab456fc70 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -15,7 +15,7 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn); + super(cmd, conn, true); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 1bc0c680e2..6a400fd96d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -18,14 +18,19 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); + private final boolean requireUpdates; private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; protected final ClickhouseNativeSocketConnection conn; protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { + this(cmd, conn, false); + } + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdates) { super(cmd); this.conn = conn; + this.requireUpdates = requireUpdates; } @Override @@ -124,7 +129,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } packetReader = null; rowResultDecoder.generateRows(block); - if (block.numRows() > 0) { + if (requireUpdates && block.numRows() > 0) { notifyOperationUpdate(true); } ++dataPacketNo; @@ -149,7 +154,7 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { private void notifyOperationUpdate(boolean hasMoreResults) { Throwable failure = null; if (rowResultDecoder != null) { - LOG.info("notifying operation update; has more result = " + hasMoreResults); + LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); if (failure != null) { failure = new RuntimeException(failure); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b0e3231b49..b94590eb7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -2,8 +2,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import java.math.BigInteger; import java.sql.JDBCType; -import java.util.Map; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -42,20 +42,27 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { + boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, spec.startsWith("U"), isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, + nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, + nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -86,9 +93,4 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor descr = columnDescriptorForSpec("Array(Nullable(UInt32))", "col1"); - System.err.println(descr); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 8e6c01894c..9bf4bf1c82 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -28,12 +28,21 @@ protected Object readItems(ByteBuf in) { protected Object getElementInternal(int rowIdx) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { - BigInteger ret = BigInteger.valueOf(element); - if (element < 0) { - ret = ret.negate(); - } - return ret; + return unsignedBi(element); } return element; } + + private static BigInteger unsignedBi(long l) { + return new BigInteger(1, new byte[] { + (byte) (l >>> 56 & 0xFF), + (byte) (l >>> 48 & 0xFF), + (byte) (l >>> 40 & 0xFF), + (byte) (l >>> 32 & 0xFF), + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index f980c62a06..4a4a9d0070 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -2,9 +2,14 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; import io.vertx.sqlclient.SqlClient; import org.junit.After; import org.junit.Before; @@ -12,8 +17,15 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + @RunWith(VertxUnitRunner.class) public class BasicClickhouseTest { + private static final Logger LOG = LoggerFactory.getLogger(BasicClickhouseTest.class); + @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -43,6 +55,42 @@ public void loginFailureTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); } + @Test + public void testIntegerRanges(TestContext ctx) { + List types = Stream.of("Int8", "Int16", "Int32", "Int64") + .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + .collect(Collectors.toList()); + List typeNames = types.stream() + .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + LOG.info("integer columns: " + typeNames); + Iterator typesIter = types.iterator(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + scheduleQuery(ctx, typesIter, conn); + })); + } + + private void scheduleQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + if (typeIterator.hasNext()) { + ClickhouseNativeColumnDescriptor descr = typeIterator.next(); + String nativeType = descr.getUnparsedNativeType(); + String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + descr.getMinValue(), nativeType, descr.getMaxValue(), nativeType); + LOG.info("running query: " + query); + conn.query(query).execute( + ctx.asyncAssertSuccess(res -> { + ctx.assertEquals(1, res.size()); + Row row = res.iterator().next(); + ctx.assertEquals(descr.getMinValue(), row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); + ctx.assertEquals(descr.getMaxValue(), row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); + scheduleQuery(ctx, typeIterator, conn); + }) + ); + } else { + conn.close(); + } + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 3dad48df58..a026c70717 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -55,7 +55,7 @@ public void extendedQueryTest(TestContext ctx) { .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); stream.exceptionHandler(err -> { - LOG.error(err.getMessage()); + LOG.error("exceptionHandler: ", err); }); stream.endHandler(v -> { LOG.info("got End of stream"); From c46f3e082fe2824710d40e589c4f8aa2ce88c8f6 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 3 Mar 2021 00:54:41 +0300 Subject: [PATCH 093/176] added Int128 type Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 +++++-- .../impl/codec/columns/UInt128Column.java | 42 +++++++++++++++++++ .../BasicClickhouseTest.java | 27 +++++++----- 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b94590eb7c..fb899fa23d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -54,7 +54,11 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, - unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); + unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), + unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); + } if (spec.equals("Int128")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, JDBCType.BIGINT, nullable, false, isLowCardinality, + new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); @@ -81,8 +85,12 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn return new UInt16Column(nRows, descr); } else if (jdbcType == JDBCType.INTEGER) { return new UInt32Column(nRows, descr); - } else if (jdbcType == JDBCType.BIGINT && descr.getElementSize() == 8) { - return new UInt64Column(nRows, descr); + } else if (jdbcType == JDBCType.BIGINT) { + if (descr.getElementSize() == 8) { + return new UInt64Column(nRows, descr); + } else if (descr.getElementSize() == 16) { + return new UInt128Column(nRows, descr); + } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { return new StringColumn(nRows, descr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java new file mode 100644 index 0000000000..cc567f2ad5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigInteger; + +public class UInt128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + + protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ByteBuf in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigInteger[] data = new BigInteger[nRows]; + for (int i = 0; i < nRows; ++i) { + byte[] tmp = new byte[ELEMENT_SIZE]; + in.readBytes(tmp); + data[i] = new BigInteger(reverse(tmp)); + } + return data; + } + return null; + } + + private byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } + + @Override + protected Object getElementInternal(int rowIdx) { + return ((BigInteger[]) this.itemsArray)[rowIdx]; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 4a4a9d0070..7862f44e7a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -17,6 +17,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.math.BigInteger; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -57,33 +58,39 @@ public void loginFailureTest(TestContext ctx) { @Test public void testIntegerRanges(TestContext ctx) { - List types = Stream.of("Int8", "Int16", "Int32", "Int64") - .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) - .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + //TODO: LowCardinality + List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") + .flatMap(el -> "Int128".equals(el) + ? Stream.of(el, "Nullable(" + el + ")") + : Stream.of(el, "U" + el, "Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); LOG.info("integer columns: " + typeNames); Iterator typesIter = types.iterator(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - scheduleQuery(ctx, typesIter, conn); + scheduleIntTypeQuery(ctx, typesIter, conn); })); } - private void scheduleQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { if (typeIterator.hasNext()) { ClickhouseNativeColumnDescriptor descr = typeIterator.next(); String nativeType = descr.getUnparsedNativeType(); - String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - descr.getMinValue(), nativeType, descr.getMaxValue(), nativeType); + //looks like Nullable(UInt128) is broken for min/max at the moment, hence add/subtract + BigInteger minValue = descr.getMinValue().add(BigInteger.ONE); + BigInteger maxValue = descr.getMaxValue().subtract(BigInteger.ONE); + String query = String.format("SELECT CAST('%s', '%s') as min_val, CAST('%s', '%s') as max_val", + minValue, nativeType, maxValue, nativeType); LOG.info("running query: " + query); conn.query(query).execute( ctx.asyncAssertSuccess(res -> { ctx.assertEquals(1, res.size()); Row row = res.iterator().next(); - ctx.assertEquals(descr.getMinValue(), row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); - ctx.assertEquals(descr.getMaxValue(), row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); - scheduleQuery(ctx, typeIterator, conn); + ctx.assertEquals(minValue, row.getBigDecimal("min_val").toBigIntegerExact(), nativeType + " type min failure"); + ctx.assertEquals(maxValue, row.getBigDecimal("max_val").toBigIntegerExact(), nativeType + " type max failure"); + scheduleIntTypeQuery(ctx, typeIterator, conn); }) ); } else { From 91a0371884b2d9530b00a7efb55bfb11ce8625f5 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 7 Mar 2021 15:13:57 +0300 Subject: [PATCH 094/176] basic lz4 compression/decompression [WIP] Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 18 ++ .../clickhousenative/ClickhouseConstants.java | 7 +- .../clickhousenative/impl/BlockInfo.java | 28 +-- .../ClickhouseNativeConnectionFactory.java | 21 ++- .../ClickhouseNativeSocketConnection.java | 19 ++- .../impl/RowOrientedBlock.java | 11 +- .../impl/codec/ByteBufUtils.java | 1 - .../impl/codec/ClickhouseStreamDataSink.java | 10 ++ .../codec/ClickhouseStreamDataSource.java | 18 ++ .../impl/codec/ClientInfo.java | 1 - .../impl/codec/ColumnOrientedBlockReader.java | 27 ++- .../impl/codec/InitCommandCodec.java | 4 +- .../codec/Lz4ClickhouseStreamDataSink.java | 76 +++++++++ .../codec/Lz4ClickhouseStreamDataSource.java | 159 ++++++++++++++++++ .../impl/codec/PacketReader.java | 35 +++- .../codec/RawClickhouseStreamDataSink.java | 26 +++ .../codec/RawClickhouseStreamDataSource.java | 66 ++++++++ .../impl/codec/RowResultDecoder.java | 1 - .../impl/codec/SimpleQueryCommandCodec.java | 24 ++- .../clickhousenative/impl/codec/Utils.java | 11 ++ .../impl/codec/columns/ClickhouseColumn.java | 17 +- .../impl/codec/columns/FixedStringColumn.java | 4 +- .../impl/codec/columns/StringColumn.java | 6 +- .../impl/codec/columns/UInt128Column.java | 4 +- .../impl/codec/columns/UInt16Column.java | 4 +- .../impl/codec/columns/UInt32Column.java | 4 +- .../impl/codec/columns/UInt64Column.java | 4 +- .../impl/codec/columns/UInt8Column.java | 4 +- .../ExtendedClickhouseTest.java | 8 +- 29 files changed, 536 insertions(+), 82 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 167a843653..fec1a8e5b4 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -61,6 +61,12 @@ vertx-sql-client + + org.lz4 + lz4-java + 1.7.1 + + io.vertx vertx-sql-client @@ -68,6 +74,18 @@ test + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.12.2 + + org.testcontainers clickhouse diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 1330bb179b..958faa3cc8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -32,9 +32,14 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_ADDRESS = "initial_address"; public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; + public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final short COMPRESSION_METHOD_LZ4 = 0x82; + public static final short COMPRESSION_METHOD_ZSTD = 0x90; + public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( - OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME))); + OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 79d65633fb..c626d899e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -23,12 +23,12 @@ public BlockInfo(Boolean isOverflows, Integer bucketNum) { this.bucketNum = bucketNum; } - public void serializeTo(ByteBuf buf) { - ByteBufUtils.writeULeb128(1, buf); - buf.writeByte(isOverflows ? 1 : 0); - ByteBufUtils.writeULeb128(2, buf); - buf.writeIntLE(bucketNum); - ByteBufUtils.writeULeb128(0, buf); + public void serializeTo(ClickhouseStreamDataSink sink) { + sink.writeULeb128(1); + sink.writeByte(isOverflows ? 1 : 0); + sink.writeULeb128(2); + sink.writeIntLE(bucketNum); + sink.writeULeb128(0); } public boolean isComplete() { @@ -39,10 +39,10 @@ public boolean isPartial() { return !complete; } - public void readFrom(ByteBuf buf) { + public void readFrom(ClickhouseStreamDataSource in) { while (isPartial()) { if (fieldNum == null) { - fieldNum = ByteBufUtils.readULeb128(buf); + fieldNum = in.readULeb128(); if (fieldNum == null) { return; } @@ -54,17 +54,17 @@ public void readFrom(ByteBuf buf) { return; } if (fieldNum == 1) { - if (buf.readableBytes() >= 1) { - isOverflows = buf.readBoolean(); + if (in.readableBytes() >= 1) { + isOverflows = in.readBoolean(); fieldNum = null; LOG.info("isOverflows: " + isOverflows); } else { return; } } else if (fieldNum == 2) { - int readable = buf.readableBytes(); + int readable = in.readableBytes(); if (readable >= 4) { - bucketNum = buf.readIntLE(); + bucketNum = in.readIntLE(); fieldNum = null; LOG.info("bucketNum: " + bucketNum); } else { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 48f4135fc7..921ffae46c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -11,12 +12,30 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; +import net.jpountz.lz4.LZ4Factory; public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { private int pipeliningLimit; + private final LZ4Factory lz4Factory; ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { super(context, options); + this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); + } + + private LZ4Factory lz4FactoryForName(String name) { + if ("lz4_native".equals(name)) { + return LZ4Factory.nativeInstance(); + } else if ("lz4_fastest".equals(name)) { + return LZ4Factory.fastestInstance(); + } else if ("lz4_fastest_java".equals(name)) { + return LZ4Factory.fastestJavaInstance(); + } else if ("lz4_safe".equals(name)) { + return LZ4Factory.safeInstance(); + } else if ("lz4_unsafe".equals(name)) { + return LZ4Factory.unsafeInstance(); + } + return null; } @Override @@ -54,6 +73,6 @@ private Future doConnect() { private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, pipeliningLimit, context); + preparedStatementCacheSqlFilter, pipeliningLimit, context, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 06e8c1f0a2..0d771cd245 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -8,6 +8,7 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; import io.vertx.sqlclient.impl.command.InitCommand; +import net.jpountz.lz4.LZ4Factory; import java.util.Map; import java.util.Objects; @@ -17,14 +18,18 @@ public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; private String pendingCursorId; + private final LZ4Factory lz4Factory; + public ClickhouseNativeSocketConnection(NetSocketInternal socket, - boolean cachePreparedStatements, - int preparedStatementCacheSize, - Predicate preparedStatementCacheSqlFilter, - int pipeliningLimit, - EventLoopContext context) { + boolean cachePreparedStatements, + int preparedStatementCacheSize, + Predicate preparedStatementCacheSqlFilter, + int pipeliningLimit, + EventLoopContext context, + LZ4Factory lz4Factory) { super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + this.lz4Factory = lz4Factory; } @Override @@ -71,4 +76,8 @@ public void throwExceptionIfBusy(String callerCursorId) { public ClickhouseNativeDatabaseMetadata getDatabaseMetaData() { return md; } + + public LZ4Factory lz4Factory() { + return lz4Factory; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 2c15f7f8bc..7658fe1676 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,9 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import java.util.List; @@ -16,14 +15,14 @@ public RowOrientedBlock(Map columnsWit super(columnsWithTypes, data, blockInfo, md); } - public void serializeTo(ByteBuf buf) { + public void serializeTo(ClickhouseStreamDataSink sink) { if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { - getBlockInfo().serializeTo(buf); + getBlockInfo().serializeTo(sink); } //n_columns - ByteBufUtils.writeULeb128(0, buf); + sink.writeULeb128(0); //n_rows - ByteBufUtils.writeULeb128(0, buf); + sink.writeULeb128(0); //TODO smagellan } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 19e008c788..e7d9fe0474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,7 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java new file mode 100644 index 0000000000..846b62bd76 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -0,0 +1,10 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public interface ClickhouseStreamDataSink { + void writeULeb128(int value); + void writeByte(int value); + void writeIntLE(int value); + + default void finish() { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java new file mode 100644 index 0000000000..a9ae8ed5d8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -0,0 +1,18 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; + +public interface ClickhouseStreamDataSource { + void moreData(ByteBuf buf, ByteBufAllocator ctx); + int readableBytes(); + String readPascalString(); + Integer readULeb128(); + Boolean readBoolean(); + Integer readIntLE(); + ByteBuf readSlice(int nBytes); + void readBytes(byte[] dst); + byte readByte(); + long readLongLE(); + short readShortLE(); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 365199b154..807cac542c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -35,7 +35,6 @@ public void serializeTo(ByteBuf buf) { //interface: TCP buf.writeByte(1); ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); - //TODO smagellan: fix client_hostname resolution ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); ByteBufUtils.writePascalString(meta.getFullClientName(), buf); ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 863439cbb4..cfdc92e00e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,17 +1,18 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.Pair; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; public class ColumnOrientedBlockReader { private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); @@ -37,16 +38,8 @@ public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { this.serverRevision = md.getRevision(); } - public ColumnOrientedBlock readFrom(ByteBuf in) { - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); - if (tempTableInfo == null) { - return null; - } - } - } + public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { + //BlockInputStream.read if (blockInfo == null) { @@ -61,14 +54,14 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { } } if (nColumns == null) { - nColumns = ByteBufUtils.readULeb128(in); + nColumns = in.readULeb128(); if (nColumns == null) { return null; } colWithTypes = new LinkedHashMap<>(); } if (nRows == null) { - nRows = ByteBufUtils.readULeb128(in); + nRows = in.readULeb128(); if (nRows == null) { return null; } @@ -76,13 +69,13 @@ public ColumnOrientedBlock readFrom(ByteBuf in) { while (colWithTypes.size() < nColumns) { if (colName == null) { - colName = ByteBufUtils.readPascalString(in); + colName = in.readPascalString(); if (colName == null) { return null; } } if (colType == null) { - colType = ByteBufUtils.readPascalString(in); + colType = in.readPascalString(); if (colType == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 7740ddad97..32f120d315 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -43,9 +43,9 @@ void encode(ClickhouseNativeEncoder encoder) { @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties()); + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties(), encoder.getConn().lz4Factory()); } - Object packet = packetReader.receivePacket(ctx, in); + Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java new file mode 100644 index 0000000000..b5116113b7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -0,0 +1,76 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Compressor; +import net.jpountz.lz4.LZ4Factory; +import ru.yandex.clickhouse.util.ClickHouseCityHash; + +import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.COMPRESSION_METHOD_LZ4; + +class Lz4ClickhouseStreamDataSink implements ClickhouseStreamDataSink { + private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSink.class); + + public static final int HEADER_SIZE = 1 + 4 + 4; + + private final ByteBuf sink; + private final LZ4Factory lz4Factory; + private final ByteBuf tmpStorage; + private final ChannelHandlerContext ctx; + + Lz4ClickhouseStreamDataSink(ByteBuf sink, LZ4Factory lz4Factory, ChannelHandlerContext ctx) { + this.sink = sink; + this.tmpStorage = ctx.alloc().heapBuffer(); + this.lz4Factory = lz4Factory; + this.ctx = ctx; + } + + @Override + public void writeULeb128(int value) { + ByteBufUtils.writeULeb128(value, tmpStorage); + } + + @Override + public void writeByte(int value) { + tmpStorage.writeByte(value); + } + + @Override + public void writeIntLE(int value) { + tmpStorage.writeIntLE(value); + } + + @Override + public void finish() { + ByteBuf compressed = null; + try { + compressed = getCompressedBuffer(tmpStorage); + byte[] compressedBytes = compressed.array(); + long[] cityHash = ClickHouseCityHash.cityHash128(compressedBytes, 0, compressed.readableBytes()); + sink.writeLongLE(cityHash[0]); + sink.writeLongLE(cityHash[1]); + sink.writeBytes(compressed); + } finally { + tmpStorage.release(); + if (compressed != null) { + compressed.release(); + } + } + } + + private ByteBuf getCompressedBuffer(ByteBuf from) { + LZ4Compressor compressor = lz4Factory.fastCompressor(); + int uncompressedLen = from.readableBytes(); + int maxCompressedLen = compressor.maxCompressedLength(uncompressedLen); + ByteBuf tmp = ctx.alloc().heapBuffer(maxCompressedLen + HEADER_SIZE); + tmp.writeByte(COMPRESSION_METHOD_LZ4); + int compressedLen = compressor.compress(from.array(), 0, uncompressedLen, tmp.array(), HEADER_SIZE); + int compressedBlockLen = HEADER_SIZE + compressedLen; + tmp.writeIntLE(compressedBlockLen); + tmp.writeIntLE(uncompressedLen); + tmp.writerIndex(compressedBlockLen); + return tmp; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java new file mode 100644 index 0000000000..c07825e22c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -0,0 +1,159 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Factory; +import net.jpountz.lz4.LZ4FastDecompressor; +import ru.yandex.clickhouse.util.ClickHouseCityHash; + +import java.util.Arrays; + +public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSource.class); + + //cityhash size + compression method byte + sizeWithHeader + decompressed size + public static final int MIN_BLOCK_PREFIX = 16 + 1 + 4 + 4; + + private final LZ4Factory lz4Factory; + private final ByteBuf decompressedData; + private long[] serverCityHash; + private Long sizeWithHeader; + private Long compressedSize; + private Long uncompressedSize; + private Integer checkSummedReaderIndex; + + public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { + this.lz4Factory = lz4Factory; + this.decompressedData = alloc.buffer(); + } + + @Override + public void moreData(ByteBuf buf, ByteBufAllocator alloc) { + if (serverCityHash == null && buf.readableBytes() >= MIN_BLOCK_PREFIX) { + serverCityHash = new long[2]; + dumpHeader(buf); + LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + serverCityHash[0] = buf.readLongLE(); + serverCityHash[1] = buf.readLongLE(); + checkSummedReaderIndex = buf.readerIndex(); + int compressionMethod = buf.readUnsignedByte(); + if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { + decompressedData.release(); + String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", + compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); + throw new IllegalStateException(msg); + } + sizeWithHeader = buf.readUnsignedIntLE(); + if (sizeWithHeader > Integer.MAX_VALUE) { + throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); + } + compressedSize = sizeWithHeader - 1 - 4; + uncompressedSize = buf.readUnsignedIntLE(); + if (uncompressedSize > Integer.MAX_VALUE) { + throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); + } + LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + } + if (compressedSize == null) { + return; + } + if (buf.readableBytes() < compressedSize) { + return; + } + long[] oursCityHash; + ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); + buf.readerIndex(checkSummedReaderIndex); + buf.readBytes(arrayBb); + oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size + arrayBb.readerIndex(1 + 4 + 4); + + + LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedSize.intValue() - 4)); + LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + (compressedSize.intValue() - 4)); + if (!Arrays.equals(serverCityHash, oursCityHash)) { + throw new IllegalStateException("CityHash mismatch; server's: " + + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + + Arrays.toString(Utils.hex(oursCityHash))); + } + byte[] uncompressedBytes = new byte[uncompressedSize.intValue()]; + LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); + //LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb)); + decompressor.decompress(arrayBb.array(), arrayBb.arrayOffset() + arrayBb.readerIndex(), uncompressedBytes, 0, uncompressedBytes.length); + LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); + //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); + decompressedData.writeBytes(uncompressedBytes); + serverCityHash = null; + sizeWithHeader = null; + compressedSize = null; + uncompressedSize = null; + checkSummedReaderIndex = null; + } + + private void dumpHeader(ByteBuf buf) { + String h1 = ByteBufUtil.hexDump(buf, buf.readerIndex(), 8); + String h2 = ByteBufUtil.hexDump(buf, buf.readerIndex() + 8, 8); + String method = ByteBufUtil.hexDump(buf, buf.readerIndex() + 16, 1); + String sizeWithHeader = ByteBufUtil.hexDump(buf, buf.readerIndex() + 17, 4); + String uncompressedSize = ByteBufUtil.hexDump(buf, buf.readerIndex() + 21, 4); + LOG.info(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + } + + @Override + public int readableBytes() { + return decompressedData.readableBytes(); + } + + @Override + public String readPascalString() { + return ByteBufUtils.readPascalString(decompressedData); + } + + @Override + public Integer readULeb128() { + return ByteBufUtils.readULeb128(decompressedData); + } + + @Override + public Boolean readBoolean() { + return decompressedData.readBoolean(); + } + + @Override + public Integer readIntLE() { + return decompressedData.readIntLE(); + } + + @Override + public ByteBuf readSlice(int nBytes) { + return decompressedData.readSlice(nBytes); + } + + @Override + public void readBytes(byte[] dst) { + decompressedData.readBytes(dst); + } + + @Override + public byte readByte() { + return decompressedData.readByte(); + } + + @Override + public long readLongLE() { + return decompressedData.readLongLE(); + } + + @Override + public short readShortLE() { + return decompressedData.readShortLE(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 75fa5aeae0..53a1389cc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,13 +1,15 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import net.jpountz.lz4.LZ4Factory; import java.util.Map; @@ -17,11 +19,14 @@ public class PacketReader { private final ClickhouseNativeDatabaseMetadata md; private final String fullClientName; private final Map properties; + private final LZ4Factory lz4Factory; + private ClickhouseStreamDataSource ds; private ServerPacketType packetType; private DatabaseMetadataReader metadataReader; private ClickhouseExceptionReader exceptionReader; + private String tempTableInfo; private ColumnOrientedBlockReader columnBlockReader; private BlockStreamProfileInfoReader blockStreamProfileReader; @@ -29,13 +34,14 @@ public class PacketReader { private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties) { + public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { this.md = md; this.fullClientName = fullClientName; this.properties = properties; + this.lz4Factory = lz4Factory; } - public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { + public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { if (packetType == null) { Integer packetTypeCode = ByteBufUtils.readULeb128(in); if (packetTypeCode == null) { @@ -61,14 +67,27 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { return md; } } else if (packetType == ServerPacketType.DATA) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return null; + } + } + } if (columnBlockReader == null) { + ds = dataSource(alloc); columnBlockReader = new ColumnOrientedBlockReader(md); } - ColumnOrientedBlock block = columnBlockReader.readFrom(in); + ds.moreData(in, alloc); + ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; + ds = null; + tempTableInfo = null; } return block; } else if (packetType == ServerPacketType.EXCEPTION) { @@ -114,6 +133,14 @@ public Object receivePacket(ChannelHandlerContext ctx, ByteBuf in) { return null; } + private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc) { + if (lz4Factory == null) { + return new RawClickhouseStreamDataSource(); + } else { + return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); + } + } + public boolean isEndOfStream() { return endOfStream; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java new file mode 100644 index 0000000000..221d8f8297 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { + private final ByteBuf sink; + + public RawClickhouseStreamDataSink(ByteBuf sink) { + this.sink = sink; + } + + @Override + public void writeULeb128(int value) { + ByteBufUtils.writeULeb128(value, sink); + } + + @Override + public void writeByte(int value) { + sink.writeByte(value); + } + + @Override + public void writeIntLE(int value) { + sink.writeIntLE(value); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java new file mode 100644 index 0000000000..c376bc7e5e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -0,0 +1,66 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; + +public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private ByteBuf source; + + public RawClickhouseStreamDataSource() { + } + + @Override + public void moreData(ByteBuf source, ByteBufAllocator alloc) { + this.source = source; + } + + @Override + public int readableBytes() { + return source.readableBytes(); + } + + @Override + public String readPascalString() { + return ByteBufUtils.readPascalString(source); + } + + @Override + public Integer readULeb128() { + return ByteBufUtils.readULeb128(source); + } + + @Override + public Boolean readBoolean() { + return source.readBoolean(); + } + + @Override + public Integer readIntLE() { + return source.readIntLE(); + } + + @Override + public ByteBuf readSlice(int nBytes) { + return source.readSlice(nBytes); + } + + @Override + public void readBytes(byte[] dst) { + source.readBytes(dst); + } + + @Override + public byte readByte() { + return source.readByte(); + } + + @Override + public long readLongLE() { + return source.readLongLE(); + } + + @Override + public short readShortLE() { + return source.readShortLE(); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index f35260f1e9..0667543ea0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -25,7 +25,6 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - LOG.info("generating row " + (rowNo + 1)); ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); ++rowNo; return row; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 6a400fd96d..10a33693c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -59,7 +59,19 @@ private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { ByteBufUtils.writePascalString(tableName, buf); } - block.serializeTo(buf); + ClickhouseStreamDataSink sink = null; + try { + sink = dataSink(buf); + block.serializeTo(sink); + } finally { + if (sink != null) { + sink.finish(); + } + } + } + + private ClickhouseStreamDataSink dataSink(ByteBuf buf) { + return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), encoder.chctx()); } private void sendQuery(String query, ByteBuf buf) { @@ -78,7 +90,8 @@ private void sendQuery(String query, ByteBuf buf) { ByteBufUtils.writePascalString("", buf); } ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); - ByteBufUtils.writeULeb128(Compression.DISABLED, buf); + int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; + ByteBufUtils.writeULeb128(compressionEnabled, buf); ByteBufUtils.writePascalString(query, buf); } @@ -116,9 +129,9 @@ private void writeSettings(Map settings, boolean settingsAsStrin void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode, readable bytes: " + in.readableBytes()); if (packetReader == null) { - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null); + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } - Object packet = packetReader.receivePacket(ctx, in); + Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; @@ -136,6 +149,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } else { String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); + if (packet instanceof Throwable) { + LOG.error("unknown packet type", (Throwable) packet); + } //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java new file mode 100644 index 0000000000..812111cb5f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java @@ -0,0 +1,11 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +public class Utils { + public static String[] hex(long[] src) { + String[] result = new String[src.length]; + for (int i = 0; i < src.length; ++i) { + result[i] = "0x" + Long.toHexString(src[i]); + } + return result; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 774c5b5457..dbc788230b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,7 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + import java.util.BitSet; public abstract class ClickhouseColumn { @@ -15,7 +16,7 @@ protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDes this.nRows = nRows; } - public void readColumn(ByteBuf in){ + public void readColumn(ClickhouseStreamDataSource in){ readStatePrefix(in); readData(in); } @@ -24,10 +25,10 @@ public int nRows() { return nRows; } - protected void readStatePrefix(ByteBuf in) { + protected void readStatePrefix(ClickhouseStreamDataSource in) { } - protected void readData(ByteBuf in) { + protected void readData(ClickhouseStreamDataSource in) { if (columnDescriptor.isNullable() && nullsMap == null) { nullsMap = readNullsMap(in); if (nullsMap == null) { @@ -37,7 +38,7 @@ protected void readData(ByteBuf in) { readDataInternal(in); } - protected void readDataInternal(ByteBuf in) { + protected void readDataInternal(ClickhouseStreamDataSource in) { if (itemsArray == null) { itemsArray = readItems(in); if (itemsArray == null) { @@ -47,11 +48,11 @@ protected void readDataInternal(ByteBuf in) { afterReadItems(in); } - protected abstract Object readItems(ByteBuf in); - protected void afterReadItems(ByteBuf in) { + protected abstract Object readItems(ClickhouseStreamDataSource in); + protected void afterReadItems(ClickhouseStreamDataSource in) { } - protected BitSet readNullsMap(ByteBuf in) { + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); if (in.readableBytes() >= nBytes) { return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index dab15a7bc1..66a1acac32 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDe } @Override - protected Object[] readItems(ByteBuf in) { + protected Object[] readItems(ClickhouseStreamDataSource in) { while (elements.size() < nRows) { if (in.readableBytes() < columnDescriptor.getElementSize()) { return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 8792d4f6c0..faa1b1e89e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,8 +1,8 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.util.ArrayList; import java.util.List; @@ -17,10 +17,10 @@ protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { } @Override - protected Object[] readItems(ByteBuf in) { + protected Object[] readItems(ClickhouseStreamDataSource in) { while (elements.size() < nRows) { if (curStrLength == null) { - curStrLength = ByteBufUtils.readULeb128(in); + curStrLength = in.readULeb128(); if (curStrLength == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index cc567f2ad5..7b776813f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; @@ -13,7 +13,7 @@ protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescri } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 9c8846bd07..90393cdf64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt16Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 2; @@ -11,7 +11,7 @@ public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { short[] data = new short[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index d4d5e32d26..1da0fdffbf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; @@ -11,7 +11,7 @@ public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { int[] data = new int[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 9bf4bf1c82..10ef443d25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; @@ -13,7 +13,7 @@ public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 10cfd90f2f..b77ec19f81 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; @@ -11,7 +11,7 @@ public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) } @Override - protected Object readItems(ByteBuf in) { + protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { byte[] data = new byte[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index a026c70717..5023b00edb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -28,16 +28,19 @@ public class ExtendedClickhouseTest { private ClickhouseNativeConnectOptions options; private Vertx vertx; + private String query; @Before public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); + /* ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") .execute(ctx.asyncAssertSuccess()); })); + */ } @After @@ -51,8 +54,9 @@ public void extendedQueryTest(TestContext ctx) { LongAdder adder = new LongAdder(); final long limit = 55; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + query = String.format("select name, value from (SELECT name, value from vertx_cl_test_table limit %s) t1 order by name desc", limit); conn - .prepare(String.format("SELECT name, value from vertx_cl_test_table limit %s", limit), ctx.asyncAssertSuccess(ps -> { + .prepare(query, ctx.asyncAssertSuccess(ps -> { RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); stream.exceptionHandler(err -> { LOG.error("exceptionHandler: ", err); @@ -64,7 +68,7 @@ public void extendedQueryTest(TestContext ctx) { }); stream.handler(row -> { adder.increment(); - LOG.info("name: " + row.getString("name") + "; value: " + row.getInteger("value")); + //LOG.info("name: " + row.getString("name") + "; value: " + row.getLong("value")); }); })); })); From da0ee4cc2cf475bc2251e67fae4cc6f2e51bf820 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 7 Mar 2021 23:37:56 +0300 Subject: [PATCH 095/176] added DateTime/DateTime64 column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 4 + .../codec/Lz4ClickhouseStreamDataSource.java | 4 +- .../impl/codec/PacketReader.java | 162 +++++++++++------- .../impl/codec/columns/ClickhouseColumns.java | 35 +++- .../impl/codec/columns/DateTime64Column.java | 45 +++++ .../impl/codec/columns/DateTimeColumn.java | 35 ++++ .../impl/codec/columns/UInt64Column.java | 2 +- 7 files changed, 219 insertions(+), 68 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 2d6134b9c1..1de027bc26 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -87,6 +87,10 @@ public BigInteger getMaxValue() { return maxValue; } + public String getNativeType() { + return nativeType; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index c07825e22c..cfc4e2cd17 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -62,13 +62,14 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } - if (compressedSize == null) { + if (uncompressedSize == null) { return; } if (buf.readableBytes() < compressedSize) { return; } long[] oursCityHash; + //TODO: maybe skip allocation if buf.hasArray() == true ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb); @@ -91,6 +92,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); decompressedData.writeBytes(uncompressedBytes); + arrayBb.release(); serverCityHash = null; sizeWithHeader = null; compressedSize = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 53a1389cc6..271a4d2369 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -56,85 +56,119 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } if (packetType == ServerPacketType.HELLO) { - if (metadataReader == null) { - metadataReader = new DatabaseMetadataReader(fullClientName, properties); - } - ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); - if (md != null) { - LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); - metadataReader = null; - packetType = null; - return md; - } + return readServerHelloBlock(in); } else if (packetType == ServerPacketType.DATA) { - if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); - if (tempTableInfo == null) { - return null; - } - } - } - if (columnBlockReader == null) { - ds = dataSource(alloc); - columnBlockReader = new ColumnOrientedBlockReader(md); - } - ds.moreData(in, alloc); - ColumnOrientedBlock block = columnBlockReader.readFrom(ds); - if (block != null) { - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); - columnBlockReader = null; - packetType = null; - ds = null; - tempTableInfo = null; - } - return block; + return readDataBlock(alloc, in); } else if (packetType == ServerPacketType.EXCEPTION) { - if (exceptionReader == null) { - exceptionReader = new ClickhouseExceptionReader(); - } - ClickhouseServerException exc = exceptionReader.readFrom(in); - if (exc != null) { - LOG.info("decoded: EXCEPTION/ClickhouseServerException"); - exceptionReader = null; - packetType = null; - } - return exc; + return readExceptionBlock(in); } else if (packetType == ServerPacketType.PROGRESS) { - if (queryProgressInfoReader == null) { - queryProgressInfoReader = new QueryProgressInfoReader(md); - } - QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); - if (queryProgressInfo != null) { - LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); - queryProgressInfoReader = null; - packetType = null; - } - return queryProgressInfo; + return readProgressBlock(in); } else if (packetType == ServerPacketType.END_OF_STREAM) { LOG.info("decoded: END_OF_STREAM"); packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { - if (blockStreamProfileReader == null) { - blockStreamProfileReader = new BlockStreamProfileInfoReader(); - } - BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); - if (profileInfo != null) { - LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); - blockStreamProfileReader = null; - packetType = null; + return readProfileInfoBlock(in); + } else if (packetType == ServerPacketType.LOG) { + ColumnOrientedBlock block = readDataBlock(alloc, in, false); + if (block != null) { + traceServerLogs(block); } - return profileInfo; + return null; } else { throw new IllegalStateException("unknown packet type: " + packetType); } return null; } - private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc) { - if (lz4Factory == null) { + private void traceServerLogs(ColumnOrientedBlock block) { + LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + } + + private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { + if (metadataReader == null) { + metadataReader = new DatabaseMetadataReader(fullClientName, properties); + } + ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + if (md != null) { + LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + metadataReader = null; + packetType = null; + } + return md; + } + + private BlockStreamProfileInfo readProfileInfoBlock(ByteBuf in) { + if (blockStreamProfileReader == null) { + blockStreamProfileReader = new BlockStreamProfileInfoReader(); + } + BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); + if (profileInfo != null) { + LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + blockStreamProfileReader = null; + packetType = null; + } + return profileInfo; + } + + private QueryProgressInfo readProgressBlock(ByteBuf in) { + if (queryProgressInfoReader == null) { + queryProgressInfoReader = new QueryProgressInfoReader(md); + } + QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); + if (queryProgressInfo != null) { + LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + queryProgressInfoReader = null; + packetType = null; + } + return queryProgressInfo; + } + + private ClickhouseServerException readExceptionBlock(ByteBuf in) { + if (exceptionReader == null) { + exceptionReader = new ClickhouseExceptionReader(); + } + ClickhouseServerException exc = exceptionReader.readFrom(in); + if (exc != null) { + LOG.info("decoded: EXCEPTION/ClickhouseServerException"); + exceptionReader = null; + packetType = null; + } + return exc; + } + + private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in) { + return readDataBlock(alloc, in, true); + } + + private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, boolean preferCompressionIfEnabled) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + if (tempTableInfo == null) { + tempTableInfo = ByteBufUtils.readPascalString(in); + LOG.info("tempTableInfo: " + tempTableInfo); + if (tempTableInfo == null) { + return null; + } + } + } + if (columnBlockReader == null) { + ds = dataSource(alloc, preferCompressionIfEnabled); + columnBlockReader = new ColumnOrientedBlockReader(md); + } + ds.moreData(in, alloc); + ColumnOrientedBlock block = columnBlockReader.readFrom(ds); + if (block != null) { + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); + columnBlockReader = null; + packetType = null; + ds = null; + tempTableInfo = null; + } + return block; + } + + private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc, boolean preferCompressionIfEnabled) { + if (lz4Factory == null || !preferCompressionIfEnabled) { return new RawClickhouseStreamDataSource(); } else { return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index fb899fa23d..8dbed234cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -4,6 +4,7 @@ import java.math.BigInteger; import java.sql.JDBCType; +import java.time.ZoneId; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -18,6 +19,9 @@ public class ClickhouseColumns { public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); + private static final int DATETIME_COLUMN_WIDTH = DateTimeColumn.ELEMENT_SIZE; + private static final int DATETIME64_COLUMN_WIDTH = DateTime64Column.ELEMENT_SIZE; + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; boolean nullable = false; @@ -41,7 +45,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, - boolean nullable, boolean isArray, boolean isLowCardinality) { + boolean nullable, boolean isArray, + boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, @@ -67,6 +72,12 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int bytesLength = Integer.parseInt(lengthStr); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME_COLUMN_WIDTH, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -77,7 +88,7 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } JDBCType jdbcType = descr.jdbcType(); if (descr.isArray()) { - + throw new IllegalStateException("arrays are not supported"); } else { if (jdbcType == JDBCType.TINYINT) { return new UInt8Column(nRows, descr); @@ -97,6 +108,26 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else { return new FixedStringColumn(nRows, descr); } + } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { + ZoneId zoneId; + Integer precision = null; + String nativeType = descr.getNativeType(); + if (nativeType.endsWith(")")) { + int openBracePos = nativeType.indexOf("("); + String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); + if (descr.getElementSize() == DATETIME64_COLUMN_WIDTH) { + String[] modifiers = dateModifiers.split(","); + precision = Integer.parseInt(modifiers[0]); + zoneId = modifiers.length == 2 + ? ZoneId.of(modifiers[1]) + : ZoneId.systemDefault(); + } else { + zoneId = ZoneId.of(dateModifiers); + } + } else { + zoneId = ZoneId.systemDefault(); + } + return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java new file mode 100644 index 0000000000..52f0b95ef5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -0,0 +1,45 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.math.BigInteger; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +public class DateTime64Column extends ClickhouseColumn { + private static final Logger LOG = LoggerFactory.getLogger(DateTime64Column.class); + + public static final int ELEMENT_SIZE = 8; + + private final ZoneId zoneId; + private final BigInteger invTickSize; + + public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + ZonedDateTime[] data = new ZonedDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); + LOG.info("seconds: " + seconds + "; nanos: " + nanos); + if (nullsMap == null || !nullsMap.get(i)) { + ZonedDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId); + data[i] = dt; + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java new file mode 100644 index 0000000000..9bc75978fb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +public class DateTimeColumn extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + private final ZoneId zoneId; + + public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + ZonedDateTime[] data = new ZonedDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); + if (nullsMap == null || !nullsMap.get(i)) { + ZonedDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId); + data[i] = dt; + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 10ef443d25..65a7e52b3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -33,7 +33,7 @@ protected Object getElementInternal(int rowIdx) { return element; } - private static BigInteger unsignedBi(long l) { + static BigInteger unsignedBi(long l) { return new BigInteger(1, new byte[] { (byte) (l >>> 56 & 0xFF), (byte) (l >>> 48 & 0xFF), From d5106f3adba500fdb5628a3ccb7243ee8073f4da Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 8 Mar 2021 01:40:06 +0300 Subject: [PATCH 096/176] added UUID column support Signed-off-by: vladimir --- .../clickhousenative/impl/Pair.java | 42 ------------------- .../impl/codec/columns/ClickhouseColumns.java | 5 +++ .../impl/codec/columns/DateTime64Column.java | 10 ++--- .../impl/codec/columns/DateTimeColumn.java | 6 +-- .../impl/codec/columns/UInt128Column.java | 2 +- .../impl/codec/columns/UUIDColumn.java | 28 +++++++++++++ 6 files changed, 40 insertions(+), 53 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java deleted file mode 100644 index 81160b4f1b..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/Pair.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl; - -import java.util.Objects; - -public class Pair { - private final K left; - private final V right; - - public Pair(K left, V right) { - this.left = left; - this.right = right; - } - - public K getLeft() { - return left; - } - - public V getRight() { - return right; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Pair pair = (Pair) o; - return Objects.equals(left, pair.left) && Objects.equals(right, pair.right); - } - - @Override - public int hashCode() { - return Objects.hash(left, right); - } - - @Override - public String toString() { - return "Pair{" + - "left=" + left + - ", right=" + right + - '}'; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8dbed234cc..5ab806042e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -78,6 +78,9 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.equals("UUID")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -128,6 +131,8 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn zoneId = ZoneId.systemDefault(); } return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { + return new UUIDColumn(nRows, descr); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 52f0b95ef5..ec3a2c388e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -2,16 +2,13 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import java.math.BigInteger; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.ZonedDateTime; public class DateTime64Column extends ClickhouseColumn { - private static final Logger LOG = LoggerFactory.getLogger(DateTime64Column.class); public static final int ELEMENT_SIZE = 8; @@ -27,14 +24,13 @@ public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integ @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - ZonedDateTime[] data = new ZonedDateTime[nRows]; + OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); long seconds = bi.divide(invTickSize).longValueExact(); long nanos = bi.remainder(invTickSize).longValueExact(); - LOG.info("seconds: " + seconds + "; nanos: " + nanos); if (nullsMap == null || !nullsMap.get(i)) { - ZonedDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId); + OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 9bc75978fb..bea3c10be1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -4,8 +4,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.ZonedDateTime; public class DateTimeColumn extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; @@ -20,11 +20,11 @@ public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - ZonedDateTime[] data = new ZonedDateTime[nRows]; + OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); if (nullsMap == null || !nullsMap.get(i)) { - ZonedDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId); + OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 7b776813f9..1d9db0f478 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -26,7 +26,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } - private byte[] reverse(byte[] src) { + static byte[] reverse(byte[] src) { for (int i = 0, j = src.length - 1; i < j; ++i, --j) { byte tmp = src[i]; src[i] = src[j]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java new file mode 100644 index 0000000000..c06e25b656 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.UUID; + +public class UUIDColumn extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + + protected UUIDColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + UUID[] data = new UUID[nRows]; + for (int i = 0; i < nRows; ++i) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } + return data; + } + return null; + } +} From 8841c2477deb7ad9d21ae11e83fcd43b3f6d5dde Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 8 Mar 2021 14:26:11 +0300 Subject: [PATCH 097/176] added Decimal column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 21 +++++++ .../clickhousenative/impl/codec/Utils.java | 9 +++ .../impl/codec/columns/ClickhouseColumns.java | 60 ++++++++++++++----- .../impl/codec/columns/DateTime64Column.java | 1 - .../impl/codec/columns/Decimal128Column.java | 36 +++++++++++ .../impl/codec/columns/Decimal256Column.java | 37 ++++++++++++ .../impl/codec/columns/Decimal32Column.java | 34 +++++++++++ .../impl/codec/columns/Decimal64Column.java | 33 ++++++++++ .../impl/codec/columns/UInt128Column.java | 17 ++---- 9 files changed, 220 insertions(+), 28 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 1de027bc26..26d1fee93e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -20,10 +20,21 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final BigInteger minValue; private final BigInteger maxValue; + private final Integer precision; + private final Integer scale; + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { + this(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + Integer precision, Integer scale) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nativeType = nativeType; @@ -35,6 +46,8 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.lowCardinality = lowCardinality; this.minValue = bi(minValue); this.maxValue = bi(maxValue); + this.precision = precision; + this.scale = scale; } private BigInteger bi(Number src) { @@ -91,6 +104,14 @@ public String getNativeType() { return nativeType; } + public Integer getPrecision() { + return precision; + } + + public Integer getScale() { + return scale; + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java index 812111cb5f..c1ddf363a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java @@ -8,4 +8,13 @@ public static String[] hex(long[] src) { } return result; } + + public static byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 5ab806042e..d2a1f3e3fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -19,8 +19,8 @@ public class ClickhouseColumns { public static final String FIXED_STRING_PREFIX = "FixedString("; public static final int FIXED_STRING_PREFIX_LENGTH = FIXED_STRING_PREFIX.length(); - private static final int DATETIME_COLUMN_WIDTH = DateTimeColumn.ELEMENT_SIZE; - private static final int DATETIME64_COLUMN_WIDTH = DateTime64Column.ELEMENT_SIZE; + public static final String DECIMAL_PREFIX = "Decimal("; + public static final int DECIMAL_PREFIX_LENGTH = DECIMAL_PREFIX.length(); public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; @@ -49,20 +49,20 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 1, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 2, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 4, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32Column.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 8, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, @@ -73,18 +73,37 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME_COLUMN_WIDTH, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumn.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DATETIME64_COLUMN_WIDTH, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, 16, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); + } else if (spec.startsWith(DECIMAL_PREFIX)) { + String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); + String[] modifiersTokens = decimalModifiers.split(","); + int precision = Integer.parseInt(modifiersTokens[0].trim()); + int scale = Integer.parseInt(modifiersTokens[1].trim()); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), + JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } + private static int decimalSize(int precision) { + if (precision <= Decimal32Column.MAX_PRECISION) { + return Decimal32Column.ELEMENT_SIZE; + } else if (precision <= Decimal64Column.MAX_PRECISION) { + return Decimal64Column.ELEMENT_SIZE; + } else if (precision <= Decimal128Column.MAX_PRECISION) { + return Decimal128Column.ELEMENT_SIZE; + } else { + return Decimal256Column.ELEMENT_SIZE; + } + } + public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); @@ -100,9 +119,9 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else if (jdbcType == JDBCType.INTEGER) { return new UInt32Column(nRows, descr); } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == 8) { + if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == 16) { + } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { return new UInt128Column(nRows, descr); } } else if (jdbcType == JDBCType.VARCHAR) { @@ -118,11 +137,11 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DATETIME64_COLUMN_WIDTH) { + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); - precision = Integer.parseInt(modifiers[0]); + precision = Integer.parseInt(modifiers[0].trim()); zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1]) + ? ZoneId.of(modifiers[1].trim()) : ZoneId.systemDefault(); } else { zoneId = ZoneId.of(dateModifiers); @@ -131,6 +150,17 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn zoneId = ZoneId.systemDefault(); } return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.DECIMAL) { + //TODO smagellan: merge into one statement after introducing column readers + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { + return new Decimal32Column(nRows, descr); + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { + return new Decimal64Column(nRows, descr); + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { + return new Decimal128Column(nRows, descr); + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { + return new Decimal256Column(nRows, descr); + } } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { return new UUIDColumn(nRows, descr); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index ec3a2c388e..7aa798e0aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -9,7 +9,6 @@ import java.time.ZoneId; public class DateTime64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; private final ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java new file mode 100644 index 0000000000..719f231061 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java new file mode 100644 index 0000000000..c0ec433e62 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//Looks like support is experimental at the moment +public class Decimal256Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java new file mode 100644 index 0000000000..1fbc34d44f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -0,0 +1,34 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//TODO smagellan: maybe introduce separate universal column reader/column +public class Decimal32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + int item = in.readIntLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java new file mode 100644 index 0000000000..99cb4790f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigDecimal[] data = new BigDecimal[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + long item = in.readLongLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 1d9db0f478..8e62765edf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -2,9 +2,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import java.math.BigInteger; +//experimental support at the moment public class UInt128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; @@ -16,25 +18,16 @@ protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescri protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; + byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - byte[] tmp = new byte[ELEMENT_SIZE]; - in.readBytes(tmp); - data[i] = new BigInteger(reverse(tmp)); + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); } return data; } return null; } - static byte[] reverse(byte[] src) { - for (int i = 0, j = src.length - 1; i < j; ++i, --j) { - byte tmp = src[i]; - src[i] = src[j]; - src[j] = tmp; - } - return src; - } - @Override protected Object getElementInternal(int rowIdx) { return ((BigInteger[]) this.itemsArray)[rowIdx]; From 957ece6415d84c98754b01db020e0d4c92a87b62 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 9 Mar 2021 22:11:56 +0300 Subject: [PATCH 098/176] added TABLE_COLUMNS packet-type support Signed-off-by: vladimir --- .../clickhousenative/impl/BlockInfo.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 1 + .../codec/Lz4ClickhouseStreamDataSource.java | 7 +++- .../impl/codec/MultistringMessageReader.java | 36 +++++++++++++++++++ .../impl/codec/PacketReader.java | 30 ++++++++++++++++ .../codec/RawClickhouseStreamDataSource.java | 8 +++++ .../impl/codec/columns/Decimal128Column.java | 1 + .../impl/codec/columns/Decimal32Column.java | 1 - 8 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index c626d899e2..1e9f631acf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -48,7 +48,7 @@ public void readFrom(ClickhouseStreamDataSource in) { } } - LOG.info("fieldNum: " + fieldNum); + LOG.info("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); if (fieldNum == 0) { complete = true; return; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index a9ae8ed5d8..b4b84516de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -15,4 +15,5 @@ public interface ClickhouseStreamDataSource { byte readByte(); long readLongLE(); short readShortLE(); + String hexdump(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index cfc4e2cd17..80d236bfab 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -65,7 +65,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (uncompressedSize == null) { return; } - if (buf.readableBytes() < compressedSize) { + if (buf.readableBytes() < compressedSize - 4) { return; } long[] oursCityHash; @@ -158,4 +158,9 @@ public long readLongLE() { public short readShortLE() { return decompressedData.readShortLE(); } + + @Override + public String hexdump() { + return ByteBufUtil.hexDump(decompressedData); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java new file mode 100644 index 0000000000..26a5123ac3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; + +import java.util.ArrayList; +import java.util.List; + +public class MultistringMessageReader { + private final List strings; + private Integer stringsExpected; + + public MultistringMessageReader() { + strings = new ArrayList<>(); + } + + public List readFrom(ByteBuf in, ServerPacketType packetType) { + if (stringsExpected == null) { + stringsExpected = stringsInMessage(packetType); + } + String ln; + while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in)) != null) { + strings.add(ln); + } + if (strings.size() == stringsExpected) { + return strings; + } + return null; + } + + private int stringsInMessage(ServerPacketType type) { + if (type == ServerPacketType.TABLE_COLUMNS) { + return 2; + } + return 0; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 271a4d2369..21435e72be 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -11,6 +11,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; +import java.util.List; import java.util.Map; public class PacketReader { @@ -31,6 +32,9 @@ public class PacketReader { private BlockStreamProfileInfoReader blockStreamProfileReader; private QueryProgressInfoReader queryProgressInfoReader; + private MultistringMessageReader multistringReader; + private List multistringMessage; + private PacketReader tableColumnsPacketReader; private boolean endOfStream; @@ -75,6 +79,8 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { traceServerLogs(block); } return null; + } else if (packetType == ServerPacketType.TABLE_COLUMNS) { + return receiveMultistringMessage(alloc, in, packetType); } else { throw new IllegalStateException("unknown packet type: " + packetType); } @@ -85,6 +91,30 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } + private List receiveMultistringMessage(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + if (multistringMessage == null) { + if (multistringReader == null) { + multistringReader = new MultistringMessageReader(); + } + multistringMessage = multistringReader.readFrom(in, type); + } + if (multistringMessage == null) { + return null; + } + if (tableColumnsPacketReader == null) { + tableColumnsPacketReader = new PacketReader(md, fullClientName, properties, lz4Factory); + } + ColumnOrientedBlock block = tableColumnsPacketReader.readDataBlock(alloc, in, true); + if (block != null) { + LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + multistringReader = null; + packetType = null; + tableColumnsPacketReader = null; + multistringMessage = null; + } + return multistringMessage; + } + private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { if (metadataReader == null) { metadataReader = new DatabaseMetadataReader(fullClientName, properties); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index c376bc7e5e..48846b95e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -2,6 +2,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { private ByteBuf source; @@ -63,4 +64,11 @@ public long readLongLE() { public short readShortLE() { return source.readShortLE(); } + + @Override + public String hexdump() { + return source != null + ? "[" + ByteBufUtil.hexDump(source, 0, source.writerIndex()) + "][" + ByteBufUtil.hexDump(source) + "]" + : null; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 719f231061..f79e4a6ef3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -9,6 +9,7 @@ import java.math.MathContext; import java.math.RoundingMode; +//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class Decimal128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 1fbc34d44f..2722d3b46a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -8,7 +8,6 @@ import java.math.MathContext; import java.math.RoundingMode; -//TODO smagellan: maybe introduce separate universal column reader/column public class Decimal32Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 4; public static final int MAX_PRECISION = 9; From 92f38b126ad9de8bedd7bbb68c381e20f92db874 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 10 Mar 2021 00:40:36 +0300 Subject: [PATCH 099/176] added Replay test Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 7 +- .../codec/ClickhouseStreamDataSource.java | 2 + .../codec/Lz4ClickhouseStreamDataSource.java | 21 ++-- .../impl/codec/PacketReader.java | 5 +- .../src/test/java/io/vertx/ReplayTest.java | 68 ++++++++++++ .../PacketReaderReplayTest.java | 105 ++++++++++++++++++ .../src/test/resources/insert_prepare.yaml | 28 +++++ .../with_max_block_size_and_2_datablocks.yaml | 45 ++++++++ 8 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index fec1a8e5b4..1fc77e8634 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -78,12 +78,7 @@ com.fasterxml.jackson.dataformat jackson-dataformat-yaml - - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - 2.12.2 + test diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index b4b84516de..5fcd69ae2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -16,4 +16,6 @@ public interface ClickhouseStreamDataSource { long readLongLE(); short readShortLE(); String hexdump(); + default void finish(){ + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 80d236bfab..ee29f6736f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -22,7 +22,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private final ByteBuf decompressedData; private long[] serverCityHash; private Long sizeWithHeader; - private Long compressedSize; + private Long compressedAndSizeSize; private Long uncompressedSize; private Integer checkSummedReaderIndex; @@ -54,18 +54,20 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (sizeWithHeader > Integer.MAX_VALUE) { throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); } - compressedSize = sizeWithHeader - 1 - 4; + compressedAndSizeSize = sizeWithHeader - 1 - 4; uncompressedSize = buf.readUnsignedIntLE(); if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); } LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedSize, compressedSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } if (uncompressedSize == null) { return; } - if (buf.readableBytes() < compressedSize - 4) { + //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) + int compressedDataSize = compressedAndSizeSize.intValue() - 4; + if (buf.readableBytes() < compressedDataSize) { return; } long[] oursCityHash; @@ -78,8 +80,8 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.readerIndex(1 + 4 + 4); - LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedSize.intValue() - 4)); - LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + (compressedSize.intValue() - 4)); + LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedDataSize)); + LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); if (!Arrays.equals(serverCityHash, oursCityHash)) { throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + @@ -95,7 +97,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.release(); serverCityHash = null; sizeWithHeader = null; - compressedSize = null; + compressedAndSizeSize = null; uncompressedSize = null; checkSummedReaderIndex = null; } @@ -163,4 +165,9 @@ public short readShortLE() { public String hexdump() { return ByteBufUtil.hexDump(decompressedData); } + + @Override + public void finish() { + decompressedData.release(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 21435e72be..08ac968216 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -80,7 +80,7 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } return null; } else if (packetType == ServerPacketType.TABLE_COLUMNS) { - return receiveMultistringMessage(alloc, in, packetType); + return receiveTableColumns(alloc, in, packetType); } else { throw new IllegalStateException("unknown packet type: " + packetType); } @@ -91,7 +91,7 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } - private List receiveMultistringMessage(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { multistringReader = new MultistringMessageReader(); @@ -191,6 +191,7 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); columnBlockReader = null; packetType = null; + ds.finish(); ds = null; tempTableInfo = null; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java new file mode 100644 index 0000000000..f3d1e02aa3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java @@ -0,0 +1,68 @@ +package io.vertx; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.util.ResourceLeakDetector; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import net.jpountz.lz4.LZ4Factory; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ReplayTest { + public static void main(String[] args) throws IOException { + ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); + + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + //File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml"); + File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml"); + Map map = + mapper.readValue(file, Map.class); + List queryAnswers = map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + byte[][] arrays = asPrimitiveByteArray(queryAnswers); + ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); + ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]).writerIndex(0); + fragmentedByteBuf.readBytes(continuousBuf); + fragmentedByteBuf.readerIndex(0); + + Map props = new HashMap<>(); + props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); + + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + String fullName = "Clickhouse jython-driver"; + LZ4Factory lz4Factory = LZ4Factory.safeInstance(); + + //1st packet: server hello + PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, continuousBuf); + + do { + rdr = new PacketReader(md, fullName, props, lz4Factory); + Object packet = rdr.receivePacket(allocator, continuousBuf); + } while (!rdr.isEndOfStream() && continuousBuf.readableBytes() > 0); + } + + private static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java new file mode 100644 index 0000000000..e242dc0e18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -0,0 +1,105 @@ +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import net.jpountz.lz4.LZ4Factory; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + +@RunWith(Parameterized.class) +public class PacketReaderReplayTest { + private static final Map PROPS = Collections.unmodifiableMap(buildProperties()); + private static final LZ4Factory LZ4_FACTORY = LZ4Factory.safeInstance(); + + private final ByteBuf buf; + + public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf) { + this.buf = buf; + } + + @Parameterized.Parameters(name = "{0}({1})") + public static Iterable dataForTest() throws IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + List result = new ArrayList<>(); + + int continuousOffset = 8; + for (String replayFile : Arrays.asList("/insert_prepare.yaml", "/with_max_block_size_and_2_datablocks.yaml")) { + try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { + Map map = mapper.readValue(is, Map.class); + + List queryAnswers = map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + byte[][] arrays = asPrimitiveByteArray(queryAnswers); + ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); + ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]) + .writerIndex(0); + fragmentedByteBuf.readBytes(continuousBuf); + fragmentedByteBuf.readerIndex(0); + ByteBuf continuousWithOffsetBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes() + continuousOffset], + continuousOffset, fragmentedByteBuf.readableBytes()) + .writerIndex(0); + fragmentedByteBuf.readBytes(continuousWithOffsetBuf); + fragmentedByteBuf.readerIndex(0); + + + result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf}); + result.add(new Object[]{replayFile, "continuous", continuousBuf}); + result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf}); + } + } + return result; + } + + @After + public void cleanup() { + buf.release(); + } + + @Test + public void doReplayTest() { + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + String fullName = "Clickhouse jython-driver"; + + //1st packet: server hello + PacketReader rdr = new PacketReader(null, fullName, PROPS, LZ4_FACTORY); + ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); + + do { + rdr = new PacketReader(md, fullName, PROPS, LZ4_FACTORY); + Object packet = rdr.receivePacket(allocator, buf); + } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); + } + + private static Map buildProperties() { + Map props = new HashMap<>(); + props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); + return props; + } + + private static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml b/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml new file mode 100644 index 0000000000..64b86c99a6 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml @@ -0,0 +1,28 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQKvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UF +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAS5JTlNFUlQgSU5UTyBpbnNlcnRfc2Vs + ZWN0X3Rlc3R0YWJsZSAoKikgVkFMVUVTAgCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv// + //8AAAA= +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWXDvkdgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMp5jCAAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDIz + NmMzNzVmLTQxODMtNDdkNC04ODQ0LTE2YjkyYzc1ZWQ2MQl0aHJlYWRfaWQGVUludDY0kQQAAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmde + KGZyb20gMTI3LjAuMC4xOjM2MjAyLCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgSU5TRVJUIElO + VE8gaW5zZXJ0X3NlbGVjdF90ZXN0dGFibGUgKCopIFZBTFVFUw== +# Packet 12 +peer1_2: !!binary | + CwBCY29sdW1ucyBmb3JtYXQgdmVyc2lvbjogMQozIGNvbHVtbnM6CmBhYCBJbnQ4CmBiYCBTdHJp + bmcKYGNgIEludDgK +# Packet 14 +peer1_3: !!binary | + AQBIKPIcufqlLRMJXTEAsN65giwAAAAhAAAA8BIBAAL/////AAMAAWEESW50OAFiBlN0cmluZwFj + BEludDg= diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml new file mode 100644 index 0000000000..d57e166d6e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml @@ -0,0 +1,45 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQKvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UF +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg5tYXhfYmxvY2tfc2l6ZQECNTAAAAIBZHNlbGVjdCBuYW1lLCB2YWx1ZSBmcm9tIChT + RUxFQ1QgbmFtZSwgdmFsdWUgZnJvbSB2ZXJ0eF9jbF90ZXN0X3RhYmxlIGxpbWl0IDU1KSB0MSBv + cmRlciBieSBuYW1lIGRlc2MCAKeDrGzVXHp8taxGvduG4hSCFAAAAAoAAACgAQAC/////wAAAA== +# Packet 10 +peer1_1: !!binary | + AQBicwHkjGdcDo5MWkTMRbtOgi4AAAAjAAAA8BQBAAL/////AAIABG5hbWUGU3RyaW5nBXZhbHVl + BlVJbnQzMg== +# Packet 12 +peer1_2: !!binary | + AQCx4PZsr1XBX5U/lPIe9471grQBAACoAQAA8P+aAQAC/////wACMgRuYW1lBlN0cmluZwJ7aQR7 + RnVLBXl7SUA1AXkFeHV5bGgEeEAmbwJzKwJweQFrAmdjA2ZmLAVmI3BiSgFlAWIEYSdQYAJgYgVd + YCtycwVdOjpgLwNaIWkBWgVYRDBaegNXQ0gCVEoCVDICT2sBTwVLY0ZzJAFGBEVVSVoBRQRDckp3 + BUB2cGFTBT5JQkhFAT4BPQQ8aTw/BTtZI1ZZAzlZVgU5N2hxYQE5ATcDM21uBDNORG4DMER2Ay0y + dgEpAidHBCE7aFEAAAV2YWx1ZQZVSW50MzIZau9oH+r3XisCpaD436HtlAmcwpeNsTJr6e1xMFSZ + 7F9egG+ffWSQxNMEOu+NXx47vlJ1AILiTQuVGhuBd0PHYDAjkUxsHDg8IrICpyFLWQ7DTwMYcYFn + 1KFkIHb0q7TIqEEIu1lq/reMAjPrm0d4sigZonzGGasj4Xf8KhgYv/t3resP2ROWE+GUFdtdWUt9 + 5pK8C4fy31H1nvq8YLa8ajedGLw8hP6Nti/Xct1fsJLUdWBG92LSJwsjYHY71dVqQkJqmXsI4w== +# Packet 14 +peer1_3: !!binary | + AQAJ2NHGgowQkuLjsPN8N5logkcAAAA8AAAA8AgBAAL/////AAIFBG5hbWUGU3RyaW5nAAEA8BIF + dmFsdWUGVUludDMybZltXecjidDGXat5idKGXty+Sl8= +# Packet 16 +peer1_4: !!binary | + BjcCgKIBAWQB +# Packet 18 +peer1_5: !!binary | + A8gBrRgAAAA= +# Packet 20 +peer1_6: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + BQ== From e16e9956aab7ce0313fca1a559704c1e3a51d788 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 10 Mar 2021 23:36:34 +0300 Subject: [PATCH 100/176] added Enum column support Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 1 + .../impl/codec/columns/ClickhouseColumns.java | 74 ++++++++++++++++++- .../impl/codec/columns/Enum16Column.java | 21 ++++++ .../impl/codec/columns/Enum8Column.java | 21 ++++++ .../codec/columns/ClickhouseColumnsTest.java | 51 +++++++++++++ 5 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 10a33693c8..d65be3763d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -131,6 +131,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } + //TODO smagellan: handle parse Exceptions, if any Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index d2a1f3e3fe..fe7509b09d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -5,6 +5,8 @@ import java.math.BigInteger; import java.sql.JDBCType; import java.time.ZoneId; +import java.util.HashMap; +import java.util.Map; public class ClickhouseColumns { public static final String NULLABLE_PREFIX = "Nullable("; @@ -22,6 +24,9 @@ public class ClickhouseColumns { public static final String DECIMAL_PREFIX = "Decimal("; public static final int DECIMAL_PREFIX_LENGTH = DECIMAL_PREFIX.length(); + public static final String ENUM_PREFIX = "Enum"; + public static final int ENUM_PREFIX_LENGTH = ENUM_PREFIX.length(); + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; boolean nullable = false; @@ -88,6 +93,11 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int scale = Integer.parseInt(modifiersTokens[1].trim()); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); + } else if (spec.startsWith(ENUM_PREFIX)) { + int openBracketPos = spec.indexOf('(', ENUM_PREFIX_LENGTH); + int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -161,10 +171,70 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(nRows, descr); } - } else if (jdbcType == JDBCType.OTHER && descr.getNativeType().equals("UUID")) { - return new UUIDColumn(nRows, descr); + } else if (jdbcType == JDBCType.OTHER) { + if (descr.getNativeType().equals("UUID")) { + return new UUIDColumn(nRows, descr); + } else if (descr.getNativeType().startsWith(ENUM_PREFIX)) { + Map enumVals = parseEnumVals(descr.getNativeType()); + if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { + return new Enum8Column(nRows, descr, enumVals); + } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { + return new Enum16Column(nRows, descr, enumVals); + } + } } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } + + static Map parseEnumVals(String nativeType) { + boolean isByte = nativeType.startsWith("Enum8("); + int openBracketPos = nativeType.indexOf('('); + Map result = new HashMap<>(); + int lastQuotePos = -1; + boolean gotEq = false; + String enumElementName = null; + int startEnumValPos = -1; + for (int i = openBracketPos; i < nativeType.length(); ++i) { + char ch = nativeType.charAt(i); + if (ch == '\'') { + if (lastQuotePos == -1) { + lastQuotePos = i; + } else { + enumElementName = nativeType.substring(lastQuotePos + 1, i); + lastQuotePos = -1; + } + } else if (ch == '=') { + gotEq = true; + } else if (gotEq) { + if (Character.isDigit(ch)) { + if (startEnumValPos == -1) { + startEnumValPos = i; + } else if (!Character.isDigit(nativeType.charAt(i + 1))) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } else if (startEnumValPos != -1) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } + } + return result; + } + + private static Number byteOrShort(int number, boolean isByte) { + if (isByte) { + return (byte) number; + } + return (short) number; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java new file mode 100644 index 0000000000..d10873fb59 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum16Column extends UInt16Column { + public static final int ELEMENT_SIZE = 2; + private final Map enumVals; + + public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx) { + Short key = (Short) super.getElementInternal(rowIdx); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java new file mode 100644 index 0000000000..f10147ac93 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum8Column extends UInt8Column { + public static final int ELEMENT_SIZE = 1; + private final Map enumVals; + + public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx) { + Byte key = (Byte) super.getElementInternal(rowIdx); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java new file mode 100644 index 0000000000..d4e4ea11bf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java @@ -0,0 +1,51 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + + +@RunWith(Parameterized.class) +public class ClickhouseColumnsTest { + private final String enumDefinition; + private final java.util.function.Function converter; + + public ClickhouseColumnsTest(String enumType, String enumDefinition, Function converter) { + this.enumDefinition = enumDefinition; + this.converter = converter; + } + + @Parameterized.Parameters(name = "{0}") + public static Iterable dataForTest() { + java.util.function.Function byteConverter = Integer::byteValue; + java.util.function.Function shortConverter = Integer::shortValue; + return Arrays.asList(new Object[][]{ + {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", byteConverter}, + {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", shortConverter} + }); + } + + private T key(Integer k) { + return converter.apply(k); + } + + @Test + public void testParseEnumVals() { + Map vals = ClickhouseColumns.parseEnumVals(enumDefinition); + Map expected = new HashMap<>(); + expected.put(key(1), "aa4"); + expected.put(key(22), "1b3b2"); + expected.put(key(24), "1b3b3"); + expected.put(key(25), "1b3b4"); + expected.put(key(26), "1b3b5"); + expected.put(key(27), "1b3b6"); + expected.put(key(28), "1b3b7"); + Assert.assertEquals(expected, vals); + } +} From fac35ba72a4c2b285ab6584891175b21ca357fc0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 13 Mar 2021 00:39:23 +0300 Subject: [PATCH 101/176] added LowCardinality column support Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 5 + .../impl/codec/columns/ClickhouseColumn.java | 4 - .../impl/codec/columns/ClickhouseColumns.java | 11 +- .../codec/columns/LowCardinalityColumn.java | 108 ++++++++++++++++++ .../src/test/java/io/vertx/ReplayTest.java | 68 ----------- .../PacketReaderReplayTest.java | 35 ++++-- ...l => insert_prepare_with_compression.yaml} | 0 ...able_low_cardinality_with_compression.yaml | 63 ++++++++++ ...e_low_cardinality_without_compression.yaml | 60 ++++++++++ ...ze_and_2_datablocks_with_compression.yaml} | 0 10 files changed, 267 insertions(+), 87 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java rename vertx-clickhouse-native-client/src/test/resources/{insert_prepare.yaml => insert_prepare_with_compression.yaml} (100%) create mode 100644 vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml rename vertx-clickhouse-native-client/src/test/resources/{with_max_block_size_and_2_datablocks.yaml => with_max_block_size_and_2_datablocks_with_compression.yaml} (100%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 26d1fee93e..f3d314f072 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -112,6 +112,11 @@ public Integer getScale() { return scale; } + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { + return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale); + } + @Override public String toString() { return "ClickhouseNativeColumnDescriptor{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index dbc788230b..1132377424 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -83,8 +83,4 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } - - public ClickhouseNativeColumnDescriptor getColumnDescriptor() { - return columnDescriptor; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index fe7509b09d..0e00e67a09 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -15,7 +15,7 @@ public class ClickhouseColumns { public static final String ARRAY_PREFIX = "Array("; public static final int ARRAY_PREFIX_LENGTH = ARRAY_PREFIX.length(); - public static final String LOW_CARDINALITY_PREFIX = "LowCardinality"; + public static final String LOW_CARDINALITY_PREFIX = "LowCardinality("; public static final int LOW_CARDINALITY_PREFIX_LENGTH = LOW_CARDINALITY_PREFIX.length(); public static final String FIXED_STRING_PREFIX = "FixedString("; @@ -40,7 +40,6 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); isLowCardinality = true; - throw new IllegalStateException("low cardinality columns are not supported"); } if (spec.startsWith(NULLABLE_PREFIX)) { spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); @@ -118,6 +117,10 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn if (descr == null) { throw new IllegalArgumentException("no parsed spec for column name: " + name); } + if (descr.isLowCardinality()) { + ClickhouseNativeColumnDescriptor nestedDescr = descr.copyWithModifiers(false, false); + return new LowCardinalityColumn(nRows, descr, nestedDescr); + } JDBCType jdbcType = descr.jdbcType(); if (descr.isArray()) { throw new IllegalStateException("arrays are not supported"); @@ -187,8 +190,10 @@ public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumn throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } + + //TODO: maybe switch to antl4 static Map parseEnumVals(String nativeType) { - boolean isByte = nativeType.startsWith("Enum8("); + final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); Map result = new HashMap<>(); int lastQuotePos = -1; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java new file mode 100644 index 0000000000..fd6d4c2fde --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -0,0 +1,108 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class LowCardinalityColumn extends ClickhouseColumn { + private final ClickhouseNativeColumnDescriptor indexDescr; + private ClickhouseColumn indexColumn; + private Long serType; + private Long indexSize; + private Long nKeys; + private Long keysSerializationVersion; + + private ClickhouseColumn keysColumn; + + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexDescr) { + super(nRows, descr); + this.indexDescr = indexDescr; + } + + @Override + protected void readStatePrefix(ClickhouseStreamDataSource in) { + //KeysSerializationVersion + if (keysSerializationVersion == null) { + if (in.readableBytes() >= 4) { + keysSerializationVersion = in.readLongLE(); + if (keysSerializationVersion != 1) { + throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); + } + } + } + } + + @Override + protected void readData(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + return; + } + if (in.readableBytes() < 8 + 8) { + return; + } + if (indexSize == null) { + serType = in.readLongLE(); + indexSize = in.readLongLE(); + } + if (indexSize > Integer.MAX_VALUE) { + throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); + } + if (indexColumn == null) { + indexColumn = ClickhouseColumns.columnForSpec(indexDescr.name(), indexDescr, indexSize.intValue()); + } + if (indexColumn.isPartial()) { + indexColumn.readColumn(in); + if (indexColumn.isPartial()) { + return; + } + } + if (nKeys == null) { + if (in.readableBytes() < 8) { + return; + } + nKeys = in.readLongLE(); + } + int keyType = (int)(serType & 0xf); + if (keysColumn == null) { + keysColumn = uintColumn(keyType); + } + keysColumn.readColumn(in); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + return null; + } + + @Override + public boolean isPartial() { + return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); + } + + @Override + public Object getElement(int rowIdx) { + int key = ((Number)keysColumn.getElement(rowIdx)).intValue(); + if (columnDescriptor.isNullable() && key == 0) { + return null; + } + return indexColumn.getElementInternal(key); + } + + private ClickhouseColumn uintColumn(int code) { + ClickhouseNativeColumnDescriptor tmp; + String name = columnDescriptor.name(); + //TODO smagellan: introduce immutable column readers, reuse cached instances + if (code == 0) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + } else if (code == 1) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + } else if (code == 2) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + } else if (code == 3) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + } else { + throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); + } + return ClickhouseColumns.columnForSpec(name, tmp, nRows); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java deleted file mode 100644 index f3d1e02aa3..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/ReplayTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.vertx; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.PooledByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.util.ResourceLeakDetector; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; -import net.jpountz.lz4.LZ4Factory; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class ReplayTest { - public static void main(String[] args) throws IOException { - ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); - - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - mapper.findAndRegisterModules(); - //File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml"); - File file = new File("/home/vladimir/projects/vertx-sql-client/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml"); - Map map = - mapper.readValue(file, Map.class); - List queryAnswers = map.entrySet() - .stream() - .filter(packet -> !packet.getKey().startsWith("peer0_")) - .map(Map.Entry::getValue) - .collect(Collectors.toList()); - byte[][] arrays = asPrimitiveByteArray(queryAnswers); - ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); - ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]).writerIndex(0); - fragmentedByteBuf.readBytes(continuousBuf); - fragmentedByteBuf.readerIndex(0); - - Map props = new HashMap<>(); - props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); - props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); - props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); - - PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - String fullName = "Clickhouse jython-driver"; - LZ4Factory lz4Factory = LZ4Factory.safeInstance(); - - //1st packet: server hello - PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); - ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, continuousBuf); - - do { - rdr = new PacketReader(md, fullName, props, lz4Factory); - Object packet = rdr.receivePacket(allocator, continuousBuf); - } while (!rdr.isEndOfStream() && continuousBuf.readableBytes() > 0); - } - - private static byte[][] asPrimitiveByteArray(List src) { - byte[][] ret = new byte[src.size()][]; - for (int i = 0; i < src.size(); ++i) { - ret[i] = src.get(i); - } - return ret; - } -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index e242dc0e18..bceea58939 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -21,13 +21,14 @@ @RunWith(Parameterized.class) public class PacketReaderReplayTest { - private static final Map PROPS = Collections.unmodifiableMap(buildProperties()); - private static final LZ4Factory LZ4_FACTORY = LZ4Factory.safeInstance(); - + private final Map props; private final ByteBuf buf; + private final LZ4Factory lz4Factory; - public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf) { + public PacketReaderReplayTest(String replayFile, String fragmented, ByteBuf buf, Map props, LZ4Factory lz4Factory) { this.buf = buf; + this.props = props; + this.lz4Factory = lz4Factory; } @Parameterized.Parameters(name = "{0}({1})") @@ -37,7 +38,12 @@ public static Iterable dataForTest() throws IOException { List result = new ArrayList<>(); int continuousOffset = 8; - for (String replayFile : Arrays.asList("/insert_prepare.yaml", "/with_max_block_size_and_2_datablocks.yaml")) { + for (String replayFile : Arrays.asList("/insert_prepare_with_compression.yaml", + "/with_max_block_size_and_2_datablocks_with_compression.yaml", + "/nullable_low_cardinality_with_compression.yaml", + "/nullable_low_cardinality_without_compression.yaml" + )) { + boolean compression = replayFile.contains("with_compression"); try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); @@ -59,9 +65,11 @@ public static Iterable dataForTest() throws IOException { fragmentedByteBuf.readerIndex(0); - result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf}); - result.add(new Object[]{replayFile, "continuous", continuousBuf}); - result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf}); + Map p = buildProperties(compression); + LZ4Factory f = compression ? LZ4Factory.safeInstance() : null; + result.add(new Object[]{replayFile, "fragmented", fragmentedByteBuf, p, f}); + result.add(new Object[]{replayFile, "continuous", continuousBuf, p, f}); + result.add(new Object[]{replayFile, "continuousWithOffset", continuousWithOffsetBuf, p, f}); } } return result; @@ -78,19 +86,22 @@ public void doReplayTest() { String fullName = "Clickhouse jython-driver"; //1st packet: server hello - PacketReader rdr = new PacketReader(null, fullName, PROPS, LZ4_FACTORY); + PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); do { - rdr = new PacketReader(md, fullName, PROPS, LZ4_FACTORY); + rdr = new PacketReader(md, fullName, props, lz4Factory); Object packet = rdr.receivePacket(allocator, buf); + System.err.println("packet: " + packet); } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); } - private static Map buildProperties() { + private static Map buildProperties(boolean withCompression) { Map props = new HashMap<>(); props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); - props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + if (withCompression) { + props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + } props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); return props; } diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml b/vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/insert_prepare.yaml rename to vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml new file mode 100644 index 0000000000..3d33cf8447 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml @@ -0,0 +1,63 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAagBc2VsZWN0IENBU1QoJ2FhJywgJ0xv + d0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2FhJyBhcyBjb2xfdmFs + IFVOSU9OIEFMTCAgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0 + cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFsAgCng6xs1Vx6fLWsRr3bhuIUghQAAAAK + AAAAoAEAAv////8AAAA= +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWXYyktgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMtyXCQAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDQ3 + MDBhMDMxLTQwOWItNGQ3Mi05ZGNjLWFiYmViMmVjYzQ0YQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmfX + AShmcm9tIDEyNy4wLjAuMTo1NDIzMiwgdXNpbmcgcHJvZHVjdGlvbiBwYXJzZXIpIHNlbGVjdCBD + QVNUKCdhYScsICdMb3dDYXJkaW5hbGl0eShOdWxsYWJsZShTdHJpbmcpKScpIGFzIG5hbWUsICdh + YScgYXMgY29sX3ZhbCBVTklPTiBBTEwgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5 + KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFs +# Packet 12 +peer1_2: !!binary | + AQDgC4IWJtBHB59qUDBOO5/RgkoAAAA/AAAA8DABAAL/////AAIABG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkHY29sX3ZhbAZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQBXaThdn+ITMOD5/5OIpQG1gmUAAABoAAAA8yMBAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkBAAEAEgYIABIDBwBkAAAAAmFhHQDwBAIHY29sX3ZhbAZTdHJp + bmcCYWE= +# Packet 16 +peer1_4: !!binary | + AQCuFGMBo2LZ43un9vPLkDJpgmEAAABlAAAA8yMBAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxp + dHkoTnVsbGFibGUoU3RyaW5nKSkBAAEAEgYIABICBwA1AAAAGgDwAwdjb2xfdmFsBlN0cmluZwJi + Yg== +# Packet 18 +peer1_5: !!binary | + BgICoRUAAAE= +# Packet 20 +peer1_6: !!binary | + AwICAAAA +# Packet 22 +peer1_7: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 24 +peer1_8: !!binary | + AwAAAAAA +# Packet 26 +peer1_9: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWXYyktg2MpLYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzI3ngkAUp4JAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDQ3MDBhMDMxLTQwOWItNGQ3Mi05ZGNjLWFiYmViMmVjYzQ0YSQ0NzAwYTAz + MS00MDliLTRkNzItOWRjYy1hYmJlYjJlY2M0NGEJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdGUmVhZCAyIHJvd3MsIDIuMDAgQiBpbiAwLjAwMTU3MTQwMyBzZWMu + LCAxMjcyIHJvd3Mvc2VjLiwgMS4yNCBLaUIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1 + ZXJ5KTogMC4wMCBCLg== +# Packet 28 +peer1_10: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml new file mode 100644 index 0000000000..e1e621cdef --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml @@ -0,0 +1,60 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAKgBc2VsZWN0IENBU1QoJ2FhJywgJ0xv + d0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2FhJyBhcyBjb2xfdmFs + IFVOSU9OIEFMTCAgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5KE51bGxhYmxlKFN0 + cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFsAgABAAL/////AAAA +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWWbyktgF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMqjvAgAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDdm + NGRkMTVmLTNhMjctNDgwYS04MTY2LTEzZWI1YzkzMmQzOQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmfX + AShmcm9tIDEyNy4wLjAuMTo1NDIxNiwgdXNpbmcgcHJvZHVjdGlvbiBwYXJzZXIpIHNlbGVjdCBD + QVNUKCdhYScsICdMb3dDYXJkaW5hbGl0eShOdWxsYWJsZShTdHJpbmcpKScpIGFzIG5hbWUsICdh + YScgYXMgY29sX3ZhbCBVTklPTiBBTEwgc2VsZWN0IENBU1QoTlVMTCwgJ0xvd0NhcmRpbmFsaXR5 + KE51bGxhYmxlKFN0cmluZykpJykgYXMgbmFtZSwgJ2JiJyBhcyBjb2xfdmFs +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIABG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkHY29sX3Zh + bAZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkBAAAAAAAA + AAAGAAAAAAAAAwAAAAAAAAAAAAJhYQEAAAAAAAAAAgdjb2xfdmFsBlN0cmluZwJhYQ== +# Packet 16 +peer1_4: !!binary | + AQABAAL/////AAIBBG5hbWUgTG93Q2FyZGluYWxpdHkoTnVsbGFibGUoU3RyaW5nKSkBAAAAAAAA + AAAGAAAAAAAAAgAAAAAAAAAAAAEAAAAAAAAAAAdjb2xfdmFsBlN0cmluZwJiYg== +# Packet 18 +peer1_5: !!binary | + BgICoRUAAAE= +# Packet 20 +peer1_6: !!binary | + AwICAAAA +# Packet 22 +peer1_7: !!binary | + AQABAAL/////AAAA +# Packet 24 +peer1_8: !!binary | + AwAAAAAA +# Packet 26 +peer1_9: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWWbyktgm8pLYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzLT9AIA6vQCAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDdmNGRkMTVmLTNhMjctNDgwYS04MTY2LTEzZWI1YzkzMmQzOSQ3ZjRkZDE1 + Zi0zYTI3LTQ4MGEtODE2Ni0xM2ViNWM5MzJkMzkJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdGUmVhZCAyIHJvd3MsIDIuMDAgQiBpbiAwLjAwMTI2NDk1NCBzZWMu + LCAxNTgxIHJvd3Mvc2VjLiwgMS41NCBLaUIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1 + ZXJ5KTogMC4wMCBCLg== +# Packet 28 +peer1_10: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml b/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks.yaml rename to vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml From 500f03f572d8442ccdf95005517bb2d8ab01a9d5 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 14 Mar 2021 02:10:22 +0300 Subject: [PATCH 102/176] Array support [WIP] Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 59 +++++-- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 118 ++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 16 +- .../impl/codec/columns/ClickhouseColumns.java | 145 +++++++++--------- .../codec/columns/LowCardinalityColumn.java | 15 +- .../impl/codec/columns/PairedIterator.java | 48 ++++++ .../impl/codec/columns/Triplet.java | 25 +++ .../PacketReaderReplayTest.java | 16 +- ...f_nullable_string_without_compression.yaml | 54 +++++++ ...elect_empty_array_without_compression.yaml | 51 ++++++ 11 files changed, 450 insertions(+), 99 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml create mode 100644 vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index f3d314f072..29a5a27f3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -10,7 +10,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final String name; private final String unparsedNativeType; - private final String nativeType; + private final String nestedType; private final JDBCType jdbcType; private final int elementSize; private final boolean isArray; @@ -23,21 +23,42 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + private final ClickhouseNativeColumnDescriptor nested; + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { - this(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null); + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, null, null, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + ClickhouseNativeColumnDescriptor nested) { + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, null, null, nested); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nativeType, + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale) { + this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, + minValue, maxValue, precision, scale, null); + } + + public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + boolean isArray, int elementSize, JDBCType jdbcType, + boolean nullable, boolean unsigned, + boolean lowCardinality, Number minValue, Number maxValue, + Integer precision, Integer scale, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; - this.nativeType = nativeType; + this.nestedType = nestedType; this.isArray = isArray; this.elementSize = elementSize; this.jdbcType = jdbcType; @@ -48,6 +69,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; + this.nested = nested; } private BigInteger bi(Number src) { @@ -100,8 +122,12 @@ public BigInteger getMaxValue() { return maxValue; } - public String getNativeType() { - return nativeType; + public String getNestedType() { + return nestedType; + } + + public ClickhouseNativeColumnDescriptor getNestedDescr() { + return nested; } public Integer getPrecision() { @@ -112,9 +138,22 @@ public Integer getScale() { return scale; } + public ClickhouseNativeColumnDescriptor copyAsNestedArray() { + return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, + JDBCType.ARRAY, false, false, false, null, null, this); + } + + public ClickhouseNativeColumnDescriptor copyAsNonArray() { + return copyWithModifiers(false, lowCardinality, nullable); + } + + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { + return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, nested); + } + public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { - return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nativeType, isArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale); + return copyWithModifiers(isArray, newLowCardinality, newNullable); } @Override @@ -122,7 +161,7 @@ public String toString() { return "ClickhouseNativeColumnDescriptor{" + "name='" + name + '\'' + ", unparsedNativeType='" + unparsedNativeType + '\'' + - ", nativeType='" + nativeType + '\'' + + ", nativeType='" + nestedType + '\'' + ", isArray=" + isArray + ", jdbcType=" + jdbcType + ", elementSize=" + elementSize + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index cfdc92e00e..13572442e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(colName, columnDescriptor, nRows); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java new file mode 100644 index 0000000000..1bf18205e3 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -0,0 +1,118 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ArrayColumn extends ClickhouseColumn { + public static final Object[] EMPTY_ARRAY = new Object[0]; + + private Deque, Integer>> graphLevelDeque; + private List> slicesSeries; + private List slices; + private Integer curDepth; + private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private ClickhouseColumn curNestedColumn; + private Integer nItems; + + public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + super(nRows, descr.copyAsNestedArray()); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (graphLevelDeque == null) { + graphLevelDeque = new ArrayDeque<>(); + graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + slicesSeries = new ArrayList<>(); + slices = new ArrayList<>(); + curDepth = 0; + curNestedColumnDescr = columnDescriptor.getNestedDescr(); + nItems = 0; + } + + if (!graphLevelDeque.isEmpty()) { + readSlices(in); + } + Object[] data; + if (nItems != 0 && nItems > 0) { + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + } else { + assert nItems == curNestedColumn.nRows; + } + data = curNestedColumn.readItemsObjects(in); + } else { + data = EMPTY_ARRAY; + } + return resliceIntoArray(data); + } + + private Object[] resliceIntoArray(Object[] data) { + Object[] intermData = data; + for (int i = slicesSeries.size() - 1; i >= 0; --i) { + List slices = slicesSeries.get(i); + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = new Object[slices.size() - 1]; + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliseSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliseSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliseSz); + newDataList[tmpSliceIdx] = resliced; + ++tmpSliceIdx; + } + intermData = newDataList; + } + return intermData; + } + + private void readSlices(ClickhouseStreamDataSource in) { + while (!graphLevelDeque.isEmpty()) { + Triplet, Integer> sliceState = graphLevelDeque.remove(); + curNestedColumnDescr = sliceState.left().getNestedDescr(); + if (curDepth != sliceState.right().intValue()) { + curDepth = sliceState.right(); + slicesSeries.add(slices); + + //The last element in slice is index(number) of the last + //element in current level. On the last iteration this + //represents number of elements in fully flattened array. + nItems = slices.get(slices.size() - 1); + if (curNestedColumnDescr.isNullable()) { + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + } + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } + slices = new ArrayList<>(); + } + if (curNestedColumnDescr.isArray()) { + slices.add(0); + int prev = 0; + for (int size : sliceState.middle()) { + int nestedSizeCount = size - prev; + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + } + nestedSizes.add((int)sz); + } + slices.addAll(nestedSizes); + prev = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + } + } + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1132377424..4e89e744e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -48,14 +48,24 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } + protected Object[] readItemsObjects(ClickhouseStreamDataSource in) { + return (Object[]) readItems(in); + } + protected abstract Object readItems(ClickhouseStreamDataSource in); protected void afterReadItems(ClickhouseStreamDataSource in) { } protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - int nBytes = nRows / 8 + (nRows % 8 == 0 ? 0 : 1); - if (in.readableBytes() >= nBytes) { - return BitSet.valueOf(in.readSlice(nBytes).nioBuffer()); + if (in.readableBytes() >= nRows) { + BitSet bSet = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + byte b = in.readByte(); + if (b != 0) { + bSet.set(i); + } + } + return bSet; } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 0e00e67a09..11492be340 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -29,23 +29,23 @@ public class ClickhouseColumns { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; - boolean nullable = false; - boolean isArray = false; - boolean isLowCardinality = false; if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); - isArray = true; - throw new IllegalStateException("arrays are not supported"); + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, + JDBCType.ARRAY, false, false, false, null, null, nested); } + boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { spec = spec.substring(LOW_CARDINALITY_PREFIX_LENGTH, spec.length() - 1); isLowCardinality = true; } + boolean nullable = false; if (spec.startsWith(NULLABLE_PREFIX)) { spec = spec.substring(NULLABLE_PREFIX_LENGTH, spec.length() - 1); nullable = true; } - return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, isArray, isLowCardinality); + return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, @@ -97,6 +97,9 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Nothing".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, + JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -113,77 +116,72 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(String name, ClickhouseNativeColumnDescriptor descr, int nRows) { - if (descr == null) { - throw new IllegalArgumentException("no parsed spec for column name: " + name); + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows) { + if (descr.isArray()) { + return new ArrayColumn(nRows, descr); } if (descr.isLowCardinality()) { - ClickhouseNativeColumnDescriptor nestedDescr = descr.copyWithModifiers(false, false); - return new LowCardinalityColumn(nRows, descr, nestedDescr); + return new LowCardinalityColumn(nRows, descr); } JDBCType jdbcType = descr.jdbcType(); - if (descr.isArray()) { - throw new IllegalStateException("arrays are not supported"); - } else { - if (jdbcType == JDBCType.TINYINT) { - return new UInt8Column(nRows, descr); - } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nRows, descr); - } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nRows, descr); - } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { - return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { - return new UInt128Column(nRows, descr); - } - } else if (jdbcType == JDBCType.VARCHAR) { - if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr); - } else { - return new FixedStringColumn(nRows, descr); - } - } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { - ZoneId zoneId; - Integer precision = null; - String nativeType = descr.getNativeType(); - if (nativeType.endsWith(")")) { - int openBracePos = nativeType.indexOf("("); - String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { - String[] modifiers = dateModifiers.split(","); - precision = Integer.parseInt(modifiers[0].trim()); - zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1].trim()) - : ZoneId.systemDefault(); - } else { - zoneId = ZoneId.of(dateModifiers); - } + if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { + return new UInt8Column(nRows, descr); + } else if (jdbcType == JDBCType.SMALLINT) { + return new UInt16Column(nRows, descr); + } else if (jdbcType == JDBCType.INTEGER) { + return new UInt32Column(nRows, descr); + } else if (jdbcType == JDBCType.BIGINT) { + if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { + return new UInt64Column(nRows, descr); + } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { + return new UInt128Column(nRows, descr); + } + } else if (jdbcType == JDBCType.VARCHAR) { + if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + return new StringColumn(nRows, descr); + } else { + return new FixedStringColumn(nRows, descr); + } + } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { + ZoneId zoneId; + Integer precision = null; + String nativeType = descr.getNestedType(); + if (nativeType.endsWith(")")) { + int openBracePos = nativeType.indexOf("("); + String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { + String[] modifiers = dateModifiers.split(","); + precision = Integer.parseInt(modifiers[0].trim()); + zoneId = modifiers.length == 2 + ? ZoneId.of(modifiers[1].trim()) + : ZoneId.systemDefault(); } else { - zoneId = ZoneId.systemDefault(); + zoneId = ZoneId.of(dateModifiers); } - return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); - } else if (jdbcType == JDBCType.DECIMAL) { - //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { - return new Decimal32Column(nRows, descr); - } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { - return new Decimal64Column(nRows, descr); - } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { - return new Decimal128Column(nRows, descr); - } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { - return new Decimal256Column(nRows, descr); - } - } else if (jdbcType == JDBCType.OTHER) { - if (descr.getNativeType().equals("UUID")) { - return new UUIDColumn(nRows, descr); - } else if (descr.getNativeType().startsWith(ENUM_PREFIX)) { - Map enumVals = parseEnumVals(descr.getNativeType()); - if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { - return new Enum8Column(nRows, descr, enumVals); - } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { - return new Enum16Column(nRows, descr, enumVals); - } + } else { + zoneId = ZoneId.systemDefault(); + } + return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + } else if (jdbcType == JDBCType.DECIMAL) { + //TODO smagellan: merge into one statement after introducing column readers + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { + return new Decimal32Column(nRows, descr); + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { + return new Decimal64Column(nRows, descr); + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { + return new Decimal128Column(nRows, descr); + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { + return new Decimal256Column(nRows, descr); + } + } else if (jdbcType == JDBCType.OTHER) { + if (descr.getNestedType().equals("UUID")) { + return new UUIDColumn(nRows, descr); + } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { + Map enumVals = parseEnumVals(descr.getNestedType()); + if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { + return new Enum8Column(nRows, descr, enumVals); + } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { + return new Enum16Column(nRows, descr, enumVals); } } } @@ -242,4 +240,9 @@ private static Number byteOrShort(int number, boolean isByte) { } return (short) number; } + + public static void main(String[] args) { + ClickhouseNativeColumnDescriptor t = columnDescriptorForSpec("Array(Array(LowCardinality(Nullable(String))))", "fake"); + System.err.println(t); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index fd6d4c2fde..25af66699b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -14,14 +14,13 @@ public class LowCardinalityColumn extends ClickhouseColumn { private ClickhouseColumn keysColumn; - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexDescr) { + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { super(nRows, descr); - this.indexDescr = indexDescr; + this.indexDescr = descr.copyWithModifiers(false, false); } @Override protected void readStatePrefix(ClickhouseStreamDataSource in) { - //KeysSerializationVersion if (keysSerializationVersion == null) { if (in.readableBytes() >= 4) { keysSerializationVersion = in.readLongLE(); @@ -37,10 +36,10 @@ protected void readData(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { return; } - if (in.readableBytes() < 8 + 8) { - return; - } if (indexSize == null) { + if (in.readableBytes() < 8 + 8) { + return; + } serType = in.readLongLE(); indexSize = in.readLongLE(); } @@ -48,7 +47,7 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr.name(), indexDescr, indexSize.intValue()); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue()); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -103,6 +102,6 @@ private ClickhouseColumn uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(name, tmp, nRows); + return ClickhouseColumns.columnForSpec(tmp, nRows); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java new file mode 100644 index 0000000000..f00c3f5dbf --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class PairedIterator implements Iterator> { + private final Iterator wrapped1; + private final Iterator wrapped2; + + private PairedIterator(Iterator wrapped1, Iterator wrapped2) { + this.wrapped1 = wrapped1; + this.wrapped2 = wrapped2; + } + + @Override + public boolean hasNext() { + return wrapped1.hasNext() && wrapped2.hasNext(); + } + + @Override + public Map.Entry next() { + T key = wrapped1.next(); + T val = wrapped2.next(); + return new AbstractMap.SimpleEntry<>(key, val); + } + + public static Iterator> of(List src) { + if (src.size() <= 1) { + return Collections.emptyIterator(); + } + + Iterator iter2 = src.iterator(); + iter2.next(); + return new PairedIterator<>(src.iterator(), iter2); + } + + public static void main(String[] args) { + Iterator> iter = PairedIterator.of(Arrays.asList("A", "B", "C")); + while (iter.hasNext()) { + Map.Entry n = iter.next(); + System.err.println(n.getKey() + "; " + n.getValue()); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java new file mode 100644 index 0000000000..6a53721df7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -0,0 +1,25 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class Triplet { + private final L left; + private final M middle; + private final R right; + + public Triplet(L left, M middle, R right) { + this.left = left; + this.middle = middle; + this.right = right; + } + + public L left() { + return left; + } + + public M middle() { + return middle; + } + + public R right() { + return right; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index bceea58939..5f9f907405 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -37,12 +37,16 @@ public static Iterable dataForTest() throws IOException { mapper.findAndRegisterModules(); List result = new ArrayList<>(); - int continuousOffset = 8; - for (String replayFile : Arrays.asList("/insert_prepare_with_compression.yaml", - "/with_max_block_size_and_2_datablocks_with_compression.yaml", - "/nullable_low_cardinality_with_compression.yaml", - "/nullable_low_cardinality_without_compression.yaml" - )) { + final int continuousOffset = 8; + List replayFiles = Arrays.asList( + "/insert_prepare_with_compression.yaml", + "/with_max_block_size_and_2_datablocks_with_compression.yaml", + "/nullable_low_cardinality_with_compression.yaml", + "/nullable_low_cardinality_without_compression.yaml", + "/select_array_of_nullable_string_without_compression.yaml", + "/select_empty_array_without_compression.yaml" + ); + for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); diff --git a/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml new file mode 100644 index 0000000000..dc4e98db59 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml @@ -0,0 +1,54 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAE1TRUxFQ1QgYXJyYXkoYXJyYXkoJ0En + LCAnQicpLCBhcnJheSgnQycsIE5VTEwpKSBBUyBSRVNPVVJDRSwgJ2FhJyBBUyBzdHJfY29sMgIA + AQAC/////wAAAA== +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWWHD01gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMhrUCwAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJGJl + YjVhM2MzLTFmYjYtNDRjMS04OTg1LTZhNTBmYWU5NGE5Ygl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmd9 + KGZyb20gMTI3LjAuMC4xOjQ1MzkyLCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUIGFy + cmF5KGFycmF5KCdBJywgJ0InKSwgYXJyYXkoJ0MnLCBOVUxMKSkgQVMgUkVTT1VSQ0UsICdhYScg + QVMgc3RyX2NvbDI= +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIACFJFU09VUkNFHkFycmF5KEFycmF5KE51bGxhYmxlKFN0cmluZykpKQhzdHJf + Y29sMgZTdHJpbmc= +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBCFJFU09VUkNFHkFycmF5KEFycmF5KE51bGxhYmxlKFN0cmluZykpKQIAAAAA + AAAAAgAAAAAAAAAEAAAAAAAAAAAAAAEBQQFCAUMACHN0cl9jb2wyBlN0cmluZwJhYQ== +# Packet 16 +peer1_4: !!binary | + BgEBkCMAAAE= +# Packet 18 +peer1_5: !!binary | + AwEBAAAA +# Packet 20 +peer1_6: !!binary | + AQABAAL/////AAAA +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWWHD01ghw9NYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzJF3AsAZNwLAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJGJlYjVhM2MzLTFmYjYtNDRjMS04OTg1LTZhNTBmYWU5NGE5YiRiZWI1YTNj + My0xZmI2LTQ0YzEtODk4NS02YTUwZmFlOTRhOWIJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdDUmVhZCAxIHJvd3MsIDEuMDAgQiBpbiAwLjAwMjA0MzMgc2VjLiwg + NDg5IHJvd3Mvc2VjLiwgNDg5LjQwIEIvc2VjLiZQZWFrIG1lbW9yeSB1c2FnZSAoZm9yIHF1ZXJ5 + KTogMC4wMCBCLg== +# Packet 26 +peer1_9: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml new file mode 100644 index 0000000000..623565af0d --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml @@ -0,0 +1,51 @@ +# Packet 4 +peer0_0: !!binary | + ABhDbGlja0hvdXNlIGp5dGhvbi1kcml2ZXIUCqmpAwdkZWZhdWx0B2RlZmF1bHQHZGVmYXVsdA== +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2UYQ2xpY2tIb3VzZSBqeXRob24tZHJpdmVy + FAqpqQMAAg9zZW5kX2xvZ3NfbGV2ZWwBBWRlYnVnAAACAChTRUxFQ1QgYXJyYXkoKSBBUyBuYW1l + LCAncjEnIGFzIGNvbF9uYW1lAgABAAL/////AAAA +# Packet 10 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWVbQE1gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMpfaCwAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDNm + MzNlYmI0LWJkYTItNDcwNy04YjhhLTgwMzFiNTBmMzg0YQl0aHJlYWRfaWQGVUludDY0HxUFAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmdY + KGZyb20gMTI3LjAuMC4xOjM3ODk4LCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUIGFy + cmF5KCkgQVMgbmFtZSwgJ3IxJyBhcyBjb2xfbmFtZQ== +# Packet 12 +peer1_2: !!binary | + AQABAAL/////AAIABG5hbWUOQXJyYXkoTm90aGluZykIY29sX25hbWUGU3RyaW5n +# Packet 14 +peer1_3: !!binary | + AQABAAL/////AAIBBG5hbWUOQXJyYXkoTm90aGluZykAAAAAAAAAAAhjb2xfbmFtZQZTdHJpbmcC + cjE= +# Packet 16 +peer1_4: !!binary | + BgEB0EAAAAE= +# Packet 18 +peer1_5: !!binary | + AwEBAAAA +# Packet 20 +peer1_6: !!binary | + AQABAAL/////AAAA +# Packet 22 +peer1_7: !!binary | + AwAAAAAA +# Packet 24 +peer1_8: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVbQE1gW0BNYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzIe4AsASuALAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDNmMzNlYmI0LWJkYTItNDcwNy04YjhhLTgwMzFiNTBmMzg0YSQzZjMzZWJi + NC1iZGEyLTQ3MDctOGI4YS04MDMxYjUwZjM4NGEJdGhyZWFkX2lkBlVJbnQ2NB8VBQAAAAAAHxUF + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdFUmVhZCAxIHJvd3MsIDEuMDAgQiBpbiAwLjAwMTM1ODQwMSBzZWMu + LCA3MzYgcm93cy9zZWMuLCA3MzYuMTYgQi9zZWMuJlBlYWsgbWVtb3J5IHVzYWdlIChmb3IgcXVl + cnkpOiAwLjAwIEIu +# Packet 26 +peer1_9: !!binary | + BQ== From f1e06360ec80beae3d2a3128b9d790313d42f402 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 14 Mar 2021 17:23:16 +0300 Subject: [PATCH 103/176] skip bytes if element is NULL Signed-off-by: vladimir --- .../codec/ClickhouseStreamDataSource.java | 1 + .../codec/Lz4ClickhouseStreamDataSource.java | 5 ++++ .../codec/RawClickhouseStreamDataSource.java | 5 ++++ .../impl/codec/columns/ArrayColumn.java | 25 +++++++++---------- .../impl/codec/columns/DateTime64Column.java | 8 +++--- .../impl/codec/columns/DateTimeColumn.java | 4 ++- .../impl/codec/columns/Decimal128Column.java | 10 +++++--- .../impl/codec/columns/Decimal256Column.java | 10 +++++--- .../impl/codec/columns/Decimal32Column.java | 8 ++++-- .../impl/codec/columns/Decimal64Column.java | 8 ++++-- .../impl/codec/columns/FixedStringColumn.java | 13 +++++++--- .../codec/columns/LowCardinalityColumn.java | 9 ++++++- .../impl/codec/columns/StringColumn.java | 11 +++++--- .../impl/codec/columns/UInt128Column.java | 8 ++++-- .../impl/codec/columns/UInt16Column.java | 6 ++++- .../impl/codec/columns/UInt32Column.java | 6 ++++- .../impl/codec/columns/UInt64Column.java | 6 ++++- .../impl/codec/columns/UInt8Column.java | 6 ++++- .../impl/codec/columns/UUIDColumn.java | 10 +++++--- 19 files changed, 116 insertions(+), 43 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 5fcd69ae2e..5ef9c9c6c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -6,6 +6,7 @@ public interface ClickhouseStreamDataSource { void moreData(ByteBuf buf, ByteBufAllocator ctx); int readableBytes(); + void skipBytes(int length); String readPascalString(); Integer readULeb128(); Boolean readBoolean(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index ee29f6736f..4f8bb1e840 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -116,6 +116,11 @@ public int readableBytes() { return decompressedData.readableBytes(); } + @Override + public void skipBytes(int length) { + decompressedData.skipBytes(length); + } + @Override public String readPascalString() { return ByteBufUtils.readPascalString(decompressedData); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 48846b95e3..30eb05042e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -20,6 +20,11 @@ public int readableBytes() { return source.readableBytes(); } + @Override + public void skipBytes(int length) { + source.skipBytes(length); + } + @Override public String readPascalString() { return ByteBufUtils.readPascalString(source); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 1bf18205e3..7864003099 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -12,7 +12,7 @@ import java.util.Map; public class ArrayColumn extends ClickhouseColumn { - public static final Object[] EMPTY_ARRAY = new Object[0]; + private static final Object[] EMPTY_ARRAY = new Object[0]; private Deque, Integer>> graphLevelDeque; private List> slicesSeries; @@ -37,10 +37,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } - - if (!graphLevelDeque.isEmpty()) { - readSlices(in); - } + readSlices(in); Object[] data; if (nItems != 0 && nItems > 0) { if (curNestedColumn == null) { @@ -48,11 +45,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { } else { assert nItems == curNestedColumn.nRows; } - data = curNestedColumn.readItemsObjects(in); + curNestedColumn.itemsArray = curNestedColumn.readItemsObjects(in); } else { data = EMPTY_ARRAY; } - return resliceIntoArray(data); + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } private Object[] resliceIntoArray(Object[] data) { @@ -64,9 +61,9 @@ private Object[] resliceIntoArray(Object[] data) { int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); - int newSliseSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliseSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliseSz); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliceSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); newDataList[tmpSliceIdx] = resliced; ++tmpSliceIdx; } @@ -76,11 +73,13 @@ private Object[] resliceIntoArray(Object[] data) { } private void readSlices(ClickhouseStreamDataSource in) { + //TODO smagellan: simplify the loop while (!graphLevelDeque.isEmpty()) { Triplet, Integer> sliceState = graphLevelDeque.remove(); curNestedColumnDescr = sliceState.left().getNestedDescr(); - if (curDepth != sliceState.right().intValue()) { - curDepth = sliceState.right(); + Integer newDepth = sliceState.right(); + if (curDepth != newDepth.intValue()) { + curDepth = newDepth; slicesSeries.add(slices); //The last element in slice is index(number) of the last @@ -106,7 +105,7 @@ private void readSlices(ClickhouseStreamDataSource in) { if (sz > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); } - nestedSizes.add((int)sz); + nestedSizes.add((int) sz); } slices.addAll(nestedSizes); prev = size; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 7aa798e0aa..70516acb46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -25,12 +25,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { - BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); - long seconds = bi.divide(invTickSize).longValueExact(); - long nanos = bi.remainder(invTickSize).longValueExact(); if (nullsMap == null || !nullsMap.get(i)) { + BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index bea3c10be1..b28c66f70a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -22,10 +22,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { - long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); if (nullsMap == null || !nullsMap.get(i)) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index f79e4a6ef3..dec17fcdf6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -26,9 +26,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index c0ec433e62..4d926d168f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -26,9 +26,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 2722d3b46a..eb1884f66e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -23,8 +23,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigDecimal[] data = new BigDecimal[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { - int item = in.readIntLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + int item = in.readIntLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 99cb4790f1..548448edc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -23,8 +23,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigDecimal[] data = new BigDecimal[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { - long item = in.readLongLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + if (nullsMap == null || !nullsMap.get(i)) { + long item = in.readLongLE(); + data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 66a1acac32..cd780add19 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -16,12 +16,19 @@ protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDe @Override protected Object[] readItems(ClickhouseStreamDataSource in) { + int elementSize = columnDescriptor.getElementSize(); while (elements.size() < nRows) { - if (in.readableBytes() < columnDescriptor.getElementSize()) { + if (in.readableBytes() < elementSize) { return null; } - byte[] stringBytes = new byte[columnDescriptor.getElementSize()]; - in.readBytes(stringBytes); + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[elementSize]; + in.readBytes(stringBytes); + } else { + in.skipBytes(elementSize); + stringBytes = null; + } elements.add(stringBytes); } Object[] ret = elements.toArray(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 25af66699b..19ad9c79f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -3,6 +3,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.util.BitSet; + public class LowCardinalityColumn extends ClickhouseColumn { private final ClickhouseNativeColumnDescriptor indexDescr; @@ -31,6 +33,11 @@ protected void readStatePrefix(ClickhouseStreamDataSource in) { } } + @Override + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + return null; + } + @Override protected void readData(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { @@ -90,7 +97,7 @@ public Object getElement(int rowIdx) { private ClickhouseColumn uintColumn(int code) { ClickhouseNativeColumnDescriptor tmp; String name = columnDescriptor.name(); - //TODO smagellan: introduce immutable column readers, reuse cached instances + //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances if (code == 0) { tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); } else if (code == 1) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index faa1b1e89e..15da7bd2aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,6 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ByteBufUtils; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; @@ -28,8 +27,14 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } - byte[] stringBytes = new byte[curStrLength]; - in.readBytes(stringBytes); + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + } else { + stringBytes = null; + in.skipBytes(curStrLength); + } elements.add(stringBytes); curStrLength = null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 8e62765edf..2ef59fec5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -20,8 +20,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { BigInteger[] data = new BigInteger[nRows]; byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { - in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 90393cdf64..ebe15289cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { short[] data = new short[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readShortLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readShortLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 1da0fdffbf..3b0d1bd2c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { int[] data = new int[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readIntLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readIntLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 65a7e52b3a..cca8b08d67 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -17,7 +17,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readLongLE(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readLongLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index b77ec19f81..9cf1d92bc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -15,7 +15,11 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { byte[] data = new byte[nRows]; for (int i = 0; i < nRows; ++i) { - data[i] = in.readByte(); + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readByte(); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index c06e25b656..d812b91702 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -17,9 +17,13 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { UUID[] data = new UUID[nRows]; for (int i = 0; i < nRows; ++i) { - long mostSigBits = in.readLongLE(); - long leastSigBits = in.readLongLE(); - data[i] = new UUID(mostSigBits, leastSigBits); + if (nullsMap == null || !nullsMap.get(i)) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } else { + in.skipBytes(ELEMENT_SIZE); + } } return data; } From d97b16bfbcd1472e62f5d12cf7b66c919591584c Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 21:17:22 +0300 Subject: [PATCH 104/176] Added Date,Float32,Float64 columns; added ClickhouseNativeBinaryDataTypeDecodeTest Signed-off-by: vladimir --- .../clickhousenative/impl/BaseBlock.java | 2 - .../impl/ClickhouseNativeRow.java | 11 +- .../codec/ClickhouseStreamDataSource.java | 10 +- .../impl/codec/ExtendedQueryCommandCodec.java | 14 ++- .../codec/Lz4ClickhouseStreamDataSource.java | 14 ++- .../codec/RawClickhouseStreamDataSource.java | 14 ++- .../impl/codec/SimpleQueryCommandCodec.java | 2 + .../impl/codec/columns/ArrayColumn.java | 11 +- .../impl/codec/columns/ClickhouseColumn.java | 21 +++- .../impl/codec/columns/ClickhouseColumns.java | 15 +++ .../impl/codec/columns/ColumnSpec.java | 16 --- .../impl/codec/columns/DateColumn.java | 19 +++ .../impl/codec/columns/Decimal128Column.java | 5 +- .../impl/codec/columns/Decimal256Column.java | 5 +- .../impl/codec/columns/Decimal32Column.java | 5 +- .../impl/codec/columns/Decimal64Column.java | 5 +- .../impl/codec/columns/Float32Column.java | 29 +++++ .../impl/codec/columns/Float64Column.java | 29 +++++ .../impl/codec/columns/UInt16Column.java | 5 + .../impl/codec/columns/UInt32Column.java | 5 + .../impl/codec/columns/UInt64Column.java | 5 + .../impl/codec/columns/UInt8Column.java | 5 + ...ckhouseNativeBinaryDataTypeDecodeTest.java | 116 ++++++++++++++++++ .../tck/ClientConfig.java | 36 ++++++ .../src/test/resources/init.sql | 42 +++++++ .../tck/BinaryDataTypeDecodeTestBase.java | 4 +- 26 files changed, 393 insertions(+), 52 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/init.sql diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 5f25466814..a6712e8105 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -2,9 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ColumnSpec; -import java.util.Collection; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index 526445601c..8be95d677d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -6,6 +6,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.sql.JDBCType; import java.util.List; public class ClickhouseNativeRow implements Row { @@ -34,7 +35,13 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { List data = block.getData(); - return data.get(columnIndex).getElement(rowNo); + ClickhouseColumn column = data.get(columnIndex); + Object columnData = column.getElement(rowNo); + if (columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { + return new String((byte[]) columnData, stringCharset); + } else { + return columnData; + } } @Override @@ -60,7 +67,7 @@ public Tuple addValue(Object value) { @Override public int size() { - return block.numRows(); + return block.numColumns(); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 5ef9c9c6c2..dfb768e1b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -9,13 +9,15 @@ public interface ClickhouseStreamDataSource { void skipBytes(int length); String readPascalString(); Integer readULeb128(); - Boolean readBoolean(); - Integer readIntLE(); + boolean readBoolean(); + int readIntLE(); + long readLongLE(); + short readShortLE(); + float readFloatLE(); + double readDoubleLE(); ByteBuf readSlice(int nBytes); void readBytes(byte[] dst); byte readByte(); - long readLongLE(); - short readShortLE(); String hexdump(); default void finish(){ } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index eab456fc70..eb769ab140 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -15,7 +15,7 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn, true); + super(cmd, conn, cmd.fetch() > 0); } @Override @@ -34,12 +34,14 @@ protected Map settings() { String fetchSize = Integer.toString(ecmd().fetch()); Map defaultSettings = super.settings(); String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); - if (!Objects.equals(defaultFetchSize, fetchSize)) { - if (LOG.isWarnEnabled() && defaultFetchSize != null) { - LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + if (!"0".equals(fetchSize)) { + if (!Objects.equals(defaultFetchSize, fetchSize)) { + if (LOG.isWarnEnabled() && defaultFetchSize != null) { + LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + } + defaultSettings = new HashMap<>(defaultSettings); + defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); } - defaultSettings = new HashMap<>(defaultSettings); - defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); } return defaultSettings; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 4f8bb1e840..1177e27388 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -132,12 +132,12 @@ public Integer readULeb128() { } @Override - public Boolean readBoolean() { + public boolean readBoolean() { return decompressedData.readBoolean(); } @Override - public Integer readIntLE() { + public int readIntLE() { return decompressedData.readIntLE(); } @@ -166,6 +166,16 @@ public short readShortLE() { return decompressedData.readShortLE(); } + @Override + public float readFloatLE() { + return decompressedData.readFloatLE(); + } + + @Override + public double readDoubleLE() { + return decompressedData.readDoubleLE(); + } + @Override public String hexdump() { return ByteBufUtil.hexDump(decompressedData); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 30eb05042e..e9cd54fdfc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -36,12 +36,12 @@ public Integer readULeb128() { } @Override - public Boolean readBoolean() { + public boolean readBoolean() { return source.readBoolean(); } @Override - public Integer readIntLE() { + public int readIntLE() { return source.readIntLE(); } @@ -70,6 +70,16 @@ public short readShortLE() { return source.readShortLE(); } + @Override + public float readFloatLE() { + return source.readFloatLE(); + } + + @Override + public double readDoubleLE() { + return source.readDoubleLE(); + } + @Override public String hexdump() { return source != null diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index d65be3763d..196844d19f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -75,6 +75,7 @@ private ClickhouseStreamDataSink dataSink(ByteBuf buf) { } private void sendQuery(String query, ByteBuf buf) { + LOG.info("running query: " + query); ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); //query id ByteBufUtils.writePascalString("", buf); @@ -148,6 +149,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { + //TODO smagellan: handle connection errors (e.g. table does not exist, wrong password, no column with given name, etc) String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 7864003099..2bb9d9adba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -38,18 +38,16 @@ protected Object readItems(ClickhouseStreamDataSource in) { nItems = 0; } readSlices(in); - Object[] data; - if (nItems != 0 && nItems > 0) { + if (nItems > 0) { if (curNestedColumn == null) { curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); } else { assert nItems == curNestedColumn.nRows; } - curNestedColumn.itemsArray = curNestedColumn.readItemsObjects(in); - } else { - data = EMPTY_ARRAY; + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in); + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + return resliceIntoArray(EMPTY_ARRAY); } private Object[] resliceIntoArray(Object[] data) { @@ -74,6 +72,7 @@ private Object[] resliceIntoArray(Object[] data) { private void readSlices(ClickhouseStreamDataSource in) { //TODO smagellan: simplify the loop + //TODO smagellan: handle fragmented reads while (!graphLevelDeque.isEmpty()) { Triplet, Integer> sliceState = graphLevelDeque.remove(); curNestedColumnDescr = sliceState.left().getNestedDescr(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 4e89e744e1..e9f8555bd1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -16,6 +16,10 @@ protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDes this.nRows = nRows; } + public ClickhouseNativeColumnDescriptor columnDescriptor() { + return columnDescriptor; + } + public void readColumn(ClickhouseStreamDataSource in){ readStatePrefix(in); readData(in); @@ -48,8 +52,21 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsObjects(ClickhouseStreamDataSource in) { - return (Object[]) readItems(in); + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in) { + itemsArray = readItems(in); + return asObjectsArray(); + } + + protected Object[] asObjectsArray() { + return (Object[]) itemsArray; + } + + protected Object[] asObjectsArrayWithGetElement() { + Object[] ret = new Object[nRows]; + for (int i = 0; i < nRows; ++i) { + ret[i] = getElement(i); + } + return ret; } protected abstract Object readItems(ClickhouseStreamDataSource in); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 11492be340..e05b677814 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -100,6 +100,15 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if ("Nothing".equals(spec)) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Float32".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32Column.ELEMENT_SIZE, + JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Float64".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64Column.ELEMENT_SIZE, + JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); + } else if ("Date".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, + JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } @@ -173,6 +182,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(nRows, descr); } + } else if (jdbcType == JDBCType.REAL) { + return new Float32Column(nRows, descr); + } else if (jdbcType == JDBCType.DOUBLE) { + return new Float64Column(nRows, descr); + } else if (jdbcType == JDBCType.DATE) { + return new DateColumn(nRows, descr); } else if (jdbcType == JDBCType.OTHER) { if (descr.getNestedType().equals("UUID")) { return new UUIDColumn(nRows, descr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java deleted file mode 100644 index a1c22beea0..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnSpec.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -public enum ColumnSpec { - UInt32(4), - String(null); - - private final Integer elementSize; - - ColumnSpec(Integer elementSize) { - this.elementSize = elementSize; - } - - public Integer elSize() { - return elementSize; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java new file mode 100644 index 0000000000..60c5104a18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -0,0 +1,19 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.LocalDate; + +public class DateColumn extends UInt16Column { + public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + + public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx) { + Integer offset = (Integer) super.getElementInternal(rowIdx); + return MIN_DATE.plusDays(offset); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index dec17fcdf6..29776ae004 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -3,6 +3,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -22,14 +23,14 @@ protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 4d926d168f..8efda94298 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -3,6 +3,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -22,14 +23,14 @@ protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); byte[] readBuffer = new byte[ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = new BigDecimal(bi, scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index eb1884f66e..5201c6642b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -20,12 +21,12 @@ protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { int item = in.readIntLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 548448edc7..52516e330c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; import java.math.BigInteger; @@ -20,12 +21,12 @@ protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigDecimal[] data = new BigDecimal[nRows]; + Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { long item = in.readLongLE(); - data[i] = new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java new file mode 100644 index 0000000000..f8d0451ae7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + + protected Float32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + float[] data = new float[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readFloatLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java new file mode 100644 index 0000000000..76d0b31343 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + + protected Float64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + double[] data = new double[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readDoubleLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index ebe15289cc..586e21a9f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 3b0d1bd2c3..ce5383ff7f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index cca8b08d67..313fb8fbaf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -37,6 +37,11 @@ protected Object getElementInternal(int rowIdx) { return element; } + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } + static BigInteger unsignedBi(long l) { return new BigInteger(1, new byte[] { (byte) (l >>> 56 & 0xFF), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 9cf1d92bc7..02893d1fcd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -34,4 +34,9 @@ protected Object getElementInternal(int rowIdx) { } return element; } + + @Override + protected Object[] asObjectsArray() { + return asObjectsArrayWithGetElement(); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java new file mode 100644 index 0000000000..e88cfce956 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -0,0 +1,116 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.tck.BinaryDataTypeDecodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.sql.JDBCType; +import java.time.LocalDate; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + public ClickhouseNativeBinaryDataTypeDecodeTest() { + NUMERIC_TYPE = JDBCType.DECIMAL; + } + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Test + public void testBoolean(TestContext ctx) { + testDecodeGeneric(ctx, "test_boolean", Byte.class, JDBCType.TINYINT, (byte) 1); + } + + @Test + public void testSelectAll(TestContext ctx) { + //no time support + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery("SELECT " + + "test_int_2," + + "test_int_4," + + "test_int_8," + + "test_float_4," + + "test_float_8," + + "test_numeric," + + "test_decimal," + + "test_boolean," + + "test_char," + + "test_varchar," + + "test_date " + + "from basicdatatype where id = 1").execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(11, row.size()); + ctx.assertEquals((short) 32767, row.getShort(0)); + ctx.assertEquals(Short.valueOf((short) 32767), row.getShort("test_int_2")); + ctx.assertEquals(2147483647, row.getInteger(1)); + ctx.assertEquals(2147483647, row.getInteger("test_int_4")); + ctx.assertEquals(9223372036854775807L, row.getLong(2)); + ctx.assertEquals(9223372036854775807L, row.getLong("test_int_8")); + ctx.assertEquals(3.40282E38F, row.getFloat(3)); + ctx.assertEquals(3.40282E38F, row.getFloat("test_float_4")); + ctx.assertEquals(1.7976931348623157E308, row.getDouble(4)); + ctx.assertEquals(1.7976931348623157E308, row.getDouble("test_float_8")); + ctx.assertEquals(Numeric.create(999.99), row.get(Numeric.class, 5)); + ctx.assertEquals(Numeric.create(999.99), row.getValue("test_numeric")); + ctx.assertEquals(Numeric.create(12345), row.get(Numeric.class, 6)); + ctx.assertEquals(Numeric.create(12345), row.getValue("test_decimal")); + ctx.assertEquals((byte)1, row.getValue(7)); + ctx.assertEquals((byte)1, row.getValue("test_boolean")); + ctx.assertEquals("testchar", row.getString(8)); + ctx.assertEquals("testchar", row.getString("test_char")); + ctx.assertEquals("testvarchar", row.getString(9)); + ctx.assertEquals("testvarchar", row.getString("test_varchar")); + ctx.assertEquals(LocalDate.parse("2019-01-01"), row.getValue(10)); + ctx.assertEquals(LocalDate.parse("2019-01-01"), row.getValue("test_date")); + conn.close(); + })); + })); + } + + @Test + public void testNullValues(TestContext ctx) { + //no time support + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery("SELECT " + + "test_int_2," + + "test_int_4," + + "test_int_8," + + "test_float_4," + + "test_float_8," + + "test_numeric," + + "test_decimal," + + "test_boolean," + + "test_char," + + "test_varchar," + + "test_date " + + "from basicdatatype where id = 3").execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(11, row.size()); + for (int i = 0; i < 11; i++) { + ctx.assertNull(row.getValue(i)); + } + conn.close(); + })); + })); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //No time support + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java new file mode 100644 index 0000000000..ccbb73b10d --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -0,0 +1,36 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.AsyncResult; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Vertx; +import io.vertx.sqlclient.SqlClient; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.Connector; + +public enum ClientConfig { + CONNECT() { + @Override + Connector connect(Vertx vertx, SqlConnectOptions options) { + return new Connector() { + @Override + public void connect(Handler> handler) { + ClickhouseNativeConnection.connect(vertx, new ClickhouseNativeConnectOptions(options.toJson()), ar -> { + if (ar.succeeded()) { + handler.handle(Future.succeededFuture(ar.result())); + } else { + handler.handle(Future.failedFuture(ar.cause())); + } + }); + } + @Override + public void close() { + } + }; + } + }; + + abstract Connector connect(Vertx vertx, SqlConnectOptions options); +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql new file mode 100644 index 0000000000..b9f03e748a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -0,0 +1,42 @@ + +# USE testschema; +# datatype testing table +-- basic data type table -- +-- used by TCK +DROP TABLE IF EXISTS basicdatatype; +CREATE TABLE basicdatatype +( + id Int16, + test_int_2 Nullable(Int16), + test_int_4 Nullable(Int32), + test_int_8 Nullable(Int64), + test_float_4 Nullable(FLOAT), + test_float_8 Nullable(DOUBLE), + test_numeric Nullable(DECIMAL64(2)), + test_decimal Nullable(DECIMAL64(0)), + test_boolean Nullable(BOOLEAN), + test_char Nullable(FixedString(8)), + test_varchar Nullable(String(20)), + test_date Nullable(DATE) +) engine = MergeTree() + ORDER BY (id); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, + test_date) +VALUES (1, 32767, 2147483647, 9223372036854775807, + 3.40282E38, 1.7976931348623157E308, 999.99, 12345, + 1, 'testchar', 'testvarchar', + '2019-01-01'); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, + test_date) +VALUES (2, 32767, 2147483647, 9223372036854775807, + 3.40282E38, 1.7976931348623157E308, 999.99, 12345, + 1, 'testchar', 'testvarchar', + '2019-01-01'); +INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, + test_float_4, test_float_8, test_numeric, test_decimal, + test_boolean, test_char, test_varchar, test_date) +VALUES (3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java index 362962cf18..504ff3250b 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeDecodeTestBase.java @@ -178,8 +178,8 @@ public void testSelectAll(TestContext ctx) { ctx.assertEquals(LocalTime.parse("18:45:02"), row.getValue("test_time")); conn.close(); })); - })); - } + })); + } @Test public void testToJsonObject(TestContext ctx) { From cc27188873f60f7950230db8e8e18d32452f07fc Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 22:44:03 +0300 Subject: [PATCH 105/176] added ClickhouseNativeCollectorTest Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 4 ---- .../tck/ClickhouseNativeCollectorTest.java | 18 ++++++++++++++++ .../src/test/resources/init.sql | 21 +++++++++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 196844d19f..6b12c5336a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -175,13 +175,9 @@ private void notifyOperationUpdate(boolean hasMoreResults) { if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); - if (failure != null) { - failure = new RuntimeException(failure); - } T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java new file mode 100644 index 0000000000..8b38533fbd --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -0,0 +1,18 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.CollectorTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeCollectorTest extends CollectorTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index b9f03e748a..680c881d90 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -10,8 +10,8 @@ CREATE TABLE basicdatatype test_int_2 Nullable(Int16), test_int_4 Nullable(Int32), test_int_8 Nullable(Int64), - test_float_4 Nullable(FLOAT), - test_float_8 Nullable(DOUBLE), + test_float_4 Nullable(Float32), + test_float_8 Nullable(Float64), test_numeric Nullable(DECIMAL64(2)), test_decimal Nullable(DECIMAL64(0)), test_boolean Nullable(BOOLEAN), @@ -40,3 +40,20 @@ INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_float_4, test_float_8, test_numeric, test_decimal, test_boolean, test_char, test_varchar, test_date) VALUES (3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- Collector API testing -- +-- used by TCK +DROP TABLE IF EXISTS collector_test; +CREATE TABLE collector_test +( + id Int16, + test_int_2 Int16, + test_int_4 Int32, + test_int_8 Int64, + test_float Float32, + test_double Float64, + test_varchar VARCHAR(20) +) engine = MergeTree() + ORDER BY (id); +INSERT INTO collector_test VALUES (1, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'HELLO,WORLD'); +INSERT INTO collector_test VALUES (2, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'hello,world'); From 2871542347c12392f6ef20ac76d1a0b84b8418bb Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 15 Mar 2021 23:48:08 +0300 Subject: [PATCH 106/176] added ClickhouseNativeConnectionTest Signed-off-by: vladimir --- .../ClickhouseNativeDatabaseMetadata.java | 8 ++-- .../impl/codec/ClickhouseNativeEncoder.java | 4 ++ .../codec/CloseConnectionCommandCodec.java | 7 +++- .../impl/codec/SimpleQueryCommandCodec.java | 18 +++++++-- .../tck/ClickhouseNativeConnectionTest.java | 34 +++++++++++++++++ .../src/test/resources/init.sql | 37 ++++++++++++++++++- 6 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 6e6e089c5d..7c85d9c632 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -34,22 +34,22 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, @Override public String productName() { - return null; + return productName; } @Override public String fullVersion() { - return null; + return fullVersion; } @Override public int majorVersion() { - return 0; + return major; } @Override public int minorVersion() { - return 0; + return minor; } public int getRevision() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 57251dd31d..db836de263 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -4,11 +4,14 @@ import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); private final ArrayDeque> inflight; private final ClickhouseNativeSocketConnection conn; @@ -44,6 +47,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) } void write(CommandBase cmd) { + LOG.info("got command: " + cmd.getClass()); ClickhouseNativeCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { ClickhouseNativeCommandCodec c = inflight.poll(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index f7eebd8260..1d3b4f5da1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,7 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.socket.SocketChannel; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CloseConnectionCommand; @@ -21,6 +23,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { public void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("closing channel"); - encoder.chctx().channel().close(); + //encoder.chctx().channel().close(); + ChannelHandlerContext ctx = encoder.chctx(); + SocketChannel channel = (SocketChannel) ctx.channel(); + ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(v -> channel.shutdownOutput()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 6b12c5336a..e4ab0d4654 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -145,7 +145,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; rowResultDecoder.generateRows(block); if (requireUpdates && block.numRows() > 0) { - notifyOperationUpdate(true); + notifyOperationUpdate(true, null); } ++dataPacketNo; } else { @@ -153,12 +153,14 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { - LOG.error("unknown packet type", (Throwable) packet); + Throwable t = (Throwable) packet; + LOG.error("unknown packet type", t); + notifyOperationUpdate(false, t); } //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { - notifyOperationUpdate(false); + notifyOperationUpdate(false, null); packetReader = null; } } @@ -170,7 +172,7 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { return new ClickhouseNativeRowDesc(columnNames, columnTypes); } - private void notifyOperationUpdate(boolean hasMoreResults) { + private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); @@ -180,6 +182,14 @@ private void notifyOperationUpdate(boolean hasMoreResults) { rowResultDecoder.reset(); cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); } + if (t != null) { + if (failure == null) { + failure = t; + } else { + failure = new RuntimeException(failure); + failure.addSuppressed(t); + } + } CommandResponse response; if (failure == null) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java new file mode 100644 index 0000000000..19c9009c61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -0,0 +1,34 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.spi.DatabaseMetadata; +import io.vertx.sqlclient.tck.ConnectionTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeConnectionTest extends ConnectionTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + public void setUp() throws Exception { + super.setUp(); + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } + + @Override + public void tearDown(TestContext ctx) { + connector.close(); + super.tearDown(ctx); + } + + @Override + protected void validateDatabaseMetaData(TestContext ctx, DatabaseMetadata md) { + ctx.assertTrue(md.majorVersion() >= 20); + ctx.assertTrue(md.productName().toLowerCase().contains("ClickHouse".toLowerCase())); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 680c881d90..6bce8a30f3 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -1,6 +1,39 @@ +-- USE testschema; +-- datatype testing table + +-- immutable table for select query testing -- +-- used by TCK +DROP TABLE IF EXISTS immutable; +CREATE TABLE immutable +( + id Int32, + message varchar(2048) +) engine = MergeTree() + ORDER BY (id); + +INSERT INTO immutable (id, message) VALUES (1, 'fortune: No such file or directory'); +INSERT INTO immutable (id, message) VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.'); +INSERT INTO immutable (id, message) VALUES (3, 'After enough decimal places, nobody gives a damn.'); +INSERT INTO immutable (id, message) VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1'); +INSERT INTO immutable (id, message) VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.'); +INSERT INTO immutable (id, message) VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen'); +INSERT INTO immutable (id, message) VALUES (7, 'Any program that runs right is obsolete.'); +INSERT INTO immutable (id, message) VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth'); +INSERT INTO immutable (id, message) VALUES (9, 'Feature: A bug with seniority.'); +INSERT INTO immutable (id, message) VALUES (10, 'Computers make very fast, very accurate mistakes.'); +INSERT INTO immutable (id, message) VALUES (11, ''); +INSERT INTO immutable (id, message) VALUES (12, 'フレームワークのベンチマーク'); + +-- mutable for insert,update,delete query testing -- +-- used by TCK +DROP TABLE IF EXISTS mutable; +CREATE TABLE mutable +( + id Int32, + val varchar(2048) +) engine = MergeTree() + ORDER BY (id); -# USE testschema; -# datatype testing table -- basic data type table -- -- used by TCK DROP TABLE IF EXISTS basicdatatype; From d820e9060346a7185aa389a9ce58a265d4bfbb82 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 16 Mar 2021 18:37:54 +0300 Subject: [PATCH 107/176] added ClickhouseNativeConnectionAutoRetryTest Signed-off-by: vladimir --- .../impl/codec/ClickhouseNativeCodec.java | 23 ++++++++++- ...ickhouseNativeConnectionAutoRetryTest.java | 38 +++++++++++++++++++ .../tck/ClientConfig.java | 25 ++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index c594165bb0..ea1fd6deee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -3,10 +3,14 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.command.CommandBase; +import io.vertx.sqlclient.impl.command.CommandResponse; import java.util.ArrayDeque; +import java.util.Iterator; public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); @@ -22,8 +26,23 @@ public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - //TODO smagellan: maybe remove method - LOG.error("caught exception", cause); + fail(ctx, cause); super.exceptionCaught(ctx, cause); } + + private void fail(ChannelHandlerContext ctx, Throwable cause) { + for (Iterator> it = inflight.iterator(); it.hasNext();) { + ClickhouseNativeCommandCodec codec = it.next(); + it.remove(); + CommandResponse failure = CommandResponse.failure(cause); + failure.cmd = (CommandBase) codec.cmd; + ctx.fireChannelRead(failure); + } + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + fail(ctx, new NoStackTraceThrowable("Fail to read any response from the server, the underlying connection might get lost unexpectedly.")); + super.channelInactive(ctx); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java new file mode 100644 index 0000000000..c639df7e31 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -0,0 +1,38 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.ConnectionAutoRetryTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + public void setUp() throws Exception { + super.setUp(); + options = rule.options(); + } + + @Override + public void tearDown(TestContext ctx) { + connectionConnector.close(); + poolConnector.close(); + super.tearDown(ctx); + } + + @Override + protected void initialConnector(int proxyPort) { + SqlConnectOptions proxyOptions = new ClickhouseNativeConnectOptions(options); + proxyOptions.setPort(proxyPort); + proxyOptions.setHost("localhost"); + connectionConnector = ClientConfig.CONNECT.connect(vertx, proxyOptions); + poolConnector = ClientConfig.POOLED.connect(vertx, proxyOptions); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index ccbb73b10d..280a9b2bb5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -2,10 +2,12 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; +import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlClient; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.Connector; @@ -30,6 +32,29 @@ public void close() { } }; } + }, + + POOLED() { + @Override + Connector connect(Vertx vertx, SqlConnectOptions options) { + ClickhouseNativePool pool = ClickhouseNativePool.pool(vertx, new ClickhouseNativeConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); + return new Connector() { + @Override + public void connect(Handler> handler) { + pool.getConnection(ar -> { + if (ar.succeeded()) { + handler.handle(Future.succeededFuture(ar.result())); + } else { + handler.handle(Future.failedFuture(ar.cause())); + } + }); + } + @Override + public void close() { + pool.close(); + } + }; + } }; abstract Connector connect(Vertx vertx, SqlConnectOptions options); From be0635f5848832dc82391e0b7a73329cad9240c9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 16 Mar 2021 23:14:27 +0300 Subject: [PATCH 108/176] added ClickhouseNativeBinaryDataTypeEncodeTest and ClickhouseNativeDriverTest; added SqlClientExamples to make gen utilities happy Signed-off-by: vladimir --- ...ickhouseNativeConnectOptionsConverter.java | 32 +++ .../main/java/examples/SqlClientExamples.java | 272 ++++++++++++++++++ ...ickhouseNativeConnectOptionsConverter.java | 15 - .../impl/codec/ExtendedQueryCommandCodec.java | 51 ++++ .../impl/codec/SimpleQueryCommandCodec.java | 6 +- .../clickhousenative/package-info.java | 4 + ...ckhouseNativeBinaryDataTypeEncodeTest.java | 149 ++++++++++ .../tck/ClickhouseNativeDriverTest.java | 21 ++ 8 files changed, 534 insertions(+), 16 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java new file mode 100644 index 0000000000..1c910b6ffd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative; + +import io.vertx.core.json.JsonObject; +import io.vertx.core.json.JsonArray; +import io.vertx.core.json.impl.JsonUtil; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +/** + * Converter and mapper for {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions} original class using Vert.x codegen. + */ +public class ClickhouseNativeConnectOptionsConverter { + + + public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + for (java.util.Map.Entry member : json) { + switch (member.getKey()) { + case "pipeliningLimit": + break; + } + } + } + + public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + toJson(obj, json.getMap()); + } + + public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + json.put("pipeliningLimit", obj.getPipeliningLimit()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java new file mode 100644 index 0000000000..6674bc7948 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -0,0 +1,272 @@ +package examples; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.core.Vertx; +import io.vertx.core.tracing.TracingPolicy; +import io.vertx.docgen.Source; +import io.vertx.sqlclient.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Source +//TODO smagellan: inspect examples +public class SqlClientExamples { + public void queries01(SqlClient client) { + client + .query("SELECT * FROM users WHERE id='julien'") + .execute(ar -> { + if (ar.succeeded()) { + RowSet result = ar.result(); + System.out.println("Got " + result.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + + public void queries02(SqlClient client) { + client + .preparedQuery("SELECT * FROM users WHERE id=?") + .execute(Tuple.of("julien"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println("Got " + rows.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries03(SqlClient client) { + client + .preparedQuery("SELECT first_name, last_name FROM users") + .execute(ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + for (Row row : rows) { + System.out.println("User " + row.getString(0) + " " + row.getString(1)); + } + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries04(SqlClient client) { + client + .preparedQuery("INSERT INTO users (first_name, last_name) VALUES (?, ?)") + .execute(Tuple.of("Julien", "Viet"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println(rows.rowCount()); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries05(Row row) { + System.out.println("User " + row.getString(0) + " " + row.getString(1)); + } + + public void queries06(Row row) { + System.out.println("User " + row.getString("first_name") + " " + row.getString("last_name")); + } + + public void queries07(Row row) { + + String firstName = row.getString("first_name"); + Boolean male = row.getBoolean("male"); + Integer age = row.getInteger("age"); + + // ... + + } + + public void queries08(SqlClient client) { + + // Add commands to the batch + List batch = new ArrayList<>(); + batch.add(Tuple.of("julien", "Julien Viet")); + batch.add(Tuple.of("emad", "Emad Alblueshi")); + + // Execute the prepared batch + client + .preparedQuery("INSERT INTO USERS (id, name) VALUES (?, ?)") + .executeBatch(batch, res -> { + if (res.succeeded()) { + + // Process rows + RowSet rows = res.result(); + } else { + System.out.println("Batch failed " + res.cause()); + } + }); + } + + public void queries09(SqlClient client, SqlConnectOptions connectOptions) { + + // Enable prepare statements caching + connectOptions.setCachePreparedStatements(true); + client + .preparedQuery("SELECT * FROM users WHERE id = ?") + .execute(Tuple.of("julien"), ar -> { + if (ar.succeeded()) { + RowSet rows = ar.result(); + System.out.println("Got " + rows.size() + " rows "); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void queries10(SqlConnection sqlConnection) { + sqlConnection + .prepare("SELECT * FROM users WHERE id = ?", ar -> { + if (ar.succeeded()) { + PreparedStatement preparedStatement = ar.result(); + preparedStatement.query() + .execute(Tuple.of("julien"), ar2 -> { + if (ar2.succeeded()) { + RowSet rows = ar2.result(); + System.out.println("Got " + rows.size() + " rows "); + preparedStatement.close(); + } else { + System.out.println("Failure: " + ar2.cause().getMessage()); + } + }); + } else { + System.out.println("Failure: " + ar.cause().getMessage()); + } + }); + } + + public void usingConnections01(Vertx vertx, Pool pool) { + + pool + .getConnection() + .compose(connection -> + connection + .preparedQuery("INSERT INTO Users (first_name,last_name) VALUES (?, ?)") + .executeBatch(Arrays.asList( + Tuple.of("Julien", "Viet"), + Tuple.of("Emad", "Alblueshi") + )) + .compose(res -> connection + // Do something with rows + .query("SELECT COUNT(*) FROM Users") + .execute() + .map(rows -> rows.iterator().next().getInteger(0))) + // Return the connection to the pool + .eventually(v -> connection.close()) + ).onSuccess(count -> { + System.out.println("Insert users, now the number of users is " + count); + }); + } + + public void usingConnections02(SqlConnection connection) { + connection + .prepare("SELECT * FROM users WHERE first_name LIKE ?") + .compose(pq -> + pq.query() + .execute(Tuple.of("Julien")) + .eventually(v -> pq.close()) + ).onSuccess(rows -> { + // All rows + }); + } + + public void usingConnections03(Pool pool) { + pool.withConnection(connection -> + connection + .preparedQuery("INSERT INTO Users (first_name,last_name) VALUES (?, ?)") + .executeBatch(Arrays.asList( + Tuple.of("Julien", "Viet"), + Tuple.of("Emad", "Alblueshi") + )) + .compose(res -> connection + // Do something with rows + .query("SELECT COUNT(*) FROM Users") + .execute() + .map(rows -> rows.iterator().next().getInteger(0))) + ).onSuccess(count -> { + System.out.println("Insert users, now the number of users is " + count); + }); + } + + public void transaction01(Pool pool) { + //transactions are not supported + } + + public void transaction02(Transaction tx) { + //transactions are not supported + } + + public void transaction03(Pool pool) { + //transactions are not supported + } + + public void usingCursors01(SqlConnection connection) { + connection.prepare("SELECT * FROM users WHERE age > ?", ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + + // Create a cursor + Cursor cursor = pq.cursor(Tuple.of(18)); + + // Read 50 rows + cursor.read(50, ar2 -> { + if (ar2.succeeded()) { + RowSet rows = ar2.result(); + + // Check for more ? + if (cursor.hasMore()) { + // Repeat the process... + } else { + // No more rows - close the cursor + cursor.close(); + } + } + }); + } + }); + } + + public void usingCursors02(Cursor cursor) { + cursor.read(50, ar2 -> { + if (ar2.succeeded()) { + // Close the cursor + cursor.close(); + } + }); + } + + public void usingCursors03(SqlConnection connection) { + connection.prepare("SELECT * FROM users WHERE age > ?", ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + + // Fetch 50 rows at a time + RowStream stream = pq.createStream(50, Tuple.of(18)); + + // Use the stream + stream.exceptionHandler(err -> { + System.out.println("Error: " + err.getMessage()); + }); + stream.endHandler(v -> { + System.out.println("End of stream"); + }); + stream.handler(row -> { + System.out.println("User: " + row.getString("last_name")); + }); + } + }); + } + + public void tracing01(ClickhouseNativeConnectOptions options) { + options.setTracingPolicy(TracingPolicy.ALWAYS); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java deleted file mode 100644 index e085fa9144..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.vertx.clickhouse.clickhousenative; - -import io.vertx.core.json.JsonObject; - -public class ClickhouseNativeConnectOptionsConverter { - public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { - } - - public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { - toJson(obj, json.getMap()); - } - - public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index eb769ab140..b244a514b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -3,8 +3,10 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; +import java.time.temporal.TemporalAccessor; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -18,6 +20,55 @@ public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSo super(cmd, conn, cmd.fetch() > 0); } + @Override + protected String sql() { + ExtendedQueryCommand ecmd = ecmd(); + return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); + } + + private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { + StringBuilder bldr = new StringBuilder(); + if (paramsList.size() == 0) { + return parametrizedSql; + } + int prevIdx = 0; + int newIdx; + while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { + if (newIdx - 1 == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { + int paramIdxStartPos = newIdx + 1; + int paramIdxEndPos = paramIdxStartPos; + while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { + ++paramIdxEndPos; + } + if (paramIdxStartPos == paramIdxEndPos) { + throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); + } + int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; + Object paramValue = paramsList.getValue(paramIndex); + bldr.append(parametrizedSql, prevIdx, newIdx); + Class paramClass = paramValue == null ? null : paramValue.getClass(); + if (paramClass != null) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || TemporalAccessor.class.isAssignableFrom(paramClass)) { + bldr.append('\'').append(paramValue).append('\''); + } else if (paramClass == Double.class) { + //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure + bldr.append(String.format("CAST('%s', 'Float64')", ((Double)paramValue).toString())); + } else if (paramClass == Float.class) { + bldr.append(String.format("CAST('%s', 'Float32')", ((Float)paramValue).toString())); + } else { + bldr.append(paramValue); + } + } else { + bldr.append(paramValue); + } + newIdx = paramIdxEndPos; + } + prevIdx = newIdx; + } + bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); + return bldr.toString(); + } + @Override void encode(ClickhouseNativeEncoder encoder) { String ourCursorId = ecmd().cursorId(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index e4ab0d4654..83ca3e66bc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -39,12 +39,16 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); if (!isSuspended()) { ByteBuf buf = allocateBuffer(); - sendQuery(cmd.sql(), buf); + sendQuery(sql(), buf); sendExternalTables(buf, Collections.emptyList()); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); } } + protected String sql() { + return cmd.sql(); + } + private void sendExternalTables(ByteBuf buf, Collection blocks) { ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java new file mode 100644 index 0000000000..fe9ea8e26d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -0,0 +1,4 @@ +@ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") +package io.vertx.clickhouse.clickhousenative; + +import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java new file mode 100644 index 0000000000..6e52c76c12 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -0,0 +1,149 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.tck.BinaryDataTypeEncodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.function.BiFunction; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeBinaryDataTypeEncodeTest.class); + + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //time is not supported + } + + @Test + public void testBoolean(TestContext ctx) { + testEncodeGeneric(ctx, "test_boolean", Byte.class, null, (byte)0); + } + + @Test + public void testDouble(TestContext ctx) { + //Double.MIN_VALUE is too small here + testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); + } + + @Test + public void testNullValues(TestContext ctx) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE" + + " test_int_2 = ", + ", test_int_4 = ", + ", test_int_8 = ", + ", test_float_4 = ", + ", test_float_8 = ", + ", test_numeric = ", + ", test_decimal = ", + ", test_boolean = ", + ", test_char = ", + ", test_varchar = ", + ", test_date = ", + " WHERE id = 2")) + .execute(Tuple.tuple() + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null) + .addValue(null), + ctx.asyncAssertSuccess(updateResult -> { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + LOG.error(e); + } + conn + .preparedQuery("SELECT * FROM basicdatatype WHERE id = 2") + .execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(12, row.size()); + ctx.assertEquals(2, row.getInteger(0)); + for (int i = 1; i < 12; i++) { + ctx.assertNull(row.getValue(i)); + } + conn.close(); + })); + })); + })); + } + + @Override + protected void testEncodeGeneric(TestContext ctx, + String columnName, + Class clazz, + BiFunction getter, + T expected) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) + .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + LOG.error(e); + } + conn + .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") + .execute(ctx.asyncAssertSuccess(result -> { + ctx.assertEquals(1, result.size()); + Row row = result.iterator().next(); + ctx.assertEquals(1, row.size()); + ctx.assertEquals(expected, row.getValue(0)); + ctx.assertEquals(expected, row.getValue(columnName)); + if (getter != null) { + ctx.assertEquals(expected, getter.apply(row, columnName)); + } +// ctx.assertEquals(expected, row.get(clazz, 0)); +// ColumnChecker.checkColumn(0, columnName) +// .returns(Tuple::getValue, Row::getValue, expected) +// .returns(byIndexGetter, byNameGetter, expected) +// .forRow(row); + conn.close(); + })); + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java new file mode 100644 index 0000000000..45d123485b --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -0,0 +1,21 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.tck.DriverTestBase; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeDriverTest extends DriverTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected SqlConnectOptions defaultOptions() { + return rule.options(); + } + +} From cf8c171882339e117ec8364e484ff4f9af8eed36 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 17 Mar 2021 22:20:18 +0300 Subject: [PATCH 109/176] reworked ArrayColumn to recode elements if needed Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../ClickhouseNativeDatabaseMetadata.java | 9 ++- .../impl/ClickhouseNativeRow.java | 32 ++++++-- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 12 ++- .../impl/codec/ExtendedQueryCommandCodec.java | 9 ++- .../impl/codec/RowResultDecoder.java | 7 +- .../impl/codec/SimpleQueryCommandCodec.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 73 ++++++++++++++++++- .../impl/codec/columns/ClickhouseColumn.java | 21 +++--- .../impl/codec/columns/ClickhouseColumns.java | 13 ++-- .../impl/codec/columns/DateColumn.java | 4 +- .../impl/codec/columns/Enum16Column.java | 4 +- .../impl/codec/columns/Enum8Column.java | 4 +- .../impl/codec/columns/FixedStringColumn.java | 15 +++- .../codec/columns/LowCardinalityColumn.java | 32 +++++--- .../impl/codec/columns/StringColumn.java | 14 +++- .../impl/codec/columns/UInt128Column.java | 2 +- .../impl/codec/columns/UInt16Column.java | 6 +- .../impl/codec/columns/UInt32Column.java | 6 +- .../impl/codec/columns/UInt64Column.java | 6 +- .../impl/codec/columns/UInt8Column.java | 6 +- .../BasicClickhouseTest.java | 42 +++++++++++ .../ExtendedClickhouseTest.java | 7 -- .../src/test/resources/init.sql | 8 ++ 25 files changed, 260 insertions(+), 79 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 958faa3cc8..66de120c6f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -33,6 +33,7 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_USERNAME = "initial_username"; public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; + public static final String OPTION_STRING_CHARSET = "string_charset"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; @@ -41,5 +42,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR))); + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 7c85d9c632..760d36a491 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -2,6 +2,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; +import java.nio.charset.Charset; import java.time.ZoneId; import java.util.Map; @@ -15,11 +16,12 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String displayName; private final ZoneId timezone; private final String fullClientName; + private final Charset stringCharset; private final Map properties; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties) { + Map properties, Charset stringCharset) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -30,6 +32,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.timezone = timezone; this.fullClientName = fullClientName; this.properties = properties; + this.stringCharset = stringCharset; } @Override @@ -76,6 +79,10 @@ public Map getProperties() { return properties; } + public Charset getStringCharset() { + return stringCharset; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index 8be95d677d..e1352122ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -5,7 +5,6 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.sql.JDBCType; import java.util.List; @@ -15,11 +14,11 @@ public class ClickhouseNativeRow implements Row { private final ClickhouseNativeRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block) { + public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; - this.stringCharset = StandardCharsets.UTF_8; + this.stringCharset = md.getStringCharset(); } @Override @@ -34,14 +33,31 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { + return getValue(columnIndex, String.class); + } + + private Object getValue(int columnIndex, Class desired) { List data = block.getData(); ClickhouseColumn column = data.get(columnIndex); - Object columnData = column.getElement(rowNo); - if (columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { - return new String((byte[]) columnData, stringCharset); - } else { - return columnData; + Object columnData = column.getElement(rowNo, desired); + return columnData; + //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { + // return new String((byte[]) columnData, stringCharset); + //} else { + // return columnData; + //} + } + + @Override + public T get(Class type, int position) { + if (type == null) { + throw new IllegalArgumentException("Accessor type can not be null"); + } + Object value = getValue(position, type); + if (value != null && type.isAssignableFrom(value.getClass())) { + return type.cast(value); } + return null; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 13572442e6..55f9cd10f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows, md); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index e1575ed546..0e9f10ee68 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -4,6 +4,7 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import java.nio.charset.Charset; import java.time.ZoneId; import java.util.Map; @@ -76,6 +77,15 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset()); + } + + private Charset charset() { + String desiredCharset = properties.get(ClickhouseConstants.OPTION_STRING_CHARSET); + if (desiredCharset == null || "system_default".equals(desiredCharset)) { + return Charset.defaultCharset(); + } else { + return Charset.forName(desiredCharset); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index b244a514b6..4a4cc577ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -6,7 +6,7 @@ import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; -import java.time.temporal.TemporalAccessor; +import java.time.temporal.Temporal; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -26,6 +26,7 @@ protected String sql() { return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); } + //TODO: maybe switch to antlr4 private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { StringBuilder bldr = new StringBuilder(); if (paramsList.size() == 0) { @@ -48,13 +49,13 @@ private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple p bldr.append(parametrizedSql, prevIdx, newIdx); Class paramClass = paramValue == null ? null : paramValue.getClass(); if (paramClass != null) { - if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || TemporalAccessor.class.isAssignableFrom(paramClass)) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { bldr.append('\'').append(paramValue).append('\''); } else if (paramClass == Double.class) { //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure - bldr.append(String.format("CAST('%s', 'Float64')", ((Double)paramValue).toString())); + bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); } else if (paramClass == Float.class) { - bldr.append(String.format("CAST('%s', 'Float32')", ((Float)paramValue).toString())); + bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); } else { bldr.append(paramValue); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 0667543ea0..07f779e09e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; @@ -15,17 +16,19 @@ class RowResultDecoder extends RowDecoder { private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseNativeDatabaseMetadata md; private ColumnOrientedBlock block; private int rowNo; - protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc) { + protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc, ClickhouseNativeDatabaseMetadata md) { super(collector); this.rowDesc = rowDesc; + this.md = md; } @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block); + ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block, md); ++rowNo; return row; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 83ca3e66bc..8cfefc75f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -144,7 +144,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; rowResultDecoder.generateRows(block); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 2bb9d9adba..cc20ad7c7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,8 +1,11 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; +import java.sql.JDBCType; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -14,6 +17,9 @@ public class ArrayColumn extends ClickhouseColumn { private static final Object[] EMPTY_ARRAY = new Object[0]; + private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + private Deque, Integer>> graphLevelDeque; private List> slicesSeries; private List slices; @@ -21,9 +27,30 @@ public class ArrayColumn extends ClickhouseColumn { private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumn curNestedColumn; private Integer nItems; + private boolean resliced; + private Object statePrefix; - public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); + this.md = md; + this.elementaryDescr = elementaryDescr(columnDescriptor); + } + + private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + ClickhouseColumn statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, 0, md); + if (statePrefix == null) { + statePrefix = statePrefixColumn.readStatePrefix(in); + } + return statePrefix; } @Override @@ -37,19 +64,57 @@ protected Object readItems(ClickhouseStreamDataSource in) { curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } + if (statePrefix == null) { + return null; + } readSlices(in); if (nItems > 0) { if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); } else { assert nItems == curNestedColumn.nRows; } - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in); + if (curNestedColumn.getClass() == LowCardinalityColumn.class) { + ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; + } + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (elementaryDescr.jdbcType() == JDBCType.VARCHAR + || curNestedColumn.getClass() == Enum8Column.class + || curNestedColumn.getClass() == Enum16Column.class) { + return curNestedColumn.itemsArray; + } + resliced = true; return resliceIntoArray((Object[]) curNestedColumn.itemsArray); } + resliced = true; return resliceIntoArray(EMPTY_ARRAY); } + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object[] objectsArray = (Object[]) this.itemsArray; + Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + return reslicedRet[rowIdx]; + } + + private Object[] asDesiredType(Object[] src, Class desired) { + if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { + return stringifyByteArrays(src, md.getStringCharset()); + } + return src; + } + + private Object[] stringifyByteArrays(Object[] src, Charset charset) { + Object[] ret = new Object[src.length]; + for (int i = 0; i < src.length; ++i) { + Object element = src[i]; + if (element != null) { + ret[i] = new String((byte[]) element, charset); + } + } + return ret; + } + private Object[] resliceIntoArray(Object[] data) { Object[] intermData = data; for (int i = slicesSeries.size() - 1; i >= 0; --i) { @@ -87,7 +152,7 @@ private void readSlices(ClickhouseStreamDataSource in) { nItems = slices.get(slices.size() - 1); if (curNestedColumnDescr.isNullable()) { if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems); + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); } curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index e9f8555bd1..0eb1be915c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -6,6 +6,8 @@ import java.util.BitSet; public abstract class ClickhouseColumn { + private static final Object NOP_STATE = new Object(); + protected final int nRows; protected final ClickhouseNativeColumnDescriptor columnDescriptor; protected BitSet nullsMap; @@ -29,7 +31,8 @@ public int nRows() { return nRows; } - protected void readStatePrefix(ClickhouseStreamDataSource in) { + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + return NOP_STATE; } protected void readData(ClickhouseStreamDataSource in) { @@ -52,19 +55,19 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in) { + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { itemsArray = readItems(in); - return asObjectsArray(); + return asObjectsArray(desired); } - protected Object[] asObjectsArray() { + protected Object[] asObjectsArray(Class desired) { return (Object[]) itemsArray; } - protected Object[] asObjectsArrayWithGetElement() { + protected Object[] asObjectsArrayWithGetElement(Class desired) { Object[] ret = new Object[nRows]; for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i); + ret[i] = getElement(i, desired); } return ret; } @@ -95,14 +98,14 @@ public Object getItemsArray() { return itemsArray; } - public Object getElement(int rowIdx) { + public Object getElement(int rowIdx, Class desired) { if (nullsMap != null && nullsMap.get(rowIdx)) { return null; } - return getElementInternal(rowIdx); + return getElementInternal(rowIdx, desired); } - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { return java.lang.reflect.Array.get(itemsArray, rowIdx); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index e05b677814..ac86c3d08c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import java.math.BigInteger; @@ -125,12 +126,12 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows) { + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { - return new ArrayColumn(nRows, descr); + return new ArrayColumn(nRows, descr, md); } if (descr.isLowCardinality()) { - return new LowCardinalityColumn(nRows, descr); + return new LowCardinalityColumn(nRows, descr, md); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { @@ -147,9 +148,9 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr); + return new StringColumn(nRows, descr, md); } else { - return new FixedStringColumn(nRows, descr); + return new FixedStringColumn(nRows, descr, md); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; @@ -204,7 +205,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } - //TODO: maybe switch to antl4 + //TODO: maybe switch to antlr4 static Map parseEnumVals(String nativeType) { final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 60c5104a18..eed4530d4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -12,8 +12,8 @@ public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) } @Override - protected Object getElementInternal(int rowIdx) { - Integer offset = (Integer) super.getElementInternal(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Integer offset = (Integer) super.getElementInternal(rowIdx, desired); return MIN_DATE.plusDays(offset); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index d10873fb59..466498a7b2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -14,8 +14,8 @@ public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map desired) { + Short key = (Short) super.getElementInternal(rowIdx, desired); return enumVals.get(key); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index f10147ac93..8d2d355457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -14,8 +14,8 @@ public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map desired) { + Byte key = (Byte) super.getElementInternal(rowIdx, desired); return enumVals.get(key); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index cd780add19..0998feb594 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,17 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { + private final Charset charset; + private List elements; - protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); } @Override @@ -37,7 +42,11 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { - return getObjectsArrayElement(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 19ad9c79f0..cfaafaa2b9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; @@ -7,30 +8,34 @@ public class LowCardinalityColumn extends ClickhouseColumn { + public static final long SUPPORTED_SERIALIZATION_VERSION = 1; private final ClickhouseNativeColumnDescriptor indexDescr; + private final ClickhouseNativeDatabaseMetadata md; private ClickhouseColumn indexColumn; private Long serType; private Long indexSize; private Long nKeys; - private Long keysSerializationVersion; + Long keysSerializationVersion; private ClickhouseColumn keysColumn; - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr) { + public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); this.indexDescr = descr.copyWithModifiers(false, false); + this.md = md; } @Override - protected void readStatePrefix(ClickhouseStreamDataSource in) { + protected Object readStatePrefix(ClickhouseStreamDataSource in) { if (keysSerializationVersion == null) { if (in.readableBytes() >= 4) { keysSerializationVersion = in.readLongLE(); - if (keysSerializationVersion != 1) { + if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); } } } + return keysSerializationVersion; } @Override @@ -54,7 +59,7 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue()); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue(), md); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -75,23 +80,32 @@ protected void readData(ClickhouseStreamDataSource in) { keysColumn.readColumn(in); } + //called by Array column @Override protected Object readItems(ClickhouseStreamDataSource in) { + if (isPartial()) { + readData(in); + } return null; } + @Override + protected Object[] asObjectsArray(Class desired) { + return super.asObjectsArrayWithGetElement(desired); + } + @Override public boolean isPartial() { return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); } @Override - public Object getElement(int rowIdx) { - int key = ((Number)keysColumn.getElement(rowIdx)).intValue(); + public Object getElement(int rowIdx, Class desired) { + int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); if (columnDescriptor.isNullable() && key == 0) { return null; } - return indexColumn.getElementInternal(key); + return indexColumn.getElementInternal(key, desired); } private ClickhouseColumn uintColumn(int code) { @@ -109,6 +123,6 @@ private ClickhouseColumn uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, nRows); + return ClickhouseColumns.columnForSpec(tmp, nRows, md); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 15da7bd2aa..a8dd0f55bd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,18 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class StringColumn extends ClickhouseColumn { private Integer curStrLength; private List elements; + private final Charset charset; - protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); } @Override @@ -44,7 +48,11 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { - return getObjectsArrayElement(rowIdx); + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 2ef59fec5f..6b575eb78d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -33,7 +33,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { return ((BigInteger[]) this.itemsArray)[rowIdx]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 586e21a9f6..e065f2cc31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { short element = ((short[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return Short.toUnsignedInt(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index ce5383ff7f..0c417f93a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { int element = ((int[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return Integer.toUnsignedLong(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 313fb8fbaf..ad2492e985 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -29,7 +29,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return unsignedBi(element); @@ -38,8 +38,8 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } static BigInteger unsignedBi(long l) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 02893d1fcd..5c2ac6041c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -27,7 +27,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object getElementInternal(int rowIdx) { + protected Object getElementInternal(int rowIdx, Class desired) { byte element = ((byte[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { return (short)Byte.toUnsignedInt(element); @@ -36,7 +36,7 @@ protected Object getElementInternal(int rowIdx) { } @Override - protected Object[] asObjectsArray() { - return asObjectsArrayWithGetElement(); + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 7862f44e7a..ac393f1001 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -18,6 +18,8 @@ import org.junit.runner.RunWith; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -98,6 +100,31 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator { + conn.query("select array() as empty_array, array(array(), array(NULL), array(1, NULL, 2), array(321)) as non_empty_array," + + "CAST(array(array(), array(NULL), array('a', NULL, 'b'), array('c')), 'Array(Array(LowCardinality(Nullable(String))))') as low_cardinality_array").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + Row row = res1.iterator().next(); + Object[] expected = new Object[0]; + Object[] actual = (Object[])row.getValue(0); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + + expected = new Object[][]{{}, {null}, {1, null, 2}, {321}}; + actual = (Object[])row.getValue(1); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + + expected = new Object[][]{{}, {null}, {"a", null, "b"}, {"c"}}; + actual = (Object[])row.getValue(2); + ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + conn.close(); + }) + ); + })); + } + @Test public void baseQueryTest(TestContext ctx) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { @@ -109,4 +136,19 @@ public void baseQueryTest(TestContext ctx) { ); })); } + + @Test + public void blobTest(TestContext ctx) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("select 'abcd'").execute( + ctx.asyncAssertSuccess(res1 -> { + ctx.assertEquals(1, res1.size()); + Row row = res1.iterator().next(); + byte[] bytes = row.get(byte[].class, 0); + ctx.assertEquals("abcd", new String(bytes, StandardCharsets.UTF_8)); + conn.close(); + }) + ); + })); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 5023b00edb..ac100a4556 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -34,13 +34,6 @@ public class ExtendedClickhouseTest { public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); - /* - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn - .query("CREATE TABLE IF NOT EXISTS vertx_cl_test_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3)") - .execute(ctx.asyncAssertSuccess()); - })); - */ } @After diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 6bce8a30f3..752ab455f9 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -90,3 +90,11 @@ CREATE TABLE collector_test ORDER BY (id); INSERT INTO collector_test VALUES (1, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'HELLO,WORLD'); INSERT INTO collector_test VALUES (2, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'hello,world'); + +DROP TABLE IF EXISTS vertx_cl_test_table; +CREATE TABLE vertx_cl_test_table +( + `name` String, + `value` UInt32 +) +ENGINE = GenerateRandom(1, 5, 3); From d13538ce5b9632cca6464a59ba980c3152de1416 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 17 Mar 2021 23:54:14 +0300 Subject: [PATCH 110/176] reworked ArrayColumn to handle partial reads Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumn.java | 101 +++++++++++------- .../impl/codec/columns/ClickhouseColumn.java | 2 +- 2 files changed, 62 insertions(+), 41 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index cc20ad7c7c..e38e8a5ef2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -22,13 +22,17 @@ public class ArrayColumn extends ClickhouseColumn { private Deque, Integer>> graphLevelDeque; private List> slicesSeries; - private List slices; + private List curSlice; private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumn curNestedColumn; private Integer nItems; private boolean resliced; private Object statePrefix; + private boolean hasFirstSlice; + private int sliceIdxAtCurrentDepth; + private int prevSliceSizeAtCurrentDepth = 0; + private Triplet, Integer> slicesAtCurrentDepth; public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); @@ -59,7 +63,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { graphLevelDeque = new ArrayDeque<>(); graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); slicesSeries = new ArrayList<>(); - slices = new ArrayList<>(); + curSlice = new ArrayList<>(); curDepth = 0; curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; @@ -68,16 +72,23 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } readSlices(in); + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); + } + if (curNestedColumnDescr.isNullable()) { + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } if (nItems > 0) { - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } else { - assert nItems == curNestedColumn.nRows; - } + assert nItems == curNestedColumn.nRows; if (curNestedColumn.getClass() == LowCardinalityColumn.class) { ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; } - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + return null; + } + } if (elementaryDescr.jdbcType() == JDBCType.VARCHAR || curNestedColumn.getClass() == Enum8Column.class || curNestedColumn.getClass() == Enum16Column.class) { @@ -136,46 +147,56 @@ private Object[] resliceIntoArray(Object[] data) { } private void readSlices(ClickhouseStreamDataSource in) { - //TODO smagellan: simplify the loop - //TODO smagellan: handle fragmented reads - while (!graphLevelDeque.isEmpty()) { - Triplet, Integer> sliceState = graphLevelDeque.remove(); - curNestedColumnDescr = sliceState.left().getNestedDescr(); - Integer newDepth = sliceState.right(); - if (curDepth != newDepth.intValue()) { - curDepth = newDepth; - slicesSeries.add(slices); + if (!hasFirstSlice) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + } + + while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { + if (sliceIdxAtCurrentDepth == 0) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + + curDepth = slicesAtCurrentDepth.right(); + slicesSeries.add(curSlice); //The last element in slice is index(number) of the last //element in current level. On the last iteration this //represents number of elements in fully flattened array. - nItems = slices.get(slices.size() - 1); - if (curNestedColumnDescr.isNullable()) { - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); - } - slices = new ArrayList<>(); + nItems = curSlice.get(curSlice.size() - 1); + curSlice = new ArrayList<>(); } if (curNestedColumnDescr.isArray()) { - slices.add(0); - int prev = 0; - for (int size : sliceState.middle()) { - int nestedSizeCount = size - prev; - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); - } - nestedSizes.add((int) sz); - } - slices.addAll(nestedSizes); - prev = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + readSlice(in, slicesAtCurrentDepth); + } + } + } + + private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { + if (sliceIdxAtCurrentDepth == 0) { + curSlice.add(0); + } + for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { + int size = sliceState.middle().get(sliceIdxAtCurrentDepth); + int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; + if (in.readableBytes() < nestedSizeCount * 8) { + return false; + } + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); } + nestedSizes.add((int) sz); } + curSlice.addAll(nestedSizes); + prevSliceSizeAtCurrentDepth = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); } + sliceIdxAtCurrentDepth = 0; + prevSliceSizeAtCurrentDepth = 0; + return true; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 0eb1be915c..ae128c482d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -91,7 +91,7 @@ protected BitSet readNullsMap(ClickhouseStreamDataSource in) { } public boolean isPartial() { - return itemsArray == null; + return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); } public Object getItemsArray() { From 22bb068460ba91597eeaf426a86bc68ac48ac7b7 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Mar 2021 12:27:26 +0300 Subject: [PATCH 111/176] initial batch insert support Signed-off-by: vladimir --- .../impl/ClickhouseNativeRowDesc.java | 3 + .../impl/RowOrientedBlock.java | 45 +++++-- .../impl/codec/ClickhouseNativeEncoder.java | 32 ++++- .../ClickhouseNativePreparedStatement.java | 19 ++- .../impl/codec/ClickhouseStreamDataSink.java | 3 + .../impl/codec/ExtendedQueryCommandCodec.java | 89 +++++++------- .../codec/Lz4ClickhouseStreamDataSink.java | 15 +++ .../impl/codec/PacketForge.java | 111 ++++++++++++++++++ .../impl/codec/PacketReader.java | 7 +- .../impl/codec/PrepareStatementCodec.java | 49 +++++++- .../impl/codec/QueryParsers.java | 97 +++++++++++++++ .../codec/RawClickhouseStreamDataSink.java | 15 +++ .../impl/codec/SimpleQueryCommandCodec.java | 110 +++++------------ .../impl/codec/TableColumns.java | 23 ++++ .../impl/codec/columns/ClickhouseColumn.java | 44 +++++++ .../impl/codec/columns/StringColumn.java | 13 ++ .../impl/codec/columns/UInt32Column.java | 13 ++ .../impl/codec/columns/UInt8Column.java | 14 +++ ...ckhouseNativeBinaryDataTypeEncodeTest.java | 18 +-- .../ClickhouseNativePreparedBatchTest.java | 58 +++++++++ .../clickhousenativeclient/tck/Sleep.java | 14 +++ .../sqlclient/tck/PreparedBatchTestBase.java | 10 +- 22 files changed, 635 insertions(+), 167 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index 3db511730d..65ba59dfca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -3,9 +3,12 @@ import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; +import java.util.Collections; import java.util.List; public class ClickhouseNativeRowDesc extends RowDesc { + public static final ClickhouseNativeRowDesc EMPTY = new ClickhouseNativeRowDesc(Collections.emptyList(), Collections.emptyList()); + public ClickhouseNativeRowDesc(List columnNames) { super(columnNames); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 7658fe1676..5b0d2cb803 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -4,25 +4,50 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.RowDesc; import java.util.List; -import java.util.Map; -public class RowOrientedBlock extends BaseBlock { +public class RowOrientedBlock { + private final RowDesc rowDesc; + private final List data; + private final BlockInfo blockInfo; + private final ClickhouseNativeDatabaseMetadata md; - public RowOrientedBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { - super(columnsWithTypes, data, blockInfo, md); + public RowOrientedBlock(RowDesc rowDesc, + List data, ClickhouseNativeDatabaseMetadata md) { + this.rowDesc = rowDesc; + this.data = data; + this.blockInfo = new BlockInfo(); + this.md = md; } - public void serializeTo(ClickhouseStreamDataSink sink) { - if (getMd().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { - getBlockInfo().serializeTo(sink); + public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_BLOCK_INFO) { + blockInfo.serializeTo(sink); } //n_columns - sink.writeULeb128(0); + sink.writeULeb128(nColumns()); //n_rows - sink.writeULeb128(0); + int nRows = toRow - fromRow; + sink.writeULeb128(nRows); //TODO smagellan + for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { + ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseColumn column = ClickhouseColumns.columnForSpec(descr, nRows, md); + sink.writePascalString(descr.name()); + sink.writePascalString(descr.getUnparsedNativeType()); + column.serializeColumn(sink, columnIndex, data, fromRow, toRow); + } + } + + public int nColumns() { + return rowDesc.columnDescriptor().size(); + } + + public int totalRows() { + return data.size(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index db836de263..5a1228bd3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -66,12 +66,38 @@ void write(CommandBase cmd) { } else if (cmd instanceof CloseConnectionCommand) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { - return new PrepareStatementCodec((PrepareStatementCommand) cmd); + PrepareStatementCommand ps = (PrepareStatementCommand) cmd; + QueryParsers.QueryType queryType = QueryParsers.queryType(ps.sql()); + return new PrepareStatementCodec(ps, queryType); } else if (cmd instanceof ExtendedQueryCommand) { - return new ExtendedQueryCommandCodec<>((ExtendedQueryCommand)cmd, conn); + ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; + QueryParsers.QueryType queryType; + if (ecmd.preparedStatement() != null) { + queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); + } else { + queryType = QueryParsers.queryType(ecmd.sql()); + } + if (queryType != null && queryType != QueryParsers.QueryType.INSERT && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); + deliverError(cmd, ex); + throw ex; + } + return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } - throw new UnsupportedOperationException(cmd.getClass().getName()); + RuntimeException ex = new UnsupportedOperationException(cmd.getClass().getName()); + deliverError(cmd, ex); + throw ex; + } + + private void deliverError(CommandBase cmd, RuntimeException ex) { + if (cmd instanceof QueryCommandBase) { + QueryCommandBase ecmd = (QueryCommandBase)cmd; + ecmd.resultHandler().handleResult(0, 0, null, null, ex); + } + CommandResponse resp = CommandResponse.failure(ex); + resp.cmd = cmd; + chctx.fireChannelRead(resp); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index fedc263648..5032c9b101 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -10,21 +10,26 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; + private final QueryParsers.QueryType queryType; + private final boolean sentQuery; - public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc) { + public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, + QueryParsers.QueryType queryType, boolean sentQuery) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; + this.queryType = queryType; + this.sentQuery = sentQuery; } @Override public ParamDesc paramDesc() { - return null; + return paramDesc; } @Override public RowDesc rowDesc() { - return null; + return rowDesc; } @Override @@ -36,4 +41,12 @@ public String sql() { public String prepare(TupleInternal values) { return null; } + + public QueryParsers.QueryType queryType() { + return queryType; + } + + public boolean isSentQuery() { + return sentQuery; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 846b62bd76..3c8a2358fa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -4,6 +4,9 @@ public interface ClickhouseStreamDataSink { void writeULeb128(int value); void writeByte(int value); void writeIntLE(int value); + void writeBytes(byte[] value); + void writeBoolean(boolean value); + void writePascalString(String value); default void finish() { } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 4a4cc577ce..ac4d81e2d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,13 +1,20 @@ package io.vertx.clickhouse.clickhousenative.impl.codec; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhousenative.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; -import java.time.temporal.Temporal; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -16,69 +23,53 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(cmd, conn, cmd.fetch() > 0); + public ExtendedQueryCommandCodec(QueryParsers.QueryType queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - return insertParamValuesIntoQuery(ecmd.sql(), ecmd.params()); - } - - //TODO: maybe switch to antlr4 - private static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { - StringBuilder bldr = new StringBuilder(); - if (paramsList.size() == 0) { - return parametrizedSql; - } - int prevIdx = 0; - int newIdx; - while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { - if (newIdx - 1 == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { - int paramIdxStartPos = newIdx + 1; - int paramIdxEndPos = paramIdxStartPos; - while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { - ++paramIdxEndPos; - } - if (paramIdxStartPos == paramIdxEndPos) { - throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); - } - int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; - Object paramValue = paramsList.getValue(paramIndex); - bldr.append(parametrizedSql, prevIdx, newIdx); - Class paramClass = paramValue == null ? null : paramValue.getClass(); - if (paramClass != null) { - if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { - bldr.append('\'').append(paramValue).append('\''); - } else if (paramClass == Double.class) { - //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure - bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); - } else if (paramClass == Float.class) { - bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); - } else { - bldr.append(paramValue); - } - } else { - bldr.append(paramValue); - } - newIdx = paramIdxEndPos; - } - prevIdx = newIdx; + if (queryType != QueryParsers.QueryType.INSERT || !ecmd.isBatch()) { + return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } - bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); - return bldr.toString(); + //TODO smagellan: handle insert at query prepare stage (PrepareStatementCodec) + return ecmd.sql(); } @Override void encode(ClickhouseNativeEncoder encoder) { - String ourCursorId = ecmd().cursorId(); + ExtendedQueryCommand ecmd = ecmd(); + String ourCursorId = ecmd.cursorId(); + //TODO smagellan: introduce lock() method if (conn.getPendingCursorId() == null) { conn.setPendingCursorId(ourCursorId); } else { conn.throwExceptionIfBusy(ourCursorId); } - super.encode(encoder); + PreparedStatement ps = ecmd.preparedStatement(); + if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { + this.encoder = encoder; + ByteBuf buf = allocateBuffer(); + try { + ChannelHandlerContext chctx = encoder.chctx(); + PacketForge forge = new PacketForge(encoder.getConn(), chctx); + ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + List paramsList = ecmd.paramsList(); + if (paramsList != null && !paramsList.isEmpty()) { + RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), paramsList, md); + forge.sendColumns(block, buf, null); + } + forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); + chctx.writeAndFlush(buf, chctx.voidPromise()); + LOG.info("sent columns"); + } catch (Throwable t) { + buf.release(); + throw t; + } + } else { + super.encode(encoder); + } } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index b5116113b7..5de074526f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -42,6 +42,21 @@ public void writeIntLE(int value) { tmpStorage.writeIntLE(value); } + @Override + public void writeBytes(byte[] value) { + tmpStorage.writeBytes(value); + } + + @Override + public void writeBoolean(boolean value) { + tmpStorage.writeBoolean(value); + } + + @Override + public void writePascalString(String str) { + ByteBufUtils.writePascalString(str, tmpStorage); + } + @Override public void finish() { ByteBuf compressed = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java new file mode 100644 index 0000000000..573fd0b150 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -0,0 +1,111 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +public class PacketForge { + private static final Logger LOG = LoggerFactory.getLogger(PacketForge.class); + private final ClickhouseNativeSocketConnection conn; + private final ChannelHandlerContext chctx; + + public PacketForge(ClickhouseNativeSocketConnection conn, ChannelHandlerContext chctx) { + this.conn = conn; + this.chctx = chctx; + } + + public void sendQuery(String query, ByteBuf buf) { + LOG.info("running query: " + query); + ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); + //query id + ByteBufUtils.writePascalString("", buf); + ClickhouseNativeDatabaseMetadata meta = conn.getDatabaseMetaData(); + int serverRevision = meta.getRevision(); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + ClientInfo clInfo = new ClientInfo(meta); + clInfo.serializeTo(buf); + } + boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; + writeSettings(settings(), settingsAsStrings, true, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { + ByteBufUtils.writePascalString("", buf); + } + ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); + int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; + ByteBufUtils.writeULeb128(compressionEnabled, buf); + ByteBufUtils.writePascalString(query, buf); + } + + public void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { + if (settingsAsStrings) { + for (Map.Entry entry : settings.entrySet()) { + if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { + LOG.info("writing query setting: " + entry); + ByteBufUtils.writePascalString(entry.getKey(), buf); + buf.writeBoolean(settingsAreImportant); + ByteBufUtils.writePascalString(entry.getValue(), buf); + } + } + } else { + //TODO smagellan + throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); + } + //end of settings + ByteBufUtils.writePascalString("", buf); + } + + public void sendExternalTables(ByteBuf buf, Collection blocks) { + ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); + for (RowOrientedBlock block : blocks) { + //TODO smagellan + sendData(buf, block, null); + } + sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); + } + + public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { + sendData(buf, block, tableName, 0, block.totalRows()); + } + + public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName, int fromRow, int toRow) { + ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); + if (conn.getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { + ByteBufUtils.writePascalString(tableName, buf); + } + ClickhouseStreamDataSink sink = null; + try { + sink = dataSink(buf); + block.serializeAsBlock(sink, fromRow, toRow); + } finally { + if (sink != null) { + sink.finish(); + } + } + } + + private ClickhouseStreamDataSink dataSink(ByteBuf buf) { + return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), chctx); + } + + protected Map settings() { + return conn.getDatabaseMetaData().getProperties(); + } + + public void sendColumns(RowOrientedBlock block, ByteBuf buf, Integer maxInsertBlockSize) { + int nRows = block.totalRows(); + int blockSize = maxInsertBlockSize == null ? nRows : maxInsertBlockSize; + int fromRow = 0; + while (fromRow < nRows) { + int toRow = Math.min(nRows, fromRow + blockSize); + sendData(buf, block, "", fromRow, toRow); + fromRow = toRow; + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 08ac968216..0996b9e113 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -11,6 +11,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; +import java.util.AbstractMap; import java.util.List; import java.util.Map; @@ -91,7 +92,7 @@ private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); } - private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { + private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { multistringReader = new MultistringMessageReader(); @@ -105,14 +106,16 @@ private List receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser tableColumnsPacketReader = new PacketReader(md, fullClientName, properties, lz4Factory); } ColumnOrientedBlock block = tableColumnsPacketReader.readDataBlock(alloc, in, true); + TableColumns ret = null; if (block != null) { + ret = new TableColumns(multistringMessage, block); LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); multistringReader = null; packetType = null; tableColumnsPacketReader = null; multistringMessage = null; } - return multistringMessage; + return ret; } private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index a24de144b9..0162ddf313 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -5,28 +5,71 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.Map; public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); + private final QueryParsers.QueryType queryType; - protected PrepareStatementCodec(PrepareStatementCommand cmd) { + private PacketReader packetReader; + + protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryParsers.QueryType queryType) { super(cmd); + this.queryType = queryType; } @Override void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("handle ready for query"); - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList())))); + String sql = cmd.sql(); + if (queryType == QueryParsers.QueryType.INSERT) { + int valuesIndex = sql.toLowerCase().lastIndexOf("values"); + String truncatedSql = sql.substring(0, valuesIndex + "values".length()); + ByteBuf buf = allocateBuffer(); + try { + PacketForge forge = new PacketForge(encoder.getConn(), encoder.chctx()); + forge.sendQuery(truncatedSql, buf); + forge.sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } catch (Throwable t) { + buf.release(); + throw t; + } + } else { + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), + new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false))); + } } @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { + if (packetReader == null) { + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); + } + Object packet = packetReader.receivePacket(ctx.alloc(), in); + if (packet != null) { + packetReader = null; + if (packet.getClass() == TableColumns.class) { + TableColumns columns = (TableColumns)packet; + Map data = columns.columnDefinition().getColumnsWithTypes(); + + List columnNames = new ArrayList<>(data.keySet()); + List columnTypes = new ArrayList<>(data.values()); + ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); + completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true))); + } else if (packet instanceof Throwable) { + cmd.fail((Throwable) packet); + } + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java new file mode 100644 index 0000000000..5034ea4bb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -0,0 +1,97 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.sqlclient.Tuple; + +import java.time.temporal.Temporal; +import java.util.HashSet; +import java.util.Set; + +public class QueryParsers { + private static final String[] selectKeywords = new String[]{"SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"}; + private static final String INSERT_KEYWORD = "INSERT"; + private static final int INSERT_KEYWORD_LENGTH = INSERT_KEYWORD.length(); + + private static final String UPDATE_KEYWORD = "UPDATE"; + private static final int UPDATE_KEYWORD_LENGTH = UPDATE_KEYWORD.length(); + + //TODO: maybe switch to antlr4 + public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { + int prevIdx = 0; + int newIdx; + StringBuilder bldr = new StringBuilder(); + Set usedArgs = new HashSet<>(); + while(prevIdx < parametrizedSql.length() && (newIdx = parametrizedSql.indexOf('$', prevIdx)) != -1) { + if (newIdx == 0 || parametrizedSql.charAt(newIdx - 1) != '\\') { + int paramIdxStartPos = newIdx + 1; + int paramIdxEndPos = paramIdxStartPos; + while (paramIdxEndPos < parametrizedSql.length() && Character.isDigit(parametrizedSql.charAt(paramIdxEndPos))) { + ++paramIdxEndPos; + } + if (paramIdxStartPos == paramIdxEndPos) { + throw new IllegalArgumentException("$ without digit at pos " + paramIdxStartPos + " in query " + parametrizedSql); + } + int paramIndex = Integer.parseInt(parametrizedSql.substring(paramIdxStartPos, paramIdxEndPos)) - 1; + if (paramsList == null || paramIndex >= paramsList.size()) { + throw new IllegalArgumentException("paramList is null or too small(" + (paramsList == null ? null : paramsList.size()) + + ") for arg with index " + paramIndex); + } + Object paramValue = paramsList.getValue(paramIndex); + bldr.append(parametrizedSql, prevIdx, newIdx); + Class paramClass = paramValue == null ? null : paramValue.getClass(); + if (paramClass != null) { + if (CharSequence.class.isAssignableFrom(paramClass) || paramClass == Character.class || Temporal.class.isAssignableFrom(paramClass)) { + bldr.append('\'').append(paramValue).append('\''); + } else if (paramClass == Double.class) { + //DB parser gets mad at 4.9e-322 or smaller. Using cast to cure + bldr.append(String.format("CAST('%s', 'Float64')", paramValue.toString())); + } else if (paramClass == Float.class) { + bldr.append(String.format("CAST('%s', 'Float32')", paramValue.toString())); + } else { + bldr.append(paramValue); + } + } else { + bldr.append(paramValue); + } + usedArgs.add(paramIndex); + newIdx = paramIdxEndPos; + } + prevIdx = newIdx; + } + if (usedArgs.size() != paramsList.size()) { + throw new IllegalArgumentException("param count mismatch: query consumed " + + usedArgs.size() + ", but provided count is " + paramsList.size()); + } + bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); + return bldr.toString(); + } + + + public static QueryType queryType(String sql) { + for (int i = 0; i < sql.length(); i++) { + String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); + if ("--".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("\n", i)); + } else if ("/*".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("*/", i)); + } else if (Character.isLetter(sql.charAt(i))) { + String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); + for (String keyword : selectKeywords){ + if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { + return QueryType.SELECT; + } + } + if (trimmed.regionMatches(true, 0, INSERT_KEYWORD, 0, INSERT_KEYWORD_LENGTH)) { + return QueryType.INSERT; + } + if (trimmed.regionMatches(true, 0, UPDATE_KEYWORD, 0, UPDATE_KEYWORD_LENGTH)) { + return QueryType.UPDATE; + } + return null; + } + } + return null; + } + + enum QueryType { + SELECT, INSERT, UPDATE; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 221d8f8297..7f5a920e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -23,4 +23,19 @@ public void writeByte(int value) { public void writeIntLE(int value) { sink.writeIntLE(value); } + + @Override + public void writeBytes(byte[] value) { + sink.writeBytes(value); + } + + @Override + public void writeBoolean(boolean value) { + sink.writeBoolean(value); + } + + @Override + public void writePascalString(String str) { + ByteBufUtils.writePascalString(str, sink); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 8cfefc75f1..2410dd54b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -2,7 +2,6 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -11,26 +10,30 @@ import io.vertx.sqlclient.impl.command.QueryCommandBase; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - private final boolean requireUpdates; + private final boolean commandRequiresUpdatesDelivery; + protected final QueryParsers.QueryType queryType; + protected final int batchSize; + private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; protected final ClickhouseNativeSocketConnection conn; protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { - this(cmd, conn, false); + this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdates) { + protected SimpleQueryCommandCodec(QueryParsers.QueryType queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); + this.queryType = queryType; + this.batchSize = batchSize; this.conn = conn; - this.requireUpdates = requireUpdates; + this.commandRequiresUpdatesDelivery = requireUpdatesDelivery; } @Override @@ -39,9 +42,15 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); if (!isSuspended()) { ByteBuf buf = allocateBuffer(); - sendQuery(sql(), buf); - sendExternalTables(buf, Collections.emptyList()); - encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + try { + PacketForge forge = new PacketForge(conn, encoder.chctx()); + forge.sendQuery(sql(), buf); + forge.sendExternalTables(buf, Collections.emptyList()); + encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); + } catch (Throwable t) { + buf.release(); + throw t; + } } } @@ -49,57 +58,6 @@ protected String sql() { return cmd.sql(); } - private void sendExternalTables(ByteBuf buf, Collection blocks) { - ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); - for (RowOrientedBlock block : blocks) { - //TODO smagellan - sendData(buf, block, null); - } - sendData(buf, new RowOrientedBlock(null, null, new BlockInfo(), md), ""); - } - - private void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { - ByteBufUtils.writeULeb128(ClientPacketTypes.DATA, buf); - if (encoder.getConn().getDatabaseMetaData().getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { - ByteBufUtils.writePascalString(tableName, buf); - } - ClickhouseStreamDataSink sink = null; - try { - sink = dataSink(buf); - block.serializeTo(sink); - } finally { - if (sink != null) { - sink.finish(); - } - } - } - - private ClickhouseStreamDataSink dataSink(ByteBuf buf) { - return conn.lz4Factory() == null ? new RawClickhouseStreamDataSink(buf) : new Lz4ClickhouseStreamDataSink(buf, conn.lz4Factory(), encoder.chctx()); - } - - private void sendQuery(String query, ByteBuf buf) { - LOG.info("running query: " + query); - ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); - //query id - ByteBufUtils.writePascalString("", buf); - ClickhouseNativeDatabaseMetadata meta = encoder.getConn().getDatabaseMetaData(); - int serverRevision = meta.getRevision(); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { - ClientInfo clInfo = new ClientInfo(meta); - clInfo.serializeTo(buf); - } - boolean settingsAsStrings = serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS; - writeSettings(settings(), settingsAsStrings, true, buf); - if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_INTERSERVER_SECRET) { - ByteBufUtils.writePascalString("", buf); - } - ByteBufUtils.writeULeb128(QueryProcessingStage.COMPLETE, buf); - int compressionEnabled = conn.lz4Factory() == null ? Compression.DISABLED : Compression.ENABLED; - ByteBufUtils.writeULeb128(compressionEnabled, buf); - ByteBufUtils.writePascalString(query, buf); - } - protected Map settings() { return conn.getDatabaseMetaData().getProperties(); } @@ -112,24 +70,6 @@ protected void checkIfBusy() { conn.throwExceptionIfBusy(null); } - private void writeSettings(Map settings, boolean settingsAsStrings, boolean settingsAreImportant, ByteBuf buf) { - if (settingsAsStrings) { - for (Map.Entry entry : settings.entrySet()) { - if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { - LOG.info("writing query setting: " + entry); - ByteBufUtils.writePascalString(entry.getKey(), buf); - buf.writeBoolean(settingsAreImportant); - ByteBufUtils.writePascalString(entry.getValue(), buf); - } - } - } else { - //TODO smagellan - throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); - } - //end of settings - ByteBufUtils.writePascalString("", buf); - } - @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.info("decode, readable bytes: " + in.readableBytes()); @@ -148,7 +88,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } packetReader = null; rowResultDecoder.generateRows(block); - if (requireUpdates && block.numRows() > 0) { + if (commandRequiresUpdatesDelivery && block.numRows() > 0) { notifyOperationUpdate(true, null); } ++dataPacketNo; @@ -177,6 +117,10 @@ private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { } private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { + notifyOperationUpdate(0, hasMoreResults, t); + } + + private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); @@ -184,7 +128,13 @@ private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - cmd.resultHandler().handleResult(0, size, rowResultDecoder.getRowDesc(), result, failure); + cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); + } else { + if (queryType == QueryParsers.QueryType.INSERT) { + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); + failure = rowResultDecoder.complete(); + cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); + } } if (t != null) { if (failure == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java new file mode 100644 index 0000000000..e5be96fa10 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; + +import java.util.List; + +public class TableColumns { + private final List msg; + private final ColumnOrientedBlock columnDefinition; + + public TableColumns(List msg, ColumnOrientedBlock columnDefinition) { + this.msg = msg; + this.columnDefinition = columnDefinition; + } + + public List msg() { + return msg; + } + + public ColumnOrientedBlock columnDefinition() { + return columnDefinition; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index ae128c482d..ddabf6689d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,9 +1,12 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; import java.util.BitSet; +import java.util.List; public abstract class ClickhouseColumn { private static final Object NOP_STATE = new Object(); @@ -113,4 +116,45 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } + + public void serializeColumn(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + serializeStatePrefix(sink, columnIndex, data, fromRow, toRow); + serializeData(sink, columnIndex, data, fromRow, toRow); + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + } + + protected void serializeData(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + if (columnDescriptor.isNullable()) { + serializeNullsMap(sink, columnIndex, data, fromRow, toRow); + } + serializeDataInternal(sink, columnIndex, data, fromRow, toRow); + } + + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + sink.writeBoolean(val == null); + } + } + + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + if (val == null) { + serializeDataNull(sink); + } else { + serializeDataElement(sink, val); + } + } + } + + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + throw new IllegalStateException("not implemented"); + } + + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + throw new IllegalStateException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a8dd0f55bd..a860c5917d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; @@ -55,4 +56,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + sink.writeULeb128(bytes.length); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeULeb128(0); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 0c417f93a7..6c00e5ea79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,6 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; public class UInt32Column extends ClickhouseColumn { @@ -39,4 +40,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + int b = number == null ? 0 : number.intValue(); + sink.writeIntLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 5c2ac6041c..5c6a23e07b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,8 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + public class UInt8Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 1; @@ -39,4 +41,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + byte b = number == null ? 0 : number.byteValue(); + sink.writeByte(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeByte(0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 6e52c76c12..b9bcfd63b0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,8 +1,6 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; @@ -17,10 +15,6 @@ @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeBinaryDataTypeEncodeTest.class); - - //updates may be async even for non-replicated tables; - public static final int SLEEP_TIME = 100; @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -89,11 +83,7 @@ public void testNullValues(TestContext ctx) { .addValue(null) .addValue(null), ctx.asyncAssertSuccess(updateResult -> { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - LOG.error(e); - } + Sleep.sleepOrThrow(); conn .preparedQuery("SELECT * FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { @@ -120,11 +110,7 @@ protected void testEncodeGeneric(TestContext ctx, conn .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - LOG.error(e); - } + Sleep.sleepOrThrow(); conn .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java new file mode 100644 index 0000000000..8e452b2dcf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -0,0 +1,58 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.tck.PreparedBatchTestBase; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedBatchTest extends PreparedBatchTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Test + public void testBatchQuery(TestContext ctx) { + connector.connect(ctx.asyncAssertSuccess(conn -> { + List batch = new ArrayList<>(); + batch.add(Tuple.of(1)); + batch.add(Tuple.of(3)); + batch.add(Tuple.of(5)); + //select multi-batches are not supported + conn.preparedQuery(statement("SELECT * FROM immutable WHERE id=", "")).executeBatch(batch, ctx.asyncAssertFailure()); + })); + } + + @Override + protected int expectedInsertBatchSize(List batch) { + return batch.size(); + } + + @Override + protected void maybeSleep() { + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java new file mode 100644 index 0000000000..7b5c5ef062 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java @@ -0,0 +1,14 @@ +package io.vertx.clickhousenativeclient.tck; + +class Sleep { + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + static void sleepOrThrow() { + try { + Thread.sleep(SLEEP_TIME); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java index 6c59da8cd6..4aaca3fc30 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/PreparedBatchTestBase.java @@ -52,6 +52,13 @@ public void tearDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } + protected void maybeSleep() { + } + + protected int expectedInsertBatchSize(List batch) { + return 1; + } + @Test public void testInsert(TestContext ctx) { connector.connect(ctx.asyncAssertSuccess(conn -> { @@ -62,7 +69,8 @@ public void testInsert(TestContext ctx) { batch.add(Tuple.wrap(Arrays.asList(79994, "batch four"))); conn.preparedQuery(statement("INSERT INTO mutable (id, val) VALUES (", ", ", ")")).executeBatch(batch, ctx.asyncAssertSuccess(result -> { - ctx.assertEquals(1, result.rowCount()); + maybeSleep(); + ctx.assertEquals(expectedInsertBatchSize(batch), result.rowCount()); conn.preparedQuery(statement("SELECT * FROM mutable WHERE id=", "")).executeBatch(Collections.singletonList(Tuple.of(79991)), ctx.asyncAssertSuccess(ar1 -> { ctx.assertEquals(1, ar1.size()); Row one = ar1.iterator().next(); From d37f743d084c026562f4da2ef70cf5befcf1dd02 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 21 Mar 2021 17:10:42 +0300 Subject: [PATCH 112/176] splitted columns into readers and writers Signed-off-by: vladimir --- .../clickhousenative/impl/BaseBlock.java | 8 +- .../ClickhouseNativeDatabaseMetadata.java | 2 +- .../impl/ClickhouseNativeRow.java | 7 +- .../impl/ColumnOrientedBlock.java | 8 +- .../impl/RowOrientedBlock.java | 17 +- .../impl/codec/ClickhouseStreamDataSink.java | 6 + .../impl/codec/ColumnOrientedBlockReader.java | 8 +- .../codec/Lz4ClickhouseStreamDataSink.java | 30 +++ .../codec/Lz4ClickhouseStreamDataSource.java | 2 +- .../codec/RawClickhouseStreamDataSink.java | 30 +++ .../impl/codec/columns/ArrayColumn.java | 191 +---------------- .../impl/codec/columns/ArrayColumnReader.java | 202 ++++++++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 152 +------------ .../codec/columns/ClickhouseColumnReader.java | 122 +++++++++++ .../codec/columns/ClickhouseColumnWriter.java | 70 ++++++ .../impl/codec/columns/ClickhouseColumns.java | 98 ++++----- .../impl/codec/columns/DateColumn.java | 19 +- .../impl/codec/columns/DateColumnReader.java | 19 ++ .../impl/codec/columns/DateTime64Column.java | 40 ++-- .../codec/columns/DateTime64ColumnReader.java | 42 ++++ .../impl/codec/columns/DateTimeColumn.java | 33 +-- .../codec/columns/DateTimeColumnReader.java | 37 ++++ .../impl/codec/columns/Decimal128Column.java | 40 +--- .../codec/columns/Decimal128ColumnReader.java | 42 ++++ .../impl/codec/columns/Decimal256Column.java | 40 +--- .../codec/columns/Decimal256ColumnReader.java | 42 ++++ .../impl/codec/columns/Decimal32Column.java | 36 +--- .../codec/columns/Decimal32ColumnReader.java | 38 ++++ .../impl/codec/columns/Decimal64Column.java | 36 +--- .../codec/columns/Decimal64ColumnReader.java | 38 ++++ .../impl/codec/columns/Enum16Column.java | 23 +- .../codec/columns/Enum16ColumnReader.java | 21 ++ .../impl/codec/columns/Enum8Column.java | 23 +- .../impl/codec/columns/Enum8ColumnReader.java | 21 ++ .../impl/codec/columns/FixedStringColumn.java | 45 +--- .../columns/FixedStringColumnReader.java | 52 +++++ .../columns/FixedStringColumnWriter.java | 33 +++ .../impl/codec/columns/Float32Column.java | 27 +-- .../codec/columns/Float32ColumnReader.java | 28 +++ .../codec/columns/Float32ColumnWriter.java | 24 +++ .../impl/codec/columns/Float64Column.java | 27 +-- .../codec/columns/Float64ColumnReader.java | 29 +++ .../codec/columns/Float64ColumnWriter.java | 25 +++ .../codec/columns/LowCardinalityColumn.java | 119 +---------- .../columns/LowCardinalityColumnReader.java | 127 +++++++++++ .../impl/codec/columns/StringColumn.java | 64 +----- .../codec/columns/StringColumnReader.java | 64 ++++++ .../codec/columns/StringColumnWriter.java | 28 +++ .../impl/codec/columns/UInt128Column.java | 33 +-- .../codec/columns/UInt128ColumnReader.java | 39 ++++ .../impl/codec/columns/UInt16Column.java | 38 +--- .../codec/columns/UInt16ColumnReader.java | 42 ++++ .../codec/columns/UInt16ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt32Column.java | 51 +---- .../codec/columns/UInt32ColumnReader.java | 50 +++++ .../codec/columns/UInt32ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt64Column.java | 51 +---- .../codec/columns/UInt64ColumnReader.java | 57 +++++ .../codec/columns/UInt64ColumnWriter.java | 24 +++ .../impl/codec/columns/UInt8Column.java | 50 +---- .../impl/codec/columns/UInt8ColumnReader.java | 50 +++++ .../impl/codec/columns/UInt8ColumnWriter.java | 24 +++ .../impl/codec/columns/UUIDColumn.java | 30 +-- .../impl/codec/columns/UUIDColumnReader.java | 32 +++ ....java => ClickhouseColumnsTestReader.java} | 4 +- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 42 +--- .../tck/BinaryDataTypeEncodeTestBase.java | 10 +- 67 files changed, 1849 insertions(+), 1061 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{ClickhouseColumnsTest.java => ClickhouseColumnsTestReader.java} (90%) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index a6712e8105..72c5f8a407 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,19 +1,19 @@ package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import java.util.List; import java.util.Map; public class BaseBlock { private final Map columnsWithTypes; - private final List data; + private final List data; private final BlockInfo blockInfo; private final ClickhouseNativeDatabaseMetadata md; public BaseBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; this.data = data; this.blockInfo = blockInfo; @@ -24,7 +24,7 @@ public Map getColumnsWithTypes() { return columnsWithTypes; } - public List getData() { + public List getData() { return data; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 760d36a491..45d1644c34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -67,7 +67,7 @@ public String getDisplayName() { return displayName; } - public ZoneId getTimezone() { + public ZoneId getZoneId() { return timezone; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java index e1352122ee..a7074712c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java @@ -1,11 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.sql.JDBCType; import java.util.List; public class ClickhouseNativeRow implements Row { @@ -37,8 +36,8 @@ public Object getValue(int columnIndex) { } private Object getValue(int columnIndex, Class desired) { - List data = block.getData(); - ClickhouseColumn column = data.get(columnIndex); + List data = block.getData(); + ClickhouseColumnReader column = data.get(columnIndex); Object columnData = column.getElement(rowNo, desired); return columnData; //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 3bb756c68d..eb434e55ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,7 +1,7 @@ package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import java.util.Collection; import java.util.List; @@ -10,18 +10,18 @@ public class ColumnOrientedBlock extends BaseBlock { public ColumnOrientedBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); } public int numColumns() { - Collection dt = getData(); + Collection dt = getData(); return dt == null ? 0 : dt.size(); } public int numRows() { if (numColumns() > 0) { - ClickhouseColumn firstColumn = getData().iterator().next(); + ClickhouseColumnReader firstColumn = getData().iterator().next(); return firstColumn.nRows(); } else { return 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 5b0d2cb803..58472bcc18 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -3,7 +3,7 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; @@ -15,6 +15,7 @@ public class RowOrientedBlock { private final List data; private final BlockInfo blockInfo; private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseColumnWriter[] writers; public RowOrientedBlock(RowDesc rowDesc, List data, ClickhouseNativeDatabaseMetadata md) { @@ -22,6 +23,17 @@ public RowOrientedBlock(RowDesc rowDesc, this.data = data; this.blockInfo = new BlockInfo(); this.md = md; + this.writers = buildWriters(); + } + + private ClickhouseColumnWriter[] buildWriters() { + ClickhouseColumnWriter[] ret = new ClickhouseColumnWriter[nColumns()]; + for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { + ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseColumnWriter writer = ClickhouseColumns.columnForSpec(descr, md).writer(data, columnIndex); + ret[columnIndex] = writer; + } + return ret; } public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toRow) { @@ -36,10 +48,9 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //TODO smagellan for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); - ClickhouseColumn column = ClickhouseColumns.columnForSpec(descr, nRows, md); sink.writePascalString(descr.name()); sink.writePascalString(descr.getUnparsedNativeType()); - column.serializeColumn(sink, columnIndex, data, fromRow, toRow); + writers[columnIndex].serializeColumn(sink, fromRow, toRow); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 3c8a2358fa..b7276845de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -3,10 +3,16 @@ public interface ClickhouseStreamDataSink { void writeULeb128(int value); void writeByte(int value); + void writeShortLE(int value); void writeIntLE(int value); + void writeLongLE(long value); + void writeFloatLE(float value); + void writeDoubleLE(double value); void writeBytes(byte[] value); void writeBoolean(boolean value); + void writeZero(int length); void writePascalString(String value); + void ensureWritable(int size); default void finish() { } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 55f9cd10f7..1c7178089e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -4,7 +4,7 @@ import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,11 +25,11 @@ public class ColumnOrientedBlockReader { private Integer nColumns; private Integer nRows; private Map colWithTypes; - private List data; + private List data; private String colName; private String colType; - private ClickhouseColumn columnData; + private ClickhouseColumnReader columnData; private ClickhouseNativeColumnDescriptor columnDescriptor; public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { @@ -88,7 +88,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { data = new ArrayList<>(nColumns); } if (columnData == null) { - columnData = ClickhouseColumns.columnForSpec(columnDescriptor, nRows, md); + columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { LOG.info("reading column " + colName + " of type " + colType); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 5de074526f..187a2f1af8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -37,6 +37,26 @@ public void writeByte(int value) { tmpStorage.writeByte(value); } + @Override + public void writeShortLE(int value) { + tmpStorage.writeShortLE(value); + } + + @Override + public void writeLongLE(long value) { + tmpStorage.writeLongLE(value); + } + + @Override + public void writeFloatLE(float value) { + tmpStorage.writeFloatLE(value); + } + + @Override + public void writeDoubleLE(double value) { + tmpStorage.writeDoubleLE(value); + } + @Override public void writeIntLE(int value) { tmpStorage.writeIntLE(value); @@ -52,11 +72,21 @@ public void writeBoolean(boolean value) { tmpStorage.writeBoolean(value); } + @Override + public void writeZero(int length) { + tmpStorage.writeZero(length); + } + @Override public void writePascalString(String str) { ByteBufUtils.writePascalString(str, tmpStorage); } + @Override + public void ensureWritable(int size) { + tmpStorage.ensureWritable(size); + } + @Override public void finish() { ByteBuf compressed = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 1177e27388..6e23a60d3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -28,7 +28,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; - this.decompressedData = alloc.buffer(); + this.decompressedData = alloc.heapBuffer(); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 7f5a920e20..877a91824c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -19,6 +19,26 @@ public void writeByte(int value) { sink.writeByte(value); } + @Override + public void writeShortLE(int value) { + sink.writeShortLE(value); + } + + @Override + public void writeLongLE(long value) { + sink.writeLongLE(value); + } + + @Override + public void writeFloatLE(float value) { + sink.writeFloatLE(value); + } + + @Override + public void writeDoubleLE(double value) { + sink.writeDoubleLE(value); + } + @Override public void writeIntLE(int value) { sink.writeIntLE(value); @@ -34,8 +54,18 @@ public void writeBoolean(boolean value) { sink.writeBoolean(value); } + @Override + public void writeZero(int length) { + sink.writeZero(length); + } + @Override public void writePascalString(String str) { ByteBufUtils.writePascalString(str, sink); } + + @Override + public void ensureWritable(int size) { + sink.ensureWritable(size); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index e38e8a5ef2..6ca8475b71 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -2,201 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.sql.JDBCType; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.Iterator; import java.util.List; -import java.util.Map; public class ArrayColumn extends ClickhouseColumn { - private static final Object[] EMPTY_ARRAY = new Object[0]; - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; - - private Deque, Integer>> graphLevelDeque; - private List> slicesSeries; - private List curSlice; - private Integer curDepth; - private ClickhouseNativeColumnDescriptor curNestedColumnDescr; - private ClickhouseColumn curNestedColumn; - private Integer nItems; - private boolean resliced; - private Object statePrefix; - private boolean hasFirstSlice; - private int sliceIdxAtCurrentDepth; - private int prevSliceSizeAtCurrentDepth = 0; - private Triplet, Integer> slicesAtCurrentDepth; - - public ArrayColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr.copyAsNestedArray()); + public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); this.md = md; - this.elementaryDescr = elementaryDescr(columnDescriptor); - } - - private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; } @Override - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - ClickhouseColumn statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, 0, md); - if (statePrefix == null) { - statePrefix = statePrefixColumn.readStatePrefix(in); - } - return statePrefix; + public ClickhouseColumnReader reader(int nRows) { + return new ArrayColumnReader(nRows, descriptor, md); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (graphLevelDeque == null) { - graphLevelDeque = new ArrayDeque<>(); - graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); - slicesSeries = new ArrayList<>(); - curSlice = new ArrayList<>(); - curDepth = 0; - curNestedColumnDescr = columnDescriptor.getNestedDescr(); - nItems = 0; - } - if (statePrefix == null) { - return null; - } - readSlices(in); - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, nItems, md); - } - if (curNestedColumnDescr.isNullable()) { - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); - } - if (nItems > 0) { - assert nItems == curNestedColumn.nRows; - if (curNestedColumn.getClass() == LowCardinalityColumn.class) { - ((LowCardinalityColumn)curNestedColumn).keysSerializationVersion = LowCardinalityColumn.SUPPORTED_SERIALIZATION_VERSION; - } - if (curNestedColumn.isPartial()) { - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); - if (curNestedColumn.isPartial()) { - return null; - } - } - if (elementaryDescr.jdbcType() == JDBCType.VARCHAR - || curNestedColumn.getClass() == Enum8Column.class - || curNestedColumn.getClass() == Enum16Column.class) { - return curNestedColumn.itemsArray; - } - resliced = true; - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); - } - resliced = true; - return resliceIntoArray(EMPTY_ARRAY); - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object[] objectsArray = (Object[]) this.itemsArray; - Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); - return reslicedRet[rowIdx]; - } - - private Object[] asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { - return stringifyByteArrays(src, md.getStringCharset()); - } - return src; - } - - private Object[] stringifyByteArrays(Object[] src, Charset charset) { - Object[] ret = new Object[src.length]; - for (int i = 0; i < src.length; ++i) { - Object element = src[i]; - if (element != null) { - ret[i] = new String((byte[]) element, charset); - } - } - return ret; - } - - private Object[] resliceIntoArray(Object[] data) { - Object[] intermData = data; - for (int i = slicesSeries.size() - 1; i >= 0; --i) { - List slices = slicesSeries.get(i); - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = new Object[slices.size() - 1]; - int tmpSliceIdx = 0; - while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliceSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); - newDataList[tmpSliceIdx] = resliced; - ++tmpSliceIdx; - } - intermData = newDataList; - } - return intermData; - } - - private void readSlices(ClickhouseStreamDataSource in) { - if (!hasFirstSlice) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - hasFirstSlice = readSlice(in, slicesAtCurrentDepth); - } - - while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { - if (sliceIdxAtCurrentDepth == 0) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - - curDepth = slicesAtCurrentDepth.right(); - slicesSeries.add(curSlice); - - //The last element in slice is index(number) of the last - //element in current level. On the last iteration this - //represents number of elements in fully flattened array. - nItems = curSlice.get(curSlice.size() - 1); - curSlice = new ArrayList<>(); - } - if (curNestedColumnDescr.isArray()) { - readSlice(in, slicesAtCurrentDepth); - } - } - } - - private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { - if (sliceIdxAtCurrentDepth == 0) { - curSlice.add(0); - } - for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { - int size = sliceState.middle().get(sliceIdxAtCurrentDepth); - int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; - if (in.readableBytes() < nestedSizeCount * 8) { - return false; - } - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); - } - nestedSizes.add((int) sz); - } - curSlice.addAll(nestedSizes); - prevSliceSizeAtCurrentDepth = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); - } - sliceIdxAtCurrentDepth = 0; - prevSliceSizeAtCurrentDepth = 0; - return true; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java new file mode 100644 index 0000000000..53c8b9b53d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -0,0 +1,202 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.nio.charset.Charset; +import java.sql.JDBCType; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Object[] EMPTY_ARRAY = new Object[0]; + + private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + + private Deque, Integer>> graphLevelDeque; + private List> slicesSeries; + private List curSlice; + private Integer curDepth; + private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private ClickhouseColumnReader curNestedColumn; + private Integer nItems; + private boolean resliced; + private Object statePrefix; + private boolean hasFirstSlice; + private int sliceIdxAtCurrentDepth; + private int prevSliceSizeAtCurrentDepth = 0; + private Triplet, Integer> slicesAtCurrentDepth; + + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descr.copyAsNestedArray()); + this.md = md; + this.elementaryDescr = elementaryDescr(columnDescriptor); + } + + private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, md).reader(0); + if (statePrefix == null) { + statePrefix = statePrefixColumn.readStatePrefix(in); + } + return statePrefix; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (graphLevelDeque == null) { + graphLevelDeque = new ArrayDeque<>(); + graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + slicesSeries = new ArrayList<>(); + curSlice = new ArrayList<>(); + curDepth = 0; + curNestedColumnDescr = columnDescriptor.getNestedDescr(); + nItems = 0; + } + if (statePrefix == null) { + return null; + } + readSlices(in); + if (curNestedColumn == null) { + curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md).reader(nItems); + } + if (curNestedColumnDescr.isNullable()) { + curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + } + if (nItems > 0) { + assert nItems == curNestedColumn.nRows; + if (curNestedColumn.getClass() == LowCardinalityColumnReader.class) { + ((LowCardinalityColumnReader)curNestedColumn).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + } + if (curNestedColumn.isPartial()) { + curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); + if (curNestedColumn.isPartial()) { + return null; + } + } + if (elementaryDescr.jdbcType() == JDBCType.VARCHAR + || curNestedColumn.getClass() == Enum8ColumnReader.class + || curNestedColumn.getClass() == Enum16ColumnReader.class) { + return curNestedColumn.itemsArray; + } + resliced = true; + return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + } + resliced = true; + return resliceIntoArray(EMPTY_ARRAY); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object[] objectsArray = (Object[]) this.itemsArray; + Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + return reslicedRet[rowIdx]; + } + + private Object[] asDesiredType(Object[] src, Class desired) { + if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { + return stringifyByteArrays(src, md.getStringCharset()); + } + return src; + } + + private Object[] stringifyByteArrays(Object[] src, Charset charset) { + Object[] ret = new Object[src.length]; + for (int i = 0; i < src.length; ++i) { + Object element = src[i]; + if (element != null) { + ret[i] = new String((byte[]) element, charset); + } + } + return ret; + } + + private Object[] resliceIntoArray(Object[] data) { + Object[] intermData = data; + for (int i = slicesSeries.size() - 1; i >= 0; --i) { + List slices = slicesSeries.get(i); + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = new Object[slices.size() - 1]; + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] resliced = new Object[newSliceSz]; + System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); + newDataList[tmpSliceIdx] = resliced; + ++tmpSliceIdx; + } + intermData = newDataList; + } + return intermData; + } + + private void readSlices(ClickhouseStreamDataSource in) { + if (!hasFirstSlice) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + } + + while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { + if (sliceIdxAtCurrentDepth == 0) { + slicesAtCurrentDepth = graphLevelDeque.remove(); + curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); + + curDepth = slicesAtCurrentDepth.right(); + slicesSeries.add(curSlice); + + //The last element in slice is index(number) of the last + //element in current level. On the last iteration this + //represents number of elements in fully flattened array. + nItems = curSlice.get(curSlice.size() - 1); + curSlice = new ArrayList<>(); + } + if (curNestedColumnDescr.isArray()) { + readSlice(in, slicesAtCurrentDepth); + } + } + } + + private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { + if (sliceIdxAtCurrentDepth == 0) { + curSlice.add(0); + } + for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { + int size = sliceState.middle().get(sliceIdxAtCurrentDepth); + int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; + if (in.readableBytes() < nestedSizeCount * 8) { + return false; + } + ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); + for (int i = 0; i < nestedSizeCount; ++i) { + long sz = in.readLongLE(); + if (sz > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + } + nestedSizes.add((int) sz); + } + curSlice.addAll(nestedSizes); + prevSliceSizeAtCurrentDepth = size; + graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + } + sliceIdxAtCurrentDepth = 0; + prevSliceSizeAtCurrentDepth = 0; + return true; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index ddabf6689d..7dc34b0675 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,160 +1,18 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.Tuple; -import java.util.BitSet; import java.util.List; public abstract class ClickhouseColumn { - private static final Object NOP_STATE = new Object(); + protected ClickhouseNativeColumnDescriptor descriptor; - protected final int nRows; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; - protected BitSet nullsMap; - protected Object itemsArray; - - protected ClickhouseColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - this.columnDescriptor = columnDescriptor; - this.nRows = nRows; - } - - public ClickhouseNativeColumnDescriptor columnDescriptor() { - return columnDescriptor; - } - - public void readColumn(ClickhouseStreamDataSource in){ - readStatePrefix(in); - readData(in); - } - - public int nRows() { - return nRows; - } - - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - return NOP_STATE; + public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { + this.descriptor = descriptor; } - protected void readData(ClickhouseStreamDataSource in) { - if (columnDescriptor.isNullable() && nullsMap == null) { - nullsMap = readNullsMap(in); - if (nullsMap == null) { - return; - } - } - readDataInternal(in); - } - - protected void readDataInternal(ClickhouseStreamDataSource in) { - if (itemsArray == null) { - itemsArray = readItems(in); - if (itemsArray == null) { - return; - } - } - afterReadItems(in); - } + public abstract ClickhouseColumnReader reader(int nRows); - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { - itemsArray = readItems(in); - return asObjectsArray(desired); - } - - protected Object[] asObjectsArray(Class desired) { - return (Object[]) itemsArray; - } - - protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = new Object[nRows]; - for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i, desired); - } - return ret; - } - - protected abstract Object readItems(ClickhouseStreamDataSource in); - protected void afterReadItems(ClickhouseStreamDataSource in) { - } - - protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= nRows) { - BitSet bSet = new BitSet(nRows); - for (int i = 0; i < nRows; ++i) { - byte b = in.readByte(); - if (b != 0) { - bSet.set(i); - } - } - return bSet; - } - return null; - } - - public boolean isPartial() { - return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); - } - - public Object getItemsArray() { - return itemsArray; - } - - public Object getElement(int rowIdx, Class desired) { - if (nullsMap != null && nullsMap.get(rowIdx)) { - return null; - } - return getElementInternal(rowIdx, desired); - } - - protected Object getElementInternal(int rowIdx, Class desired) { - return java.lang.reflect.Array.get(itemsArray, rowIdx); - } - - protected Object getObjectsArrayElement(int rowIdx) { - Object[] data = (Object[]) itemsArray; - return data[rowIdx]; - } - - public void serializeColumn(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - serializeStatePrefix(sink, columnIndex, data, fromRow, toRow); - serializeData(sink, columnIndex, data, fromRow, toRow); - } - - protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - } - - protected void serializeData(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - if (columnDescriptor.isNullable()) { - serializeNullsMap(sink, columnIndex, data, fromRow, toRow); - } - serializeDataInternal(sink, columnIndex, data, fromRow, toRow); - } - - protected void serializeNullsMap(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { - Object val = data.get(rowNo).getValue(columnIndex); - sink.writeBoolean(val == null); - } - } - - protected void serializeDataInternal(ClickhouseStreamDataSink sink, int columnIndex, List data, int fromRow, int toRow) { - for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { - Object val = data.get(rowNo).getValue(columnIndex); - if (val == null) { - serializeDataNull(sink); - } else { - serializeDataElement(sink, val); - } - } - } - - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - throw new IllegalStateException("not implemented"); - } - - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - throw new IllegalStateException("not implemented"); - } + public abstract ClickhouseColumnWriter writer(List data, int columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java new file mode 100644 index 0000000000..a75bcefcae --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -0,0 +1,122 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.BitSet; +import java.util.List; + +public abstract class ClickhouseColumnReader { + private static final Object NOP_STATE = new Object(); + + protected final int nRows; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected BitSet nullsMap; + protected Object itemsArray; + + protected ClickhouseColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + this.columnDescriptor = columnDescriptor; + this.nRows = nRows; + } + + public ClickhouseNativeColumnDescriptor columnDescriptor() { + return columnDescriptor; + } + + public void readColumn(ClickhouseStreamDataSource in){ + readStatePrefix(in); + readData(in); + } + + public int nRows() { + return nRows; + } + + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + return NOP_STATE; + } + + protected void readData(ClickhouseStreamDataSource in) { + if (columnDescriptor.isNullable() && nullsMap == null) { + nullsMap = readNullsMap(in); + if (nullsMap == null) { + return; + } + } + readDataInternal(in); + } + + protected void readDataInternal(ClickhouseStreamDataSource in) { + if (itemsArray == null) { + itemsArray = readItems(in); + if (itemsArray == null) { + return; + } + } + afterReadItems(in); + } + + protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { + itemsArray = readItems(in); + return asObjectsArray(desired); + } + + protected Object[] asObjectsArray(Class desired) { + return (Object[]) itemsArray; + } + + protected Object[] asObjectsArrayWithGetElement(Class desired) { + Object[] ret = new Object[nRows]; + for (int i = 0; i < nRows; ++i) { + ret[i] = getElement(i, desired); + } + return ret; + } + + protected abstract Object readItems(ClickhouseStreamDataSource in); + protected void afterReadItems(ClickhouseStreamDataSource in) { + } + + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= nRows) { + BitSet bSet = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + byte b = in.readByte(); + if (b != 0) { + bSet.set(i); + } + } + return bSet; + } + return null; + } + + public boolean isPartial() { + return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); + } + + public Object getItemsArray() { + return itemsArray; + } + + public Object getElement(int rowIdx, Class desired) { + if (nullsMap != null && nullsMap.get(rowIdx)) { + return null; + } + return getElementInternal(rowIdx, desired); + } + + protected Object getElementInternal(int rowIdx, Class desired) { + return java.lang.reflect.Array.get(itemsArray, rowIdx); + } + + protected Object getObjectsArrayElement(int rowIdx) { + Object[] data = (Object[]) itemsArray; + return data[rowIdx]; + } + + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java new file mode 100644 index 0000000000..60f5d8c18a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -0,0 +1,70 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public abstract class ClickhouseColumnWriter { + protected final List data; + protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final int columnIndex; + + public ClickhouseColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + this.data = data; + this.columnDescriptor = columnDescriptor; + this.columnIndex = columnIndex; + } + + public void serializeColumn(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + serializeStatePrefix(sink, fromRow, toRow); + serializeData(sink, fromRow, toRow); + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + protected void serializeData(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + ensureCapacity(sink, fromRow, toRow); + if (columnDescriptor.isNullable()) { + serializeNullsMap(sink, fromRow, toRow); + } + serializeDataInternal(sink, fromRow, toRow); + } + + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + int nRows = toRow - fromRow; + int requiredSize = 0; + if (columnDescriptor.isNullable() && !columnDescriptor.isLowCardinality()) { + requiredSize += nRows; + } + if (columnDescriptor.getElementSize() > 0) { + requiredSize += nRows * columnDescriptor.getElementSize(); + } + sink.ensureWritable(requiredSize); + } + + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + sink.writeBoolean(val == null); + } + } + + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { + Object val = data.get(rowNo).getValue(columnIndex); + if (val == null) { + serializeDataNull(sink); + } else { + serializeDataElement(sink, val); + } + } + } + + protected abstract void serializeDataElement(ClickhouseStreamDataSink sink, Object val); + + //TODO: maybe perform ByteBuf.writerIndex(writerIndex() + elemSize) (is allocated memory is zero-filled ?) + protected abstract void serializeDataNull(ClickhouseStreamDataSink sink); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index ac86c3d08c..e60bbb5ac7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -54,20 +54,20 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32Column.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, @@ -78,13 +78,13 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumn.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); @@ -99,58 +99,58 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("Nothing".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float32".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float64".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); } else if ("Date".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16Column.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown spec: '" + spec + "'"); } private static int decimalSize(int precision) { - if (precision <= Decimal32Column.MAX_PRECISION) { - return Decimal32Column.ELEMENT_SIZE; - } else if (precision <= Decimal64Column.MAX_PRECISION) { - return Decimal64Column.ELEMENT_SIZE; - } else if (precision <= Decimal128Column.MAX_PRECISION) { - return Decimal128Column.ELEMENT_SIZE; + if (precision <= Decimal32ColumnReader.MAX_PRECISION) { + return Decimal32ColumnReader.ELEMENT_SIZE; + } else if (precision <= Decimal64ColumnReader.MAX_PRECISION) { + return Decimal64ColumnReader.ELEMENT_SIZE; + } else if (precision <= Decimal128ColumnReader.MAX_PRECISION) { + return Decimal128ColumnReader.ELEMENT_SIZE; } else { - return Decimal256Column.ELEMENT_SIZE; + return Decimal256ColumnReader.ELEMENT_SIZE; } } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, int nRows, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { - return new ArrayColumn(nRows, descr, md); + return new ArrayColumn(descr, md); } if (descr.isLowCardinality()) { - return new LowCardinalityColumn(nRows, descr, md); + return new LowCardinalityColumn(descr, md); } JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { - return new UInt8Column(nRows, descr); + return new UInt8Column(descr); } else if (jdbcType == JDBCType.SMALLINT) { - return new UInt16Column(nRows, descr); + return new UInt16Column(descr); } else if (jdbcType == JDBCType.INTEGER) { - return new UInt32Column(nRows, descr); + return new UInt32Column(descr); } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == UInt64Column.ELEMENT_SIZE) { - return new UInt64Column(nRows, descr); - } else if (descr.getElementSize() == UInt128Column.ELEMENT_SIZE) { - return new UInt128Column(nRows, descr); + if (descr.getElementSize() == UInt64ColumnReader.ELEMENT_SIZE) { + return new UInt64Column(descr); + } else if (descr.getElementSize() == UInt128ColumnReader.ELEMENT_SIZE) { + return new UInt128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(nRows, descr, md); + return new StringColumn(descr, md); } else { - return new FixedStringColumn(nRows, descr, md); + return new FixedStringColumn(descr, md); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; @@ -159,7 +159,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { + if (descr.getElementSize() == DateTime64ColumnReader.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); precision = Integer.parseInt(modifiers[0].trim()); zoneId = modifiers.length == 2 @@ -171,33 +171,33 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else { zoneId = ZoneId.systemDefault(); } - return precision == null ? new DateTimeColumn(nRows, descr, zoneId) : new DateTime64Column(nRows, descr, precision, zoneId); + return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { - return new Decimal32Column(nRows, descr); - } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { - return new Decimal64Column(nRows, descr); - } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { - return new Decimal128Column(nRows, descr); - } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { - return new Decimal256Column(nRows, descr); + if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { + return new Decimal32Column(descr); + } else if (descr.getElementSize() == Decimal64ColumnReader.ELEMENT_SIZE) { + return new Decimal64Column(descr); + } else if (descr.getElementSize() == Decimal128ColumnReader.ELEMENT_SIZE) { + return new Decimal128Column(descr); + } else if (descr.getElementSize() == Decimal256ColumnReader.ELEMENT_SIZE) { + return new Decimal256Column(descr); } } else if (jdbcType == JDBCType.REAL) { - return new Float32Column(nRows, descr); + return new Float32Column(descr); } else if (jdbcType == JDBCType.DOUBLE) { - return new Float64Column(nRows, descr); + return new Float64Column(descr); } else if (jdbcType == JDBCType.DATE) { - return new DateColumn(nRows, descr); + return new DateColumn(descr); } else if (jdbcType == JDBCType.OTHER) { if (descr.getNestedType().equals("UUID")) { - return new UUIDColumn(nRows, descr); + return new UUIDColumn(descr); } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { Map enumVals = parseEnumVals(descr.getNestedType()); - if (descr.getElementSize() == Enum8Column.ELEMENT_SIZE) { - return new Enum8Column(nRows, descr, enumVals); - } else if (descr.getElementSize() == Enum16Column.ELEMENT_SIZE) { - return new Enum16Column(nRows, descr, enumVals); + if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { + return new Enum8Column(descr, enumVals); + } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { + return new Enum16Column(descr, enumVals); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index eed4530d4a..8378dde862 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,19 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; -import java.time.LocalDate; +import java.util.List; -public class DateColumn extends UInt16Column { - public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); +public class DateColumn extends ClickhouseColumn { + public DateColumn(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - public DateColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new DateColumnReader(nRows, descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Integer offset = (Integer) super.getElementInternal(rowIdx, desired); - return MIN_DATE.plusDays(offset); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java new file mode 100644 index 0000000000..bc9310b0d7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -0,0 +1,19 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.LocalDate; + +public class DateColumnReader extends UInt16ColumnReader { + public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + + public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Integer offset = (Integer) super.getElementInternal(rowIdx, desired); + return MIN_DATE.plusDays(offset); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 70516acb46..cdc8c7dfc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,42 +1,28 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; -import java.time.Instant; -import java.time.OffsetDateTime; import java.time.ZoneId; +import java.util.List; public class DateTime64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - + private final Integer precision; private final ZoneId zoneId; - private final BigInteger invTickSize; - public DateTime64Column(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { - super(nRows, descr); + public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, ZoneId zoneId) { + super(descriptor); + this.precision = precision; this.zoneId = zoneId; - this.invTickSize = BigInteger.TEN.pow(precision); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - OffsetDateTime[] data = new OffsetDateTime[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - BigInteger bi = UInt64Column.unsignedBi(in.readLongLE()); - long seconds = bi.divide(invTickSize).longValueExact(); - long nanos = bi.remainder(invTickSize).longValueExact(); - OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); - data[i] = dt; - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new DateTime64ColumnReader(nRows, descriptor, precision, zoneId); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java new file mode 100644 index 0000000000..8214d9086b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigInteger; +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; + +public class DateTime64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + private final ZoneId zoneId; + private final BigInteger invTickSize; + + public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + OffsetDateTime[] data = new OffsetDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + BigInteger bi = UInt64ColumnReader.unsignedBi(in.readLongLE()); + long seconds = bi.divide(invTickSize).longValueExact(); + long nanos = bi.remainder(invTickSize).longValueExact(); + OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); + data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index b28c66f70a..70922b259c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,37 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.time.Instant; -import java.time.OffsetDateTime; import java.time.ZoneId; +import java.util.List; public class DateTimeColumn extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - private final ZoneId zoneId; - public DateTimeColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { - super(nRows, descr); + public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { + super(descriptor); this.zoneId = zoneId; } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - OffsetDateTime[] data = new OffsetDateTime[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); - OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); - data[i] = dt; - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new DateTimeColumnReader(nRows, descriptor, zoneId); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java new file mode 100644 index 0000000000..9b384bb903 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; + +public class DateTimeColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + private final ZoneId zoneId; + + public DateTimeColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + super(nRows, descr); + this.zoneId = zoneId; + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + OffsetDateTime[] data = new OffsetDateTime[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long unixSeconds = Integer.toUnsignedLong(in.readIntLE()); + OffsetDateTime dt = Instant.ofEpochSecond(unixSeconds).atZone(zoneId).toOffsetDateTime(); + data[i] = dt; + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 29776ae004..7d4b29df8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; -//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class Decimal128Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; - public static final int MAX_PRECISION = 38; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal128ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java new file mode 100644 index 0000000000..a5ab29014d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 +public class Decimal128ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 8efda94298..2c60ee025a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; -//Looks like support is experimental at the moment public class Decimal256Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 32; - public static final int MAX_PRECISION = 76; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal256Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal256ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java new file mode 100644 index 0000000000..e813a128c2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +//Looks like support is experimental at the moment +public class Decimal256ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal256ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 5201c6642b..08661ed7c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,38 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; public class Decimal32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - public static final int MAX_PRECISION = 9; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal32ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - int item = in.readIntLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java new file mode 100644 index 0000000000..9a9b0307cd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -0,0 +1,38 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + int item = in.readIntLE(); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 52516e330c..6c5d66038d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,38 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; +import io.vertx.sqlclient.Tuple; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; +import java.util.List; public class Decimal64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - public static final int MAX_PRECISION = 18; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Decimal64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Decimal64ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long item = in.readLongLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java new file mode 100644 index 0000000000..841fd543e2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -0,0 +1,38 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; + +public class Decimal64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + Numeric[] data = new Numeric[nRows]; + int scale = columnDescriptor.getScale(); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long item = in.readLongLE(); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 466498a7b2..e52519cbae 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,21 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; +import java.util.List; import java.util.Map; -public class Enum16Column extends UInt16Column { - public static final int ELEMENT_SIZE = 2; - private final Map enumVals; +public class Enum16Column extends ClickhouseColumn { + private final Map enumVals; - public Enum16Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { - super(nRows, descr); - this.enumVals = (Map) enumVals; + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + super(descriptor); + this.enumVals = enumVals; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Short key = (Short) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + public ClickhouseColumnReader reader(int nRows) { + return new Enum16ColumnReader(nRows, descriptor, enumVals); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java new file mode 100644 index 0000000000..041070b7db --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum16ColumnReader extends UInt16ColumnReader { + public static final int ELEMENT_SIZE = 2; + private final Map enumVals; + + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Short key = (Short) super.getElementInternal(rowIdx, desired); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 8d2d355457..a54673c121 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,21 +1,26 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; +import java.util.List; import java.util.Map; -public class Enum8Column extends UInt8Column { - public static final int ELEMENT_SIZE = 1; - private final Map enumVals; +public class Enum8Column extends ClickhouseColumn { + private final Map enumVals; - public Enum8Column(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { - super(nRows, descr); - this.enumVals = (Map) enumVals; + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + super(descriptor); + this.enumVals = enumVals; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + public ClickhouseColumnReader reader(int nRows) { + return new Enum8ColumnReader(nRows, descriptor, enumVals); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java new file mode 100644 index 0000000000..44693da31b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -0,0 +1,21 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.util.Map; + +public class Enum8ColumnReader extends UInt8ColumnReader { + public static final int ELEMENT_SIZE = 1; + private final Map enumVals; + + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + super(nRows, descr); + this.enumVals = (Map) enumVals; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Byte key = (Byte) super.getElementInternal(rowIdx, desired); + return enumVals.get(key); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 0998feb594..ea39af6474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -2,51 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.util.ArrayList; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - private final Charset charset; - - private List elements; - - protected FixedStringColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, columnDescriptor); - this.elements = new ArrayList<>(nRows); - this.charset = md.getStringCharset(); + private final ClickhouseNativeDatabaseMetadata md; + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); + this.md = md; } @Override - protected Object[] readItems(ClickhouseStreamDataSource in) { - int elementSize = columnDescriptor.getElementSize(); - while (elements.size() < nRows) { - if (in.readableBytes() < elementSize) { - return null; - } - byte[] stringBytes; - if (nullsMap == null || !nullsMap.get(elements.size())) { - stringBytes = new byte[elementSize]; - in.readBytes(stringBytes); - } else { - in.skipBytes(elementSize); - stringBytes = null; - } - elements.add(stringBytes); - } - Object[] ret = elements.toArray(); - elements = null; - return ret; + public ClickhouseColumnReader reader(int nRows) { + return new FixedStringColumnReader(nRows, descriptor, md); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { - return new String((byte[])tmp, charset); - } - return tmp; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new FixedStringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java new file mode 100644 index 0000000000..759eb253ee --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -0,0 +1,52 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +public class FixedStringColumnReader extends ClickhouseColumnReader { + private final Charset charset; + + private List elements; + + protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, columnDescriptor); + this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); + } + + @Override + protected Object[] readItems(ClickhouseStreamDataSource in) { + int elementSize = columnDescriptor.getElementSize(); + while (elements.size() < nRows) { + if (in.readableBytes() < elementSize) { + return null; + } + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[elementSize]; + in.readBytes(stringBytes); + } else { + in.skipBytes(elementSize); + stringBytes = null; + } + elements.add(stringBytes); + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java new file mode 100644 index 0000000000..79ed29b3b1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.List; + +public class FixedStringColumnWriter extends ClickhouseColumnWriter { + private final Charset charset; + + public FixedStringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.charset = charset; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + int elSize = columnDescriptor.getElementSize(); + if (bytes.length > elSize) { + throw new IllegalArgumentException("fixed string bytes are too long: got " + bytes.length + ", max " + elSize); + } + sink.writeBytes(bytes); + sink.writeZero(elSize - bytes.length); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(columnDescriptor.getElementSize()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index f8d0451ae7..9a82e2779f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,29 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class Float32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; + public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Float32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Float32ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - float[] data = new float[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readFloatLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Float32ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java new file mode 100644 index 0000000000..41afde279e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +public class Float32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + protected Float32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + float[] data = new float[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readFloatLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java new file mode 100644 index 0000000000..f14aae0d23 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class Float32ColumnWriter extends ClickhouseColumnWriter { + public Float32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + float b = ((Number)val).floatValue(); + sink.writeFloatLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeFloatLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 76d0b31343..f05e6c818b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,29 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class Float64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; + public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected Float64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Float64ColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - double[] data = new double[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readDoubleLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Float64ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java new file mode 100644 index 0000000000..320dd79ff5 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + + +public class Float64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + protected Float64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + double[] data = new double[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readDoubleLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java new file mode 100644 index 0000000000..9da9c85f8b --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -0,0 +1,25 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class Float64ColumnWriter extends ClickhouseColumnWriter { + public Float64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number number = (Number)val; + double b = number.doubleValue(); + sink.writeDoubleLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeDoubleLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index cfaafaa2b9..9325576d4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -2,127 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; - -import java.util.BitSet; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - public static final long SUPPORTED_SERIALIZATION_VERSION = 1; - private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; - private ClickhouseColumn indexColumn; - private Long serType; - private Long indexSize; - private Long nKeys; - Long keysSerializationVersion; - - private ClickhouseColumn keysColumn; - - public LowCardinalityColumn(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr); - this.indexDescr = descr.copyWithModifiers(false, false); + public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); this.md = md; } @Override - protected Object readStatePrefix(ClickhouseStreamDataSource in) { - if (keysSerializationVersion == null) { - if (in.readableBytes() >= 4) { - keysSerializationVersion = in.readLongLE(); - if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { - throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); - } - } - } - return keysSerializationVersion; - } - - @Override - protected BitSet readNullsMap(ClickhouseStreamDataSource in) { - return null; - } - - @Override - protected void readData(ClickhouseStreamDataSource in) { - if (keysSerializationVersion == null) { - return; - } - if (indexSize == null) { - if (in.readableBytes() < 8 + 8) { - return; - } - serType = in.readLongLE(); - indexSize = in.readLongLE(); - } - if (indexSize > Integer.MAX_VALUE) { - throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); - } - if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, indexSize.intValue(), md); - } - if (indexColumn.isPartial()) { - indexColumn.readColumn(in); - if (indexColumn.isPartial()) { - return; - } - } - if (nKeys == null) { - if (in.readableBytes() < 8) { - return; - } - nKeys = in.readLongLE(); - } - int keyType = (int)(serType & 0xf); - if (keysColumn == null) { - keysColumn = uintColumn(keyType); - } - keysColumn.readColumn(in); - } - - //called by Array column - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (isPartial()) { - readData(in); - } - return null; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return super.asObjectsArrayWithGetElement(desired); + public ClickhouseColumnReader reader(int nRows) { + return new LowCardinalityColumnReader(nRows, descriptor, md); } @Override - public boolean isPartial() { - return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); - } - - @Override - public Object getElement(int rowIdx, Class desired) { - int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); - if (columnDescriptor.isNullable() && key == 0) { - return null; - } - return indexColumn.getElementInternal(key, desired); - } - - private ClickhouseColumn uintColumn(int code) { - ClickhouseNativeColumnDescriptor tmp; - String name = columnDescriptor.name(); - //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances - if (code == 0) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); - } else if (code == 1) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); - } else if (code == 2) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); - } else if (code == 3) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); - } else { - throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); - } - return ClickhouseColumns.columnForSpec(tmp, nRows, md); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java new file mode 100644 index 0000000000..677bad2ab4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -0,0 +1,127 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.BitSet; + +public class LowCardinalityColumnReader extends ClickhouseColumnReader { + public static final long SUPPORTED_SERIALIZATION_VERSION = 1; + private final ClickhouseNativeColumnDescriptor indexDescr; + private final ClickhouseNativeDatabaseMetadata md; + private ClickhouseColumnReader indexColumn; + private Long serType; + private Long indexSize; + private Long nKeys; + Long keysSerializationVersion; + + private ClickhouseColumnReader keysColumn; + + public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descr); + this.indexDescr = descr.copyWithModifiers(false, false); + this.md = md; + } + + @Override + protected Object readStatePrefix(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + if (in.readableBytes() >= 4) { + keysSerializationVersion = in.readLongLE(); + if (keysSerializationVersion != SUPPORTED_SERIALIZATION_VERSION) { + throw new IllegalStateException("unsupported keysSerializationVersion: " + keysSerializationVersion); + } + } + } + return keysSerializationVersion; + } + + @Override + protected BitSet readNullsMap(ClickhouseStreamDataSource in) { + return null; + } + + @Override + protected void readData(ClickhouseStreamDataSource in) { + if (keysSerializationVersion == null) { + return; + } + if (indexSize == null) { + if (in.readableBytes() < 8 + 8) { + return; + } + serType = in.readLongLE(); + indexSize = in.readLongLE(); + } + if (indexSize > Integer.MAX_VALUE) { + throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); + } + if (indexColumn == null) { + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md).reader(indexSize.intValue()); + } + if (indexColumn.isPartial()) { + indexColumn.readColumn(in); + if (indexColumn.isPartial()) { + return; + } + } + if (nKeys == null) { + if (in.readableBytes() < 8) { + return; + } + nKeys = in.readLongLE(); + } + int keyType = (int)(serType & 0xf); + if (keysColumn == null) { + keysColumn = uintColumn(keyType); + } + keysColumn.readColumn(in); + } + + //called by Array column + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (isPartial()) { + readData(in); + } + return null; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return super.asObjectsArrayWithGetElement(desired); + } + + @Override + public boolean isPartial() { + return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); + } + + @Override + public Object getElement(int rowIdx, Class desired) { + int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); + if (columnDescriptor.isNullable() && key == 0) { + return null; + } + return indexColumn.getElementInternal(key, desired); + } + + private ClickhouseColumnReader uintColumn(int code) { + ClickhouseNativeColumnDescriptor tmp; + String name = columnDescriptor.name(); + //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances + if (code == 0) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + } else if (code == 1) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + } else if (code == 2) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + } else if (code == 3) { + tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + } else { + throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); + } + return ClickhouseColumns.columnForSpec(tmp, md).reader(nRows); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a860c5917d..b04ad9b57b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -2,70 +2,24 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.nio.charset.Charset; -import java.util.ArrayList; import java.util.List; public class StringColumn extends ClickhouseColumn { - private Integer curStrLength; - private List elements; - private final Charset charset; - - protected StringColumn(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descriptor); - this.elements = new ArrayList<>(nRows); - this.charset = md.getStringCharset(); - } - - @Override - protected Object[] readItems(ClickhouseStreamDataSource in) { - while (elements.size() < nRows) { - if (curStrLength == null) { - curStrLength = in.readULeb128(); - if (curStrLength == null) { - return null; - } - } - if (in.readableBytes() < curStrLength) { - return null; - } - byte[] stringBytes; - if (nullsMap == null || !nullsMap.get(elements.size())) { - stringBytes = new byte[curStrLength]; - in.readBytes(stringBytes); - } else { - stringBytes = null; - in.skipBytes(curStrLength); - } - elements.add(stringBytes); - curStrLength = null; - } - Object[] ret = elements.toArray(); - elements = null; - return ret; - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { - return new String((byte[])tmp, charset); - } - return tmp; + private final ClickhouseNativeDatabaseMetadata md; + public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(descriptor); + this.md = md; } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); - sink.writeULeb128(bytes.length); - sink.writeBytes(bytes); + public ClickhouseColumnReader reader(int nRows) { + return new StringColumnReader(nRows, descriptor, md); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeULeb128(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new StringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java new file mode 100644 index 0000000000..02b503ceb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -0,0 +1,64 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +public class StringColumnReader extends ClickhouseColumnReader { + private Integer curStrLength; + private List elements; + private final Charset charset; + + protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, descriptor); + this.elements = new ArrayList<>(nRows); + this.charset = md.getStringCharset(); + } + + @Override + protected Object[] readItems(ClickhouseStreamDataSource in) { + while (elements.size() < nRows) { + if (curStrLength == null) { + curStrLength = in.readULeb128(); + if (curStrLength == null) { + return null; + } + } + if (in.readableBytes() < curStrLength) { + return null; + } + byte[] stringBytes; + if (nullsMap == null || !nullsMap.get(elements.size())) { + stringBytes = new byte[curStrLength]; + in.readBytes(stringBytes); + } else { + stringBytes = null; + in.skipBytes(curStrLength); + } + elements.add(stringBytes); + curStrLength = null; + } + Object[] ret = elements.toArray(); + elements = null; + return ret; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Object tmp = getObjectsArrayElement(rowIdx); + if (desired == String.class && tmp != null) { + return new String((byte[])tmp, charset); + } + return tmp; + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new StringColumnWriter(data, columnDescriptor, charset, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java new file mode 100644 index 0000000000..bfe2493947 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -0,0 +1,28 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.Charset; +import java.util.List; + +public class StringColumnWriter extends ClickhouseColumnWriter { + private final Charset charset; + public StringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.charset = charset; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte[] bytes = val.getClass() == byte[].class ? (byte[])val : ((String)val).getBytes(charset); + sink.writeULeb128(bytes.length); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeULeb128(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java index 6b575eb78d..cece9b61ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java @@ -1,39 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; +import java.util.List; -//experimental support at the moment public class UInt128Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; - - protected UInt128Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + public UInt128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BigInteger[] data = new BigInteger[nRows]; - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnReader reader(int nRows) { + return new UInt128ColumnReader(nRows, descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - return ((BigInteger[]) this.itemsArray)[rowIdx]; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java new file mode 100644 index 0000000000..40845f1f5c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java @@ -0,0 +1,39 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; + +import java.math.BigInteger; + +//experimental support at the moment +public class UInt128ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected UInt128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BigInteger[] data = new BigInteger[nRows]; + byte[] readBuffer = new byte[ELEMENT_SIZE]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + in.readBytes(readBuffer); + data[i] = new BigInteger(Utils.reverse(readBuffer)); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return ((BigInteger[]) this.itemsArray)[rowIdx]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index e065f2cc31..322fbf24f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,42 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -public class UInt16Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 2; - - public UInt16Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } +import java.util.List; - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - short[] data = new short[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readShortLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; +public class UInt16Column extends ClickhouseColumn { + public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - short element = ((short[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Short.toUnsignedInt(element); - } - return element; + public ClickhouseColumnReader reader(int nRows) { + return new UInt16ColumnReader(nRows, descriptor); } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt16ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java new file mode 100644 index 0000000000..40326ebf05 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -0,0 +1,42 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +public class UInt16ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 2; + + public UInt16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + short[] data = new short[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readShortLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + short element = ((short[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return Short.toUnsignedInt(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java new file mode 100644 index 0000000000..016fed04f8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt16ColumnWriter extends ClickhouseColumnWriter { + public UInt16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + short b = ((Number)val).shortValue(); + sink.writeShortLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeShortLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 6c00e5ea79..f1a4c37359 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,55 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -public class UInt32Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 4; - - public UInt32Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - int[] data = new int[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readIntLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } +import java.util.List; - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - int element = ((int[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Integer.toUnsignedLong(element); - } - return element; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); +public class UInt32Column extends ClickhouseColumn { + public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number number = (Number)val; - int b = number == null ? 0 : number.intValue(); - sink.writeIntLE(b); + public ClickhouseColumnReader reader(int nRows) { + return new UInt32ColumnReader(nRows, descriptor); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeIntLE(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt32ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java new file mode 100644 index 0000000000..2c54ca6e8d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt32ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 4; + + public UInt32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int[] data = new int[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readIntLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + int element = ((int[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return Integer.toUnsignedLong(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt32ColumnWriter(data, columnDescriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java new file mode 100644 index 0000000000..15fdee6b67 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt32ColumnWriter extends ClickhouseColumnWriter { + public UInt32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + int b = ((Number)val).intValue(); + sink.writeIntLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index ad2492e985..af256bacda 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,57 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.math.BigInteger; +import java.util.List; public class UInt64Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 8; - - public UInt64Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - long[] data = new long[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readLongLE(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected Object getElementInternal(int rowIdx, Class desired) { - long element = ((long[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return unsignedBi(element); - } - return element; + public ClickhouseColumnReader reader(int nRows) { + return new UInt64ColumnReader(nRows, descriptor); } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); - } - - static BigInteger unsignedBi(long l) { - return new BigInteger(1, new byte[] { - (byte) (l >>> 56 & 0xFF), - (byte) (l >>> 48 & 0xFF), - (byte) (l >>> 40 & 0xFF), - (byte) (l >>> 32 & 0xFF), - (byte) (l >>> 24 & 0xFF), - (byte) (l >>> 16 & 0xFF), - (byte) (l >>> 8 & 0xFF), - (byte) (l & 0xFF) - }); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt64ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java new file mode 100644 index 0000000000..4d1e641b03 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -0,0 +1,57 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.math.BigInteger; + +public class UInt64ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 8; + + public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + long[] data = new long[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readLongLE(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + long element = ((long[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return unsignedBi(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + static BigInteger unsignedBi(long l) { + return new BigInteger(1, new byte[] { + (byte) (l >>> 56 & 0xFF), + (byte) (l >>> 48 & 0xFF), + (byte) (l >>> 40 & 0xFF), + (byte) (l >>> 32 & 0xFF), + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java new file mode 100644 index 0000000000..7445baaa8c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt64ColumnWriter extends ClickhouseColumnWriter { + public UInt64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + long b = ((Number)val).longValue(); + sink.writeLongLE(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeLongLE(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 5c6a23e07b..f4a35a1133 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,56 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; +import java.util.List; public class UInt8Column extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 1; - - public UInt8Column(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - byte[] data = new byte[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data[i] = in.readByte(); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } - - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - byte element = ((byte[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return (short)Byte.toUnsignedInt(element); - } - return element; - } - - @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); } @Override - protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number number = (Number)val; - byte b = number == null ? 0 : number.byteValue(); - sink.writeByte(b); + public ClickhouseColumnReader reader(int nRows) { + return new UInt8ColumnReader(nRows, descriptor); } @Override - protected void serializeDataNull(ClickhouseStreamDataSink sink) { - sink.writeByte(0); + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt8ColumnWriter(data, descriptor, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java new file mode 100644 index 0000000000..063e26efb0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -0,0 +1,50 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt8ColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 1; + + public UInt8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + byte[] data = new byte[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readByte(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + byte element = ((byte[])this.itemsArray)[rowIdx]; + if (columnDescriptor.isUnsigned()) { + return (short)Byte.toUnsignedInt(element); + } + return element; + } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java new file mode 100644 index 0000000000..74f50f546c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class UInt8ColumnWriter extends ClickhouseColumnWriter { + public UInt8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + byte b = ((Number)val).byteValue(); + sink.writeByte(b); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeByte(0); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index d812b91702..ef9fe811fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,32 +1,22 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.Tuple; -import java.util.UUID; +import java.util.List; public class UUIDColumn extends ClickhouseColumn { - public static final int ELEMENT_SIZE = 16; + public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } - protected UUIDColumn(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); + @Override + public ClickhouseColumnReader reader(int nRows) { + return new UUIDColumnReader(nRows, descriptor); } @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - UUID[] data = new UUID[nRows]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - long mostSigBits = in.readLongLE(); - long leastSigBits = in.readLongLE(); - data[i] = new UUID(mostSigBits, leastSigBits); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalArgumentException("not implemented"); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java new file mode 100644 index 0000000000..ddb8c80cb7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; + +import java.util.UUID; + +public class UUIDColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + UUID[] data = new UUID[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + long mostSigBits = in.readLongLE(); + long leastSigBits = in.readLongLE(); + data[i] = new UUID(mostSigBits, leastSigBits); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index d4e4ea11bf..da79597bfd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -12,11 +12,11 @@ @RunWith(Parameterized.class) -public class ClickhouseColumnsTest { +public class ClickhouseColumnsTestReader { private final String enumDefinition; private final java.util.function.Function converter; - public ClickhouseColumnsTest(String enumType, String enumDefinition, Function converter) { + public ClickhouseColumnsTestReader(String enumType, String enumDefinition, Function converter) { this.enumDefinition = enumDefinition; this.converter = converter; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index b9bcfd63b0..533b217b70 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -11,8 +11,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import java.util.function.BiFunction; - @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @@ -39,7 +37,7 @@ protected String statement(String... parts) { @Ignore @Test public void testTime(TestContext ctx) { - //time is not supported + //no time support } @Test @@ -53,6 +51,7 @@ public void testDouble(TestContext ctx) { testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); } + //no time support, copied and modified test from parent @Test public void testNullValues(TestContext ctx) { connector.connect(ctx.asyncAssertSuccess(conn -> { @@ -101,35 +100,12 @@ public void testNullValues(TestContext ctx) { } @Override - protected void testEncodeGeneric(TestContext ctx, - String columnName, - Class clazz, - BiFunction getter, - T expected) { - connector.connect(ctx.asyncAssertSuccess(conn -> { - conn - .preparedQuery(statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = 2")) - .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { - Sleep.sleepOrThrow(); - conn - .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") - .execute(ctx.asyncAssertSuccess(result -> { - ctx.assertEquals(1, result.size()); - Row row = result.iterator().next(); - ctx.assertEquals(1, row.size()); - ctx.assertEquals(expected, row.getValue(0)); - ctx.assertEquals(expected, row.getValue(columnName)); - if (getter != null) { - ctx.assertEquals(expected, getter.apply(row, columnName)); - } -// ctx.assertEquals(expected, row.get(clazz, 0)); -// ColumnChecker.checkColumn(0, columnName) -// .returns(Tuple::getValue, Row::getValue, expected) -// .returns(byIndexGetter, byNameGetter, expected) -// .forRow(row); - conn.close(); - })); - })); - })); + protected void maybeSleep() { + Sleep.sleepOrThrow(); + } + + @Override + protected String encodeGenericUpdateStatement(String columnName, int id) { + return statement("ALTER TABLE basicdatatype UPDATE " + columnName + " = ", " WHERE id = " + id); } } diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java index 13b7700868..b3fa2249e7 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java @@ -131,6 +131,13 @@ public void testNullValues(TestContext ctx) { })); } + protected void maybeSleep() { + } + + protected String encodeGenericUpdateStatement(String columnName, int id) { + return statement("UPDATE basicdatatype SET " + columnName + " = ", " WHERE id = " + id); + } + protected void testEncodeGeneric(TestContext ctx, String columnName, Class clazz, @@ -138,8 +145,9 @@ protected void testEncodeGeneric(TestContext ctx, T expected) { connector.connect(ctx.asyncAssertSuccess(conn -> { conn - .preparedQuery(statement("UPDATE basicdatatype SET " + columnName + " = ", " WHERE id = 2")) + .preparedQuery(encodeGenericUpdateStatement(columnName, 2)) .execute(Tuple.tuple().addValue(expected), ctx.asyncAssertSuccess(updateResult -> { + maybeSleep(); conn .preparedQuery("SELECT " + columnName + " FROM basicdatatype WHERE id = 2") .execute(ctx.asyncAssertSuccess(result -> { From e16e1ab07a9400cf7e806e705eb4dde95452d636 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 22 Mar 2021 21:27:16 +0300 Subject: [PATCH 113/176] finished tck test set Signed-off-by: vladimir --- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../impl/codec/ClickhouseNativeEncoder.java | 29 ++-- .../ClickhouseNativePreparedStatement.java | 8 +- .../codec/CloseStatementCommandCodec.java | 23 ++++ .../impl/codec/ExtendedQueryCommandCodec.java | 5 +- .../impl/codec/PrepareStatementCodec.java | 23 +++- .../impl/codec/QueryParsers.java | 76 +++++++---- .../impl/codec/SimpleQueryCommandCodec.java | 8 +- .../codec/columns/ClickhouseColumnWriter.java | 19 ++- .../codec/columns/StringColumnWriter.java | 19 +++ ...ickhouseNativePreparedQueryCachedTest.java | 125 ++++++++++++++++++ ...ickhouseNativePreparedQueryPooledTest.java | 14 ++ .../ClickhouseNativePreparedQueryTest.java | 13 ++ ...ClickhouseNativePreparedQueryTestBase.java | 116 ++++++++++++++++ ...ClickhouseNativeSimpleQueryPooledTest.java | 46 +++++++ .../tck/ClickhouseNativeSimpleQueryTest.java | 46 +++++++ ...lickhouseNativeTextDataTypeDecodeTest.java | 32 +++++ .../tck/ClickhouseNativeTracingTest.java | 43 ++++++ .../tck/ClickhouseNativeTransactionTest.java | 33 +++++ .../src/test/resources/init.sql | 34 +++++ .../sqlclient/tck/SimpleQueryTestBase.java | 2 +- 21 files changed, 657 insertions(+), 59 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index e0e483b487..b9a98773b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -40,6 +40,6 @@ public static Future connect(ContextInternal ctx, Cl @Override public Future begin() { - throw new UnsupportedOperationException(); + return Future.failedFuture(new UnsupportedOperationException()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 5a1228bd3c..d37e74af9b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -9,6 +9,7 @@ import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; +import java.util.Map; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); @@ -38,11 +39,17 @@ ChannelHandlerContext chctx() { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof CommandBase) { - CommandBase cmd = (CommandBase) msg; - write(cmd); - } else { - super.write(ctx, msg, promise); + CommandBase cmd = null; + try { + if (msg instanceof CommandBase) { + cmd = (CommandBase) msg; + write(cmd); + } else { + super.write(ctx, msg, promise); + } + } catch (Throwable t) { + deliverError(cmd, t); + throw t; } } @@ -67,17 +74,17 @@ void write(CommandBase cmd) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { PrepareStatementCommand ps = (PrepareStatementCommand) cmd; - QueryParsers.QueryType queryType = QueryParsers.queryType(ps.sql()); + Map.Entry queryType = QueryParsers.findKeyWord(ps.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); return new PrepareStatementCodec(ps, queryType); } else if (cmd instanceof ExtendedQueryCommand) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; - QueryParsers.QueryType queryType; + Map.Entry queryType; if (ecmd.preparedStatement() != null) { queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); } else { - queryType = QueryParsers.queryType(ecmd.sql()); + queryType = QueryParsers.findKeyWord(ecmd.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); } - if (queryType != null && queryType != QueryParsers.QueryType.INSERT && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + if (queryType != null && !"insert".equalsIgnoreCase(queryType.getKey()) && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); deliverError(cmd, ex); throw ex; @@ -85,13 +92,15 @@ void write(CommandBase cmd) { return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); + } else if (cmd instanceof CloseStatementCommand) { + return new CloseStatementCommandCodec((CloseStatementCommand) cmd, conn); } RuntimeException ex = new UnsupportedOperationException(cmd.getClass().getName()); deliverError(cmd, ex); throw ex; } - private void deliverError(CommandBase cmd, RuntimeException ex) { + private void deliverError(CommandBase cmd, Throwable ex) { if (cmd instanceof QueryCommandBase) { QueryCommandBase ecmd = (QueryCommandBase)cmd; ecmd.resultHandler().handleResult(0, 0, null, null, ex); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 5032c9b101..b73dfa241a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -6,15 +6,17 @@ import io.vertx.sqlclient.impl.RowDesc; import io.vertx.sqlclient.impl.TupleInternal; +import java.util.Map; + public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; - private final QueryParsers.QueryType queryType; + private final Map.Entry queryType; private final boolean sentQuery; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - QueryParsers.QueryType queryType, boolean sentQuery) { + Map.Entry queryType, boolean sentQuery) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; @@ -42,7 +44,7 @@ public String prepare(TupleInternal values) { return null; } - public QueryParsers.QueryType queryType() { + public Map.Entry queryType() { return queryType; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java new file mode 100644 index 0000000000..613b015ea2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.sqlclient.impl.command.CloseStatementCommand; +import io.vertx.sqlclient.impl.command.CommandResponse; + +public class CloseStatementCommandCodec extends ClickhouseNativeCommandCodec { + public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSocketConnection conn) { + super(cmd); + } + + void encode(ClickhouseNativeEncoder encoder) { + super.encode(encoder); + completionHandler.handle(CommandResponse.success(null)); + } + + + @Override + void decode(ChannelHandlerContext ctx, ByteBuf in) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index ac4d81e2d4..ec173f9ea0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -23,17 +23,16 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(QueryParsers.QueryType queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + public ExtendedQueryCommandCodec(Map.Entry queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - if (queryType != QueryParsers.QueryType.INSERT || !ecmd.isBatch()) { + if ((queryType != null && !"insert".equalsIgnoreCase(queryType.getKey())) || !ecmd.isBatch()) { return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } - //TODO smagellan: handle insert at query prepare stage (PrepareStatementCodec) return ecmd.sql(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 0162ddf313..ccd1e2e153 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -17,11 +17,11 @@ public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); - private final QueryParsers.QueryType queryType; + private final Map.Entry queryType; private PacketReader packetReader; - protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryParsers.QueryType queryType) { + protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { super(cmd); this.queryType = queryType; } @@ -31,8 +31,10 @@ void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); LOG.info("handle ready for query"); String sql = cmd.sql(); - if (queryType == QueryParsers.QueryType.INSERT) { - int valuesIndex = sql.toLowerCase().lastIndexOf("values"); + boolean isInsert = queryType != null && "insert".equalsIgnoreCase(queryType.getKey()); + int valuesIndex = 0; + boolean realInsertBatch = isInsert && (valuesIndex = valuesPos(sql, queryType.getValue())) != -1; + if (realInsertBatch) { String truncatedSql = sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); try { @@ -50,6 +52,19 @@ void encode(ClickhouseNativeEncoder encoder) { } } + //TODO smagellan: move to parsers, introduce "InsertQueryInfo" + private static int valuesPos(String sql, int fromPos) { + String sqlLoCase = sql.toLowerCase(); + if (sqlLoCase.endsWith("values")) { + return sql.length() - "values".length(); + } + Map.Entry pos = QueryParsers.findKeyWord(sql, fromPos, Collections.singleton("$")); + if (pos == null) { + return -1; + } + return sqlLoCase.lastIndexOf("values", pos.getValue()); + } + @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 5034ea4bb4..8e63d292b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,16 +3,18 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class QueryParsers { - private static final String[] selectKeywords = new String[]{"SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"}; private static final String INSERT_KEYWORD = "INSERT"; - private static final int INSERT_KEYWORD_LENGTH = INSERT_KEYWORD.length(); - private static final String UPDATE_KEYWORD = "UPDATE"; - private static final int UPDATE_KEYWORD_LENGTH = UPDATE_KEYWORD.length(); + + public static final Set SELECT_KEYWORDS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN"))); + public static final Set SELECT_AND_MUTATE_KEYWORDS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("SELECT", "WITH", "SHOW", "DESC", "EXISTS", "EXPLAIN", + INSERT_KEYWORD, UPDATE_KEYWORD))); + //TODO: maybe switch to antlr4 public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { @@ -58,40 +60,58 @@ public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple pa prevIdx = newIdx; } if (usedArgs.size() != paramsList.size()) { - throw new IllegalArgumentException("param count mismatch: query consumed " + + usedArgs.size() + ", but provided count is " + paramsList.size()); + String msg = String.format("The number of parameters to execute should be consistent with the expected number of parameters = [%d] but the actual number is [%d].", + usedArgs.size(), paramsList.size()); + throw new IllegalArgumentException(msg); } bldr.append(parametrizedSql, prevIdx, parametrizedSql.length()); return bldr.toString(); } + public static boolean isSelect(String sql) { + Map.Entry tmp = findKeyWord(sql, 0, SELECT_KEYWORDS); + return tmp != null; + } - public static QueryType queryType(String sql) { - for (int i = 0; i < sql.length(); i++) { - String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); - if ("--".equals(nextTwo)) { - i = Math.max(i, sql.indexOf("\n", i)); - } else if ("/*".equals(nextTwo)) { - i = Math.max(i, sql.indexOf("*/", i)); - } else if (Character.isLetter(sql.charAt(i))) { + public static Map.Entry findKeyWord(String sql, Collection keywords) { + return findKeyWord(sql, 0, keywords); + } + + public static Map.Entry findKeyWord(String sql, int startPos, Collection keywords) { + Character requiredChar = null; + //special case to find placeholder + if (keywords.size() == 1) { + String str = keywords.iterator().next(); + if (str.length() == 1) { + requiredChar = str.charAt(0); + } + } + for (int i = startPos; i < sql.length(); i++) { + String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); + if ("--".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("\n", i)); + } else if ("/*".equals(nextTwo)) { + i = Math.max(i, sql.indexOf("*/", i)); + } else if (requiredChar != null && requiredChar == sql.charAt(i)) { + return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); + } else if (sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { + while (i < sql.length() && !(sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\'))) { + ++i; + } + } else { + if (Character.isLetter(sql.charAt(i))) { String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); - for (String keyword : selectKeywords){ + for (String keyword : keywords){ if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { - return QueryType.SELECT; + return new AbstractMap.SimpleEntry<>(keyword, i); } } - if (trimmed.regionMatches(true, 0, INSERT_KEYWORD, 0, INSERT_KEYWORD_LENGTH)) { - return QueryType.INSERT; - } - if (trimmed.regionMatches(true, 0, UPDATE_KEYWORD, 0, UPDATE_KEYWORD_LENGTH)) { - return QueryType.UPDATE; + if (requiredChar == null) { + return null; } - return null; } } - return null; - } - - enum QueryType { - SELECT, INSERT, UPDATE; + } + return null; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 2410dd54b0..c3e30d23d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -17,7 +17,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; - protected final QueryParsers.QueryType queryType; + protected final Map.Entry queryType; protected final int batchSize; private RowResultDecoder rowResultDecoder; @@ -28,7 +28,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryParsers.QueryType queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(Map.Entry queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); this.queryType = queryType; this.batchSize = batchSize; @@ -123,14 +123,14 @@ private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Throwable t) { Throwable failure = null; if (rowResultDecoder != null) { - LOG.info("notifying operation update; has more result = " + hasMoreResults + "; query: "); failure = rowResultDecoder.complete(); T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); + LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { - if (queryType == QueryParsers.QueryType.INSERT) { + if (queryType != null && "insert".equalsIgnoreCase(queryType.getKey())) { rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index 60f5d8c18a..e6408e0fe5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -33,15 +33,24 @@ protected void serializeData(ClickhouseStreamDataSink sink, int fromRow, int toR serializeDataInternal(sink, fromRow, toRow); } - protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { - int nRows = toRow - fromRow; - int requiredSize = 0; + protected int nullsMapSize(int nRows) { if (columnDescriptor.isNullable() && !columnDescriptor.isLowCardinality()) { - requiredSize += nRows; + return nRows; } + return 0; + } + + protected int elementsSize(int fromRow, int toRow) { if (columnDescriptor.getElementSize() > 0) { - requiredSize += nRows * columnDescriptor.getElementSize(); + return (toRow - fromRow) * columnDescriptor.getElementSize(); } + return 0; + } + + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + int requiredSize = 0; + requiredSize += nullsMapSize(toRow - fromRow); + requiredSize += elementsSize(fromRow, toRow); sink.ensureWritable(requiredSize); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index bfe2493947..19f9442d01 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -25,4 +25,23 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { protected void serializeDataNull(ClickhouseStreamDataSink sink) { sink.writeULeb128(0); } + + protected int elementsSize(int fromRow, int toRow) { + //max value, usually less + int sz = (toRow - fromRow) * 4; + for (int i = fromRow; i < toRow; ++i) { + Object el = data.get(i).getValue(columnIndex); + if (el != null) { + if (el.getClass() == byte[].class) { + sz += ((byte[])el).length; + } else { + if (el.getClass() == String.class) { + //min value, more for non-ascii chars + sz += ((String)el).length(); + } + } + } + } + return sz; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java new file mode 100644 index 0000000000..ee5c69fd8c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -0,0 +1,125 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + @Test + @Ignore + public void testQueryCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryStreamCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryStreamCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatch(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatch(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatchFromAnotherThread(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatchFromAnotherThread(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseResume(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseResume(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQuery(TestContext ctx) { + // TODO streaming support + super.testStreamQuery(ctx); + } + + @Override + @Test + @Ignore + public void testPreparedQueryParamCoercionTypeError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPrepareError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithNullParams(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdate(TestContext ctx) { + //Clickhouse does not return real affected row count + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithParams(TestContext ctx) { + //Clickhouse does not return real affected row count + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java new file mode 100644 index 0000000000..efa4d51357 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -0,0 +1,14 @@ +package io.vertx.clickhousenativeclient.tck; + + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryPooledTest extends ClickhouseNativePreparedQueryTestBase { + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.POOLED.connect(vertx, options); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java new file mode 100644 index 0000000000..81d98fbd51 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -0,0 +1,13 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativePreparedQueryTest extends ClickhouseNativePreparedQueryTestBase { + @Override + protected void initConnector() { + options = rule.options(); + connector = ClientConfig.CONNECT.connect(vertx, options); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java new file mode 100644 index 0000000000..63852d20a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -0,0 +1,116 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.sqlclient.tck.PreparedQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; + +public abstract class ClickhouseNativePreparedQueryTestBase extends PreparedQueryTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Override + @Test + @Ignore + public void testQueryCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testQueryStreamCloseCursor(TestContext ctx) { + //TODO cursor support + super.testQueryStreamCloseCursor(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatch(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatch(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseInBatchFromAnotherThread(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseInBatchFromAnotherThread(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQueryPauseResume(TestContext ctx) { + // TODO streaming support + super.testStreamQueryPauseResume(ctx); + } + + @Override + @Test + @Ignore + public void testStreamQuery(TestContext ctx) { + // TODO streaming support + super.testStreamQuery(ctx); + } + + @Override + @Test + @Ignore + public void testPreparedQueryParamCoercionTypeError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPrepareError(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithNullParams(TestContext ctx) { + //no real prepared selects support + } + + @Override + @Ignore + @Test + public void testPreparedUpdate(TestContext ctx) { + //Clickhouse does not return real affected row count + } + + @Override + @Ignore + @Test + public void testPreparedUpdateWithParams(TestContext ctx) { + //Clickhouse does not return real affected row count + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java new file mode 100644 index 0000000000..c289e53288 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -0,0 +1,46 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.SimpleQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeSimpleQueryPooledTest extends SimpleQueryTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.POOLED.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testDelete(TestContext ctx) { + //no way to return count of altered rows + } + + @Ignore + @Test + public void testInsert(TestContext ctx) { + //no way to return count of inserted rows (can be emulated) + } + + @Ignore + @Test + public void testUpdate(TestContext ctx) { + //no way to return count of altered rows + } + + @Override + protected void cleanTestTable(TestContext ctx) { + super.cleanTestTable(ctx); + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java new file mode 100644 index 0000000000..3bc3e8cf21 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -0,0 +1,46 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.SimpleQueryTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeSimpleQueryTest extends SimpleQueryTestBase { + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testDelete(TestContext ctx) { + //no way to return count of altered rows + } + + @Ignore + @Test + public void testInsert(TestContext ctx) { + //no way to return count of inserted rows (can be emulated) + } + + @Ignore + @Test + public void testUpdate(TestContext ctx) { + //no way to return count of altered rows + } + + @Override + protected void cleanTestTable(TestContext ctx) { + super.cleanTestTable(ctx); + Sleep.sleepOrThrow(); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java new file mode 100644 index 0000000000..be93099659 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -0,0 +1,32 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.TextDataTypeDecodeTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + @Ignore + @Test + public void testTime(TestContext ctx) { + //no time support + } + + @Test + public void testBoolean(TestContext ctx) { + testDecodeGeneric(ctx, "test_boolean", Byte.class, (byte)1); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java new file mode 100644 index 0000000000..729ee568da --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -0,0 +1,43 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.tck.TracingTestBase; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTracingTest extends TracingTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected Pool createPool(Vertx vertx) { + return ClickhouseNativePool.pool(vertx, rule.options(), new PoolOptions()); + } + + @Override + protected String statement(String... parts) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + if (i > 0) { + sb.append("$").append((i)); + } + sb.append(parts[i]); + } + return sb.toString(); + } + + @Ignore + @Test + public void testTraceBatchQuery(TestContext ctx) { + //no batch support for SELECTs + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java new file mode 100644 index 0000000000..2e7686d2a7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -0,0 +1,33 @@ +package io.vertx.clickhousenativeclient.tck; + +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.tck.DataTypeTestBase; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class ClickhouseNativeTransactionTest extends DataTypeTestBase { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + @Override + protected void initConnector() { + connector = ClientConfig.CONNECT.connect(vertx, rule.options()); + } + + + @Test + public void testTransactionsAreNotSupported(TestContext ctx) { + //transactions are not supported by DB at the moment + connector.connect(ctx.asyncAssertSuccess(res1 -> { + res1.begin(ctx.asyncAssertFailure( + err -> { + ctx.assertEquals(UnsupportedOperationException.class, err.getClass()); + } + )); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 752ab455f9..2c643ea1b8 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -98,3 +98,37 @@ CREATE TABLE vertx_cl_test_table `value` UInt32 ) ENGINE = GenerateRandom(1, 5, 3); + +-- Fortune table +DROP TABLE IF EXISTS Fortune; +CREATE TABLE Fortune +( + id Int32, + message String +) engine = MergeTree() + ORDER BY (id); + +INSERT INTO Fortune (id, message) +VALUES (1, 'fortune: No such file or directory'); +INSERT INTO Fortune (id, message) +VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.'); +INSERT INTO Fortune (id, message) +VALUES (3, 'After enough decimal places, nobody gives a damn.'); +INSERT INTO Fortune (id, message) +VALUES (4, 'A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1'); +INSERT INTO Fortune (id, message) +VALUES (5, 'A computer program does what you tell it to do, not what you want it to do.'); +INSERT INTO Fortune (id, message) +VALUES (6, 'Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen'); +INSERT INTO Fortune (id, message) +VALUES (7, 'Any program that runs right is obsolete.'); +INSERT INTO Fortune (id, message) +VALUES (8, 'A list is only as strong as its weakest link. — Donald Knuth'); +INSERT INTO Fortune (id, message) +VALUES (9, 'Feature: A bug with seniority.'); +INSERT INTO Fortune (id, message) +VALUES (10, 'Computers make very fast, very accurate mistakes.'); +INSERT INTO Fortune (id, message) +VALUES (11, ''); +INSERT INTO Fortune (id, message) +VALUES (12, 'フレームワークのベンチマーク'); diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java index 0171f46caa..94c788db31 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/SimpleQueryTestBase.java @@ -72,7 +72,7 @@ public void tearDown(TestContext ctx) { public void testQuery(TestContext ctx) { connect(ctx.asyncAssertSuccess(conn -> { conn - .query("SELECT id, message from immutable") + .query("SELECT id, message FROM immutable ORDER BY id") .execute(ctx.asyncAssertSuccess(result -> { //TODO we need to figure how to handle PgResult#rowCount() method in common API, // MySQL returns affected rows as 0 for SELECT query but Postgres returns queried amount From 672b998a3a8ae72522fa5469d4e90252ca6514b2 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 28 Mar 2021 12:23:22 +0300 Subject: [PATCH 114/176] added LowCardinality encoder Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 7 +- .../clickhousenative/impl/BaseBlock.java | 16 +- .../ClickhouseNativeConnectionFactory.java | 7 + .../ClickhouseNativeDatabaseMetadata.java | 22 +- ...eRow.java => ClickhouseNativeRowImpl.java} | 11 +- .../ClickhouseNativeSocketConnection.java | 52 ++- .../impl/ColumnOrientedBlock.java | 15 +- .../ClickhouseNativePreparedStatement.java | 9 +- .../impl/codec/CloseCursorCommandCodec.java | 2 +- .../codec/CloseStatementCommandCodec.java | 4 + .../impl/codec/DatabaseMetadataReader.java | 9 +- .../impl/codec/ExtendedQueryCommandCodec.java | 8 +- .../codec/Lz4ClickhouseStreamDataSource.java | 82 ++-- .../impl/codec/PacketReader.java | 29 +- .../impl/codec/PrepareStatementCodec.java | 21 +- .../impl/codec/QueryParsers.java | 86 ++++- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../impl/codec/RowResultDecoder.java | 4 +- .../impl/codec/SimpleQueryCommandCodec.java | 14 +- .../impl/codec/columns/ArrayColumn.java | 2 +- .../impl/codec/columns/ArrayColumnWriter.java | 33 ++ .../impl/codec/columns/ClickhouseColumn.java | 4 + .../codec/columns/ClickhouseColumnWriter.java | 8 +- .../impl/codec/columns/ClickhouseColumns.java | 124 +++--- .../impl/codec/columns/FixedStringColumn.java | 3 +- .../impl/codec/columns/IPv4Column.java | 22 ++ .../impl/codec/columns/IPv4ColumnReader.java | 37 ++ .../impl/codec/columns/IPv4ColumnWriter.java | 23 ++ .../impl/codec/columns/IPv6Column.java | 23 ++ .../impl/codec/columns/IPv6ColumnReader.java | 29 ++ .../impl/codec/columns/IntervalColumn.java | 27 ++ .../codec/columns/IntervalColumnReader.java | 23 ++ .../codec/columns/LowCardinalityColumn.java | 2 +- .../columns/LowCardinalityColumnReader.java | 7 +- .../columns/LowCardinalityColumnWriter.java | 152 ++++++++ .../impl/codec/columns/StringColumn.java | 7 + .../impl/codec/columns/UInt8Column.java | 5 + .../columns/ClickhouseColumnsTestReader.java | 3 +- .../clickhousenativeclient/AllTypesTest.java | 152 ++++++++ .../BasicClickhouseTest.java | 32 +- .../ClickhouseResource.java | 4 +- .../PacketReaderReplayTest.java | 16 +- .../vertx/clickhousenativeclient/Sleep.java | 18 + .../SpecialTypesTest.java | 96 +++++ ...ckhouseNativeBinaryDataTypeEncodeTest.java | 1 + .../tck/ClickhouseNativeConnectionTest.java | 11 +- .../ClickhouseNativePreparedBatchTest.java | 1 + ...ickhouseNativePreparedQueryCachedTest.java | 12 +- ...ClickhouseNativeSimpleQueryPooledTest.java | 1 + .../tck/ClickhouseNativeSimpleQueryTest.java | 1 + .../clickhousenativeclient/tck/Sleep.java | 14 - .../src/test/python/gen_all_types_tables.py | 43 +++ ..._testConcurrentClose_with_compression.yaml | 79 ++++ .../src/test/resources/init.sql | 355 ++++++++++++++++++ 54 files changed, 1563 insertions(+), 207 deletions(-) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/{ClickhouseNativeRow.java => ClickhouseNativeRowImpl.java} (84%) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java create mode 100755 vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py create mode 100644 vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 66de120c6f..6476fe8978 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -34,6 +34,10 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_STRING_CHARSET = "string_charset"; + public static final String OPTION_YEAR_DURATION = "days_in_year"; + public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; + public static final String OPTION_MONTH_DURATION = "days_in_month"; + public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; @@ -42,5 +46,6 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET))); + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, + OPTION_MONTH_DURATION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 72c5f8a407..f58d1bb7b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -2,19 +2,23 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.sqlclient.desc.ColumnDescriptor; +import java.util.ArrayList; import java.util.List; import java.util.Map; public class BaseBlock { private final Map columnsWithTypes; + protected final ClickhouseNativeRowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - private final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseNativeDatabaseMetadata md; public BaseBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; + this.rowDesc = buildRowDescriptor(columnsWithTypes); this.data = data; this.blockInfo = blockInfo; this.md = md; @@ -35,4 +39,14 @@ public BlockInfo getBlockInfo() { public ClickhouseNativeDatabaseMetadata getMd() { return md; } + + public ClickhouseNativeRowDesc rowDesc() { + return rowDesc; + } + + private ClickhouseNativeRowDesc buildRowDescriptor(Map columnsWithTypes) { + List columnNames = new ArrayList<>(columnsWithTypes.keySet()); + List columnTypes = new ArrayList<>(columnsWithTypes.values()); + return new ClickhouseNativeRowDesc(columnNames, columnTypes); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 921ffae46c..c4a0d6d828 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -5,6 +5,8 @@ import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; import io.vertx.core.net.NetSocket; import io.vertx.core.net.impl.NetSocketInternal; @@ -15,6 +17,8 @@ import net.jpountz.lz4.LZ4Factory; public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); + private int pipeliningLimit; private final LZ4Factory lz4Factory; @@ -35,6 +39,9 @@ private LZ4Factory lz4FactoryForName(String name) { } else if ("lz4_unsafe".equals(name)) { return LZ4Factory.unsafeInstance(); } + if (!"none".equals(name)) { + LOG.warn("unknown compressor name '" + name + "', ignored"); + } return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 45d1644c34..7951322b8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -3,6 +3,7 @@ import io.vertx.sqlclient.spi.DatabaseMetadata; import java.nio.charset.Charset; +import java.time.Duration; import java.time.ZoneId; import java.util.Map; @@ -18,10 +19,14 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final String fullClientName; private final Charset stringCharset; private final Map properties; + private final Duration yearDuration; + private final Duration quarterDuration; + private final Duration monthDuration; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties, Charset stringCharset) { + Map properties, Charset stringCharset, Duration yearDuration, + Duration quarterDuration, Duration monthDuration) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -33,6 +38,9 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.fullClientName = fullClientName; this.properties = properties; this.stringCharset = stringCharset; + this.yearDuration = yearDuration; + this.quarterDuration = quarterDuration; + this.monthDuration = monthDuration; } @Override @@ -83,6 +91,18 @@ public Charset getStringCharset() { return stringCharset; } + public Duration yearDuration() { + return yearDuration; + } + + public Duration quarterDuration() { + return quarterDuration; + } + + public Duration monthDuration() { + return monthDuration; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index a7074712c8..3a527c4ea1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRow.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -5,15 +5,17 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; +import java.sql.JDBCType; import java.util.List; +import java.util.Objects; -public class ClickhouseNativeRow implements Row { +public class ClickhouseNativeRowImpl implements Row { private final int rowNo; private final Charset stringCharset; private final ClickhouseNativeRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRow(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { + public ClickhouseNativeRowImpl(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; @@ -40,11 +42,6 @@ private Object getValue(int columnIndex, Class desired) { ClickhouseColumnReader column = data.get(columnIndex); Object columnData = column.getElement(rowNo, desired); return columnData; - //if (encodeStrings && columnData != null && column.columnDescriptor().jdbcType() == JDBCType.VARCHAR) { - // return new String((byte[]) columnData, stringCharset); - //} else { - // return columnData; - //} } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 0d771cd245..48f95b1d8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -12,12 +12,14 @@ import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.function.Predicate; public class ClickhouseNativeSocketConnection extends SocketConnectionBase { private ClickhouseNativeCodec codec; private ClickhouseNativeDatabaseMetadata md; - private String pendingCursorId; + private UUID psId; + private String ourCursorId; private final LZ4Factory lz4Factory; @@ -49,25 +51,49 @@ public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { this.md = md; } - public void setPendingCursorId(String cursorId) { - this.pendingCursorId = cursorId; + public void lockPsOrThrow(UUID newPsId) { + if (psId == null) { + psId = newPsId; + } else { + if (newPsId != null) { + if (!Objects.equals(psId, newPsId)) { + throw new IllegalStateException("attempt to block blocked (" + psId + ") connection by ps" + newPsId); + } + } + } } - public String getPendingCursorId() { - return pendingCursorId; + public void lockCursorOrThrow(UUID psId, String newCursorId) { + lockPsOrThrow(psId); + if (ourCursorId == null) { + ourCursorId = newCursorId; + } else { + if (newCursorId != null) { + if (!Objects.equals(ourCursorId, newCursorId)) { + throw new IllegalStateException("attempt to block blocked (" + ourCursorId + ") connection by cursor " + newCursorId); + } + } + } + } + + public void releaseCursor(UUID psId, String newCursorId) { + if (!Objects.equals(this.ourCursorId, newCursorId)) { + throw new IllegalStateException("can't release: pending cursor = " + ourCursorId + "; provided: " + newCursorId); + } + this.ourCursorId = null; } - public void releasePendingCursor(String cursorId) { - if (!Objects.equals(this.pendingCursorId, cursorId)) { - throw new IllegalArgumentException("can't release pending cursor: pending = " + pendingCursorId + "; provided: " + cursorId); + public void releasePs(UUID newPs) { + if (!Objects.equals(this.psId, newPs)) { + throw new IllegalStateException("can't release: pending cursor = " + psId + "; provided: " + newPs); } - this.pendingCursorId = null; + this.psId = null; } - public void throwExceptionIfBusy(String callerCursorId) { - if (pendingCursorId != null) { - if (!Objects.equals(pendingCursorId, callerCursorId)) { - throw new IllegalArgumentException("connection is busy with cursor " + pendingCursorId); + public void throwExceptionIfCursorIsBusy(String callerId) { + if (ourCursorId != null) { + if (!Objects.equals(ourCursorId, callerId)) { + throw new IllegalStateException("connection is busy with " + ourCursorId); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index eb434e55ea..76efd8872b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -3,12 +3,12 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; public class ColumnOrientedBlock extends BaseBlock { - public ColumnOrientedBlock(Map columnsWithTypes, List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); @@ -27,4 +27,17 @@ public int numRows() { return 0; } } + + public List rows() { + int numRows = numRows(); + List ret = new ArrayList<>(numRows); + for (int i = 0; i < numRows; ++i) { + ret.add(row(i)); + } + return ret; + } + + public ClickhouseNativeRowImpl row(int rowNo) { + return new ClickhouseNativeRowImpl(rowNo, rowDesc, this, md); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index b73dfa241a..fe8b325844 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -7,6 +7,7 @@ import io.vertx.sqlclient.impl.TupleInternal; import java.util.Map; +import java.util.UUID; public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; @@ -14,14 +15,16 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final ClickhouseNativeRowDesc rowDesc; private final Map.Entry queryType; private final boolean sentQuery; + private final UUID psId; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - Map.Entry queryType, boolean sentQuery) { + Map.Entry queryType, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; this.queryType = queryType; this.sentQuery = sentQuery; + this.psId = psId; } @Override @@ -51,4 +54,8 @@ public Map.Entry queryType() { public boolean isSentQuery() { return sentQuery; } + + public UUID getPsId() { + return psId; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 754d940a41..7b87ac31a6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -15,7 +15,7 @@ protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocket } void encode(ClickhouseNativeEncoder encoder) { - conn.releasePendingCursor(cmd.id()); + conn.releaseCursor(((ClickhouseNativePreparedStatement)cmd.statement()).getPsId(), cmd.id()); super.encode(encoder); completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 613b015ea2..d2f72a2d55 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -13,6 +13,10 @@ public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSoc void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); + ClickhouseNativePreparedStatement stmt = (ClickhouseNativePreparedStatement) cmd.statement(); + if (stmt.isSentQuery()) { + encoder.getConn().releasePs(stmt.getPsId()); + } completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 0e9f10ee68..3d219883c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -5,9 +5,12 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import java.nio.charset.Charset; +import java.time.Duration; import java.time.ZoneId; import java.util.Map; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; + public class DatabaseMetadataReader { private final String fullClientName; private final Map properties; @@ -75,9 +78,13 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } else { patchVersion = revision; } + int daysInYear = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_YEAR_DURATION, "365")); + int daysInQuarter = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_QUARTER_DURATION, "120")); + int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset()); + major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset(), + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); } private Charset charset() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index ec173f9ea0..e6e414700f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -41,10 +41,8 @@ void encode(ClickhouseNativeEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); //TODO smagellan: introduce lock() method - if (conn.getPendingCursorId() == null) { - conn.setPendingCursorId(ourCursorId); - } else { - conn.throwExceptionIfBusy(ourCursorId); + if (ourCursorId != null) { + conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } PreparedStatement ps = ecmd.preparedStatement(); if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { @@ -90,7 +88,7 @@ protected Map settings() { @Override protected void checkIfBusy() { - conn.throwExceptionIfBusy(ecmd().cursorId()); + conn.throwExceptionIfCursorIsBusy(ecmd().cursorId()); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 6e23a60d3d..b5a8936d9c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -33,34 +34,36 @@ public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator all @Override public void moreData(ByteBuf buf, ByteBufAllocator alloc) { - if (serverCityHash == null && buf.readableBytes() >= MIN_BLOCK_PREFIX) { - serverCityHash = new long[2]; - dumpHeader(buf); - LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + - "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); - LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); - serverCityHash[0] = buf.readLongLE(); - serverCityHash[1] = buf.readLongLE(); - checkSummedReaderIndex = buf.readerIndex(); - int compressionMethod = buf.readUnsignedByte(); - if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { - decompressedData.release(); - String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", - compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); - throw new IllegalStateException(msg); + if (serverCityHash == null) { + if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { + serverCityHash = new long[2]; + dumpHeader(buf); + LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + serverCityHash[0] = buf.readLongLE(); + serverCityHash[1] = buf.readLongLE(); + checkSummedReaderIndex = buf.readerIndex(); + int compressionMethod = buf.readUnsignedByte(); + if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { + decompressedData.release(); + String msg = String.format("unexpected compression method type 0x%X; expects 0x%X", + compressionMethod, ClickhouseConstants.COMPRESSION_METHOD_LZ4); + throw new IllegalStateException(msg); + } + sizeWithHeader = buf.readUnsignedIntLE(); + if (sizeWithHeader > Integer.MAX_VALUE) { + throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); + } + compressedAndSizeSize = sizeWithHeader - 1 - 4; + uncompressedSize = buf.readUnsignedIntLE(); + if (uncompressedSize > Integer.MAX_VALUE) { + throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); + } + LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } - sizeWithHeader = buf.readUnsignedIntLE(); - if (sizeWithHeader > Integer.MAX_VALUE) { - throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); - } - compressedAndSizeSize = sizeWithHeader - 1 - 4; - uncompressedSize = buf.readUnsignedIntLE(); - if (uncompressedSize > Integer.MAX_VALUE) { - throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); - } - LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); } if (uncompressedSize == null) { return; @@ -70,19 +73,20 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (buf.readableBytes() < compressedDataSize) { return; } - long[] oursCityHash; //TODO: maybe skip allocation if buf.hasArray() == true ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb); - oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size arrayBb.readerIndex(1 + 4 + 4); - - LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex(), compressedDataSize)); - LOG.info("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); if (!Arrays.equals(serverCityHash, oursCityHash)) { + LOG.error("cityhash mismatch"); + LOG.error("all available data: " + ByteBufUtil.hexDump(buf, 0, buf.readerIndex() + buf.readableBytes())); + LOG.error("data from reader index(" + buf.readerIndex() + "): " + ByteBufUtil.hexDump(buf)); + LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); + LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + Arrays.toString(Utils.hex(oursCityHash))); @@ -185,4 +189,18 @@ public String hexdump() { public void finish() { decompressedData.release(); } + + public static void main(String[] args) { + String bytesStr = "747572653a20412062756720776974682073656e696f726974792e3143d201f20273206d616b65207665727920666173742c0b00a06163637572617465206dba00f1106b65732e4f3c7363726970743e616c6572742822546869732073686f756c643a01f002626520646973706c6179656420696e2061fa015177736572203100f00220626f782e22293b3c2f7363726970743e01008ae197e847628104accc74807378ba29825c00000051000000f027010002ffffffff00020102696405496e7433320c000000076d65737361676506537472696e672ae38395e383ace383bce383a0e383af0900f00882afe381aee38399e383b3e38381e3839ee383bce382af060c02800c000001030cb4060c00000100a783ac6cd55c7a7cb5ac46bddb86e21482140000000a000000a0010002ffffffff0000000300000000000a00010002ffffffff0008020a6576656e745f74696d65084461746554696d65cf415f60cf415f60176576656e745f74696d655f6d6963726f7365636f6e64730655496e743332035706001657060009686f73745f6e616d6506537472696e670662686f7273650662686f7273650871756572795f696406537472696e672462643762643639332d383736652d343339382d386135302d3464393763353861343135352462643762643639332d383736652d343339382d386135302d346439376335386134313535097468726561645f69640655496e7436348d040000000000008d04000000000000087072696f7269747904496e7438060706736f7572636506537472696e670c6578656375746551756572790d4d656d6f7279547261636b6572047465787406537472696e674a5265616420313220726f77732c203832302e3030204220696e20302e303031343237373720736563"; + byte[] bytes = new byte[bytesStr.length() / 2]; + for (int i = 0; i < bytesStr.length(); i += 2) { + String s = bytesStr.substring(i, i + 2); + byte b = (byte)Integer.parseInt(s, 16); + bytes[i / 2] = b; + } + ByteBuf arrayBb = Unpooled.wrappedBuffer(bytes); + Long sizeWithHeader = 660L; + long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); + System.err.println(Arrays.toString(Utils.hex(oursCityHash))); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 0996b9e113..78f4805c51 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -4,16 +4,17 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.impl.RowDesc; import net.jpountz.lz4.LZ4Factory; -import java.util.AbstractMap; +import java.sql.JDBCType; import java.util.List; import java.util.Map; +import java.util.Objects; public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); @@ -90,6 +91,25 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { private void traceServerLogs(ColumnOrientedBlock block) { LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + List rows = block.rows(); + LOG.info("rows: "); + StringBuilder bldr = new StringBuilder(); + for (ClickhouseNativeRowImpl row : rows) { + bldr.append(rowAsString(row, block.rowDesc())).append("\n"); + } + LOG.info(bldr); + } + + private String rowAsString(Row row, RowDesc rowDesc) { + String[] vals = new String[row.size()]; + for (int i = 0; i < vals.length; ++i) { + Object value = row.getValue(i); + if (rowDesc.columnDescriptor().get(i).jdbcType() == JDBCType.VARCHAR) { + value = "'" + value + "'"; + } + vals[i] = Objects.toString(value); + } + return String.join(", ", vals); } private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { @@ -178,7 +198,6 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { if (tempTableInfo == null) { tempTableInfo = ByteBufUtils.readPascalString(in); - LOG.info("tempTableInfo: " + tempTableInfo); if (tempTableInfo == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index ccd1e2e153..113624e91e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -10,32 +10,33 @@ import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); private final Map.Entry queryType; - + private final UUID psId; private PacketReader packetReader; protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { super(cmd); this.queryType = queryType; + this.psId = UUID.randomUUID(); } @Override void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); - LOG.info("handle ready for query"); String sql = cmd.sql(); + //TODO smagellan: check if query ends with 'values', maybe move to QueryParser boolean isInsert = queryType != null && "insert".equalsIgnoreCase(queryType.getKey()); int valuesIndex = 0; - boolean realInsertBatch = isInsert && (valuesIndex = valuesPos(sql, queryType.getValue())) != -1; + boolean endsWithValues = sql.toLowerCase().endsWith("values"); + boolean realInsertBatch = isInsert && (endsWithValues || (valuesIndex = valuesPos(sql, queryType.getValue())) != -1); if (realInsertBatch) { - String truncatedSql = sql.substring(0, valuesIndex + "values".length()); + //TODO smagellan: lock connection with prepared statement id + encoder.getConn().lockPsOrThrow(psId); + String truncatedSql = endsWithValues ? sql : sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); try { PacketForge forge = new PacketForge(encoder.getConn(), encoder.chctx()); @@ -48,7 +49,7 @@ void encode(ClickhouseNativeEncoder encoder) { } } else { completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false))); + new ClickhouseNativeRowDesc(Collections.emptyList()), queryType, false, psId))); } } @@ -81,7 +82,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { List columnTypes = new ArrayList<>(data.values()); ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true))); + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 8e63d292b0..b26882c97c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,8 +3,16 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.*; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +//TODO: maybe switch to antlr4 or JavaCC + .jj file (see ClickHouseSqlParser.jj in regular ClickHouse jdbc driver) public class QueryParsers { private static final String INSERT_KEYWORD = "INSERT"; private static final String UPDATE_KEYWORD = "UPDATE"; @@ -16,7 +24,6 @@ public class QueryParsers { INSERT_KEYWORD, UPDATE_KEYWORD))); - //TODO: maybe switch to antlr4 public static String insertParamValuesIntoQuery(String parametrizedSql, Tuple paramsList) { int prevIdx = 0; int newIdx; @@ -79,7 +86,7 @@ public static Map.Entry findKeyWord(String sql, Collection findKeyWord(String sql, int startPos, Collection keywords) { Character requiredChar = null; - //special case to find placeholder + //special case to find special chars, e.g. argument index $ if (keywords.size() == 1) { String str = keywords.iterator().next(); if (str.length() == 1) { @@ -87,31 +94,84 @@ public static Map.Entry findKeyWord(String sql, int startPos, C } } for (int i = startPos; i < sql.length(); i++) { + char ch = sql.charAt(i); String nextTwo = sql.substring(i, Math.min(i + 2, sql.length())); if ("--".equals(nextTwo)) { i = Math.max(i, sql.indexOf("\n", i)); } else if ("/*".equals(nextTwo)) { i = Math.max(i, sql.indexOf("*/", i)); - } else if (requiredChar != null && requiredChar == sql.charAt(i)) { - return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); - } else if (sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { + } else if (ch == '\'' && (i == 0 || sql.charAt(i - 1) != '\\')) { while (i < sql.length() && !(sql.charAt(i) == '\'' && (i == 0 || sql.charAt(i - 1) != '\\'))) { ++i; } } else { - if (Character.isLetter(sql.charAt(i))) { - String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); - for (String keyword : keywords){ - if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { - return new AbstractMap.SimpleEntry<>(keyword, i); + if (requiredChar == null) { + if (Character.isLetter(ch)) { + String trimmed = sql.substring(i, Math.min(sql.length(), Math.max(i, sql.indexOf(" ", i)))); + for (String keyword : keywords) { + if (trimmed.regionMatches(true, 0, keyword, 0, keyword.length())) { + return new AbstractMap.SimpleEntry<>(keyword, i); + } } } - if (requiredChar == null) { - return null; + } else { + if (requiredChar == ch) { + return new AbstractMap.SimpleEntry<>(keywords.iterator().next(), i); } } } } return null; } + + public static Map parseEnumValues(String nativeType) { + final boolean isByte = nativeType.startsWith("Enum8("); + int openBracketPos = nativeType.indexOf('('); + Map result = new HashMap<>(); + int lastQuotePos = -1; + boolean gotEq = false; + String enumElementName = null; + int startEnumValPos = -1; + for (int i = openBracketPos; i < nativeType.length(); ++i) { + char ch = nativeType.charAt(i); + if (ch == '\'') { + if (lastQuotePos == -1) { + lastQuotePos = i; + } else { + enumElementName = nativeType.substring(lastQuotePos + 1, i); + lastQuotePos = -1; + } + } else if (ch == '=') { + gotEq = true; + } else if (gotEq) { + if (Character.isDigit(ch)) { + if (startEnumValPos == -1) { + startEnumValPos = i; + } else if (!Character.isDigit(nativeType.charAt(i + 1))) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } else if (startEnumValPos != -1) { + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + Number key = byteOrShort(enumValue, isByte); + result.put(key, enumElementName); + startEnumValPos = -1; + enumElementName = null; + gotEq = false; + } + } + } + return result; + } + + private static Number byteOrShort(int number, boolean isByte) { + if (isByte) { + return (byte) number; + } + return (short) number; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 877a91824c..c8e224bace 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -2,7 +2,7 @@ import io.netty.buffer.ByteBuf; -class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { +public class RawClickhouseStreamDataSink implements ClickhouseStreamDataSink { private final ByteBuf sink; public RawClickhouseStreamDataSink(ByteBuf sink) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 07f779e09e..9bb195e877 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -2,7 +2,7 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRow; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowImpl; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; @@ -28,7 +28,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRow row = new ClickhouseNativeRow(rowNo, rowDesc, block, md); + ClickhouseNativeRowImpl row = block.row(rowNo); ++rowNo; return row; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index c3e30d23d2..9994619827 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -5,13 +5,10 @@ import io.vertx.clickhouse.clickhousenative.impl.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.QueryCommandBase; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import java.util.Map; public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ @@ -67,7 +64,7 @@ protected boolean isSuspended() { } protected void checkIfBusy() { - conn.throwExceptionIfBusy(null); + conn.throwExceptionIfCursorIsBusy(null); } @Override @@ -83,7 +80,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = buildRowDescriptor(block); + ClickhouseNativeRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; @@ -109,13 +106,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } } - private ClickhouseNativeRowDesc buildRowDescriptor(ColumnOrientedBlock block) { - Map data = block.getColumnsWithTypes(); - List columnNames = new ArrayList<>(data.keySet()); - List columnTypes = new ArrayList<>(data.values()); - return new ClickhouseNativeRowDesc(columnNames, columnTypes); - } - private void notifyOperationUpdate(boolean hasMoreResults, Throwable t) { notifyOperationUpdate(0, hasMoreResults, t); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 6ca8475b71..ab901e26ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -20,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new ArrayColumnWriter(data, descriptor, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java new file mode 100644 index 0000000000..bac26ca684 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -0,0 +1,33 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class ArrayColumnWriter extends ClickhouseColumnWriter { + private final ClickhouseNativeDatabaseMetadata md; + + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + super(data, descriptor, columnIndex); + this.md = md; + } + + @Override + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + } + + @Override + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 7dc34b0675..e2a89a19cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -15,4 +15,8 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnReader reader(int nRows); public abstract ClickhouseColumnWriter writer(List data, int columnIndex); + + public Object nullValue() { + throw new IllegalStateException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index e6408e0fe5..f5dd1aa4a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -65,7 +65,11 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, for (int rowNo = fromRow; rowNo < toRow; ++rowNo) { Object val = data.get(rowNo).getValue(columnIndex); if (val == null) { - serializeDataNull(sink); + if (columnDescriptor.isNullable()) { + serializeDataNull(sink); + } else { + throw new IllegalArgumentException("can't serialize null for non-nullable column " + columnDescriptor.name() + " at row " + rowNo); + } } else { serializeDataElement(sink, val); } @@ -74,6 +78,6 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, protected abstract void serializeDataElement(ClickhouseStreamDataSink sink, Object val); - //TODO: maybe perform ByteBuf.writerIndex(writerIndex() + elemSize) (is allocated memory is zero-filled ?) + //TODO: maybe skip bytes instead (perform ByteBuf.writerIndex(writerIndex() + elemSize)) (is allocated memory zero-filled ?) protected abstract void serializeDataNull(ClickhouseStreamDataSink sink); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index e60bbb5ac7..31c8667060 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -2,10 +2,14 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; +import java.time.Duration; import java.time.ZoneId; +import java.util.AbstractMap; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -28,10 +32,27 @@ public class ClickhouseColumns { public static final String ENUM_PREFIX = "Enum"; public static final int ENUM_PREFIX_LENGTH = ENUM_PREFIX.length(); + public static final String INTERVAL_PREFIX = "Interval"; + + private static final Map CONST_DURATION_MULTIPLIERS = Collections.unmodifiableMap(buildConstDurationMultipliers()); + + private static Map buildConstDurationMultipliers() { + HashMap result = new HashMap<>(); + result.put("Second", Duration.ofSeconds(1)); + result.put("Day", Duration.ofDays(1)); + result.put("Hour", Duration.ofHours(1)); + result.put("Minute", Duration.ofMinutes(1)); + result.put("Week", Duration.ofDays(7)); + return result; + } + + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + //TODO smagellan: get rid of recursion + //TODO smagellan: introduce arrays dimensions size ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, nested); @@ -49,6 +70,15 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } + private static Map.Entry unwrapArrayModifiers(String spec) { + int arrayDepth = 0; + while (spec.startsWith(ARRAY_PREFIX)) { + spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); + ++arrayDepth; + } + return new AbstractMap.SimpleEntry<>(arrayDepth, spec); + } + public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { @@ -110,8 +140,17 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } else if ("Date".equals(spec)) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, null, null, null, null); + } else if (spec.startsWith(INTERVAL_PREFIX)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); + } else if ("IPv4".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); + } else if ("IPv6".equals(spec)) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6ColumnReader.ELEMENT_SIZE, + JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } - throw new IllegalArgumentException("unknown spec: '" + spec + "'"); + throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); } private static int decimalSize(int precision) { @@ -190,75 +229,44 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (jdbcType == JDBCType.DATE) { return new DateColumn(descr); } else if (jdbcType == JDBCType.OTHER) { - if (descr.getNestedType().equals("UUID")) { + String nativeType = descr.getNestedType(); + if (nativeType.equals("UUID")) { return new UUIDColumn(descr); - } else if (descr.getNestedType().startsWith(ENUM_PREFIX)) { - Map enumVals = parseEnumVals(descr.getNestedType()); + } else if (nativeType.startsWith(ENUM_PREFIX)) { + Map enumVals = QueryParsers.parseEnumValues(nativeType); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { return new Enum8Column(descr, enumVals); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { return new Enum16Column(descr, enumVals); } + } else if (nativeType.startsWith(INTERVAL_PREFIX)) { + Duration multiplier = getDurationMultiplier(descr, md); + if (multiplier == null) { + throw new IllegalArgumentException("unknown duration specifier in spec: " + descr.getUnparsedNativeType()); + } + return new IntervalColumn(descr, multiplier); + } else if (nativeType.equals("IPv4")) { + return new IPv4Column(descr); + } else if (nativeType.equals("IPv6")) { + return new IPv6Column(descr, md); } } throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - - //TODO: maybe switch to antlr4 - static Map parseEnumVals(String nativeType) { - final boolean isByte = nativeType.startsWith("Enum8("); - int openBracketPos = nativeType.indexOf('('); - Map result = new HashMap<>(); - int lastQuotePos = -1; - boolean gotEq = false; - String enumElementName = null; - int startEnumValPos = -1; - for (int i = openBracketPos; i < nativeType.length(); ++i) { - char ch = nativeType.charAt(i); - if (ch == '\'') { - if (lastQuotePos == -1) { - lastQuotePos = i; - } else { - enumElementName = nativeType.substring(lastQuotePos + 1, i); - lastQuotePos = -1; - } - } else if (ch == '=') { - gotEq = true; - } else if (gotEq) { - if (Character.isDigit(ch)) { - if (startEnumValPos == -1) { - startEnumValPos = i; - } else if (!Character.isDigit(nativeType.charAt(i + 1))) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); - Number key = byteOrShort(enumValue, isByte); - result.put(key, enumElementName); - startEnumValPos = -1; - enumElementName = null; - gotEq = false; - } - } else if (startEnumValPos != -1) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); - Number key = byteOrShort(enumValue, isByte); - result.put(key, enumElementName); - startEnumValPos = -1; - enumElementName = null; - gotEq = false; - } + private static Duration getDurationMultiplier(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + String durationStr = descr.getNestedType().substring(INTERVAL_PREFIX.length()); + Duration multiplier = CONST_DURATION_MULTIPLIERS.get(durationStr); + if (multiplier == null) { + switch (durationStr) { + case "Year": + return md.yearDuration(); + case "Quarter": + return md.quarterDuration(); + case "Month": + return md.monthDuration(); } } - return result; - } - - private static Number byteOrShort(int number, boolean isByte) { - if (isByte) { - return (byte) number; - } - return (short) number; - } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor t = columnDescriptorForSpec("Array(Array(LowCardinality(Nullable(String))))", "fake"); - System.err.println(t); + return multiplier; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index ea39af6474..8ee3af4386 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -7,7 +7,8 @@ import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - private final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseNativeDatabaseMetadata md; + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java new file mode 100644 index 0000000000..f843fbdbdb --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -0,0 +1,22 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class IPv4Column extends UInt32Column { + public IPv4Column(ClickhouseNativeColumnDescriptor descr) { + super(descr); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IPv4ColumnReader(nRows, descriptor); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new IPv4ColumnWriter(data, descriptor, columnIndex); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java new file mode 100644 index 0000000000..ce2d4b82f7 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -0,0 +1,37 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class IPv4ColumnReader extends UInt32ColumnReader { + public static final int ELEMENT_SIZE = 4; + + public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + super(nRows, descriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == null) { + Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); + try { + return Inet4Address.getByAddress(intBytes(addr)); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + return super.getElementInternal(rowIdx, desired); + } + + private static byte[] intBytes(Long l) { + return new byte[] { + (byte) (l >>> 24 & 0xFF), + (byte) (l >>> 16 & 0xFF), + (byte) (l >>> 8 & 0xFF), + (byte) (l & 0xFF) + }; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java new file mode 100644 index 0000000000..763c752771 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.net.Inet4Address; +import java.util.List; + +public class IPv4ColumnWriter extends UInt32ColumnWriter { + public IPv4ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Inet4Address addr = (Inet4Address) val; + super.serializeDataElement(sink, Integer.toUnsignedLong(intFromBytes(addr.getAddress()))); + } + + private static int intFromBytes(byte[] b) { + return b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java new file mode 100644 index 0000000000..bbf699dc70 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class IPv6Column extends FixedStringColumn { + public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + super(descr, md); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IPv6ColumnReader(nRows, descriptor, md); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java new file mode 100644 index 0000000000..86dcbb5885 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -0,0 +1,29 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class IPv6ColumnReader extends FixedStringColumnReader { + public static final int ELEMENT_SIZE = 16; + + protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + super(nRows, columnDescriptor, md); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == null) { + byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); + try { + return Inet6Address.getByAddress(addr); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + return super.getElementInternal(rowIdx, desired); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java new file mode 100644 index 0000000000..96d6a319aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.time.Duration; +import java.util.List; + +public class IntervalColumn extends ClickhouseColumn { + private final Duration multiplier; + + public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + super(descriptor); + this.multiplier = multiplier; + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new IntervalColumnReader(nRows, descriptor, multiplier); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); + throw new IllegalStateException("not implemented"); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java new file mode 100644 index 0000000000..6b870d64ce --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -0,0 +1,23 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.time.Duration; + +public class IntervalColumnReader extends UInt64ColumnReader { + private final Duration multiplier; + + public IntervalColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + super(nRows, descriptor); + this.multiplier = multiplier; + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + Long obj = (Long)super.getElementInternal(rowIdx, desired); + if (desired != Duration.class) { + return obj; + } + return multiplier.multipliedBy(obj); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 9325576d4c..e2890063df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -20,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new LowCardinalityColumnWriter(data, descriptor, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 677bad2ab4..4a1e0faf79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -74,7 +74,7 @@ protected void readData(ClickhouseStreamDataSource in) { } int keyType = (int)(serType & 0xf); if (keysColumn == null) { - keysColumn = uintColumn(keyType); + keysColumn = uintColumn(columnDescriptor.name(), keyType).reader(nRows); } keysColumn.readColumn(in); } @@ -107,9 +107,8 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } - private ClickhouseColumnReader uintColumn(int code) { + static ClickhouseColumn uintColumn(String name, int code) { ClickhouseNativeColumnDescriptor tmp; - String name = columnDescriptor.name(); //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances if (code == 0) { tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); @@ -122,6 +121,6 @@ private ClickhouseColumnReader uintColumn(int code) { } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, md).reader(nRows); + return ClickhouseColumns.columnForSpec(tmp, null); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java new file mode 100644 index 0000000000..878d404699 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -0,0 +1,152 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.RawClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class LowCardinalityColumnWriter extends ClickhouseColumnWriter { + //Need to read additional keys. + //Additional keys are stored before indexes as value N and N keys + //after them. + public static final int HAS_ADDITIONAL_KEYS_BIT = 1 << 9; + // # Need to update dictionary. + // # It means that previous granule has different dictionary. + public static final int NEED_UPDATE_DICTIONARY = 1 << 10; + public static final int SERIALIZATION_TYPE = HAS_ADDITIONAL_KEYS_BIT | NEED_UPDATE_DICTIONARY; + + private final ClickhouseNativeDatabaseMetadata md; + private Map dictionaryIndex; + private List keys; + private int nullAddon; + + public LowCardinalityColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.md = md; + } + + @Override + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + sink.writeLongLE(1); + } + + @Override + protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + dictionaryIndex = new LinkedHashMap<>(); + keys = new ArrayList<>(); + ClickhouseNativeColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); + ClickhouseColumn dictionaryColumn = ClickhouseColumns.columnForSpec(dictionaryWriterDescr, md); + nullAddon = columnDescriptor.isNullable() ? 1 : 0; + super.serializeDataInternal(sink, fromRow, toRow); + int dictionarySize = dictionaryIndex.size() + nullAddon; + //empty array + if (dictionarySize == 0) { + return; + } + int intType = (int) (log2(dictionarySize) / 8); + ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(columnDescriptor.name(), intType); + + int serializationType = SERIALIZATION_TYPE | intType; + sink.writeLongLE(serializationType); + sink.writeLongLE(dictionarySize); + + Collection nullVal = columnDescriptor.isNullable() ? Collections.singleton(dictionaryColumn.nullValue()) : Collections.emptyList(); + ArrayList dictionaryTuples = Stream.concat(nullVal.stream(), dictionaryIndex.keySet().stream()) + .map(LowCardinalityColumnWriter::maybeUnwrapArrayWrapper) + .map(Tuple::of) + .collect(Collectors.toCollection(ArrayList::new)); + + ClickhouseColumnWriter dictionaryWriter = dictionaryColumn.writer(dictionaryTuples, 0); + dictionaryWriter.serializeData(sink, 0, dictionaryTuples.size()); + sink.writeLongLE(data.size()); + ClickhouseColumnWriter valuesColumnWriter = valuesColumn.writer(keys.stream().map(Tuple::of).collect(Collectors.toCollection(ArrayList::new)), 0); + valuesColumnWriter.serializeData(sink, 0, data.size()); + } + + private static Object maybeUnwrapArrayWrapper(Object from) { + if (from.getClass() == ArrayWrapper.class) { + return ((ArrayWrapper) from).array; + } + return from; + } + + private Object maybeWrapArray(Object val) { + if (val.getClass() == byte[].class) { + val = new ArrayWrapper((byte[]) val); + } else if (val.getClass() == String.class) { + val = new ArrayWrapper(((String) val).getBytes(md.getStringCharset())); + } + return val; + } + + private double log2(int x) { + return (Math.log(x) / Math.log(2)); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + val = maybeWrapArray(val); + Integer index = dictionaryIndex.computeIfAbsent(val, dictionaryMissVal -> dictionaryIndex.size() + nullAddon); + keys.add(index); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + keys.add(0); + } + + @Override + protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } + + private static class ArrayWrapper { + private final byte[] array; + private final int hash; + + ArrayWrapper(byte[] array) { + this.array = array; + this.hash = Arrays.hashCode(array); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ArrayWrapper that = (ArrayWrapper) o; + return hash == that.hash && Arrays.equals(array, that.array); + } + + @Override + public int hashCode() { + return hash; + } + } + + public static void main(String[] args) { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("LowCardinality(Nullable(String))", "name"); + List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); + + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); + + ByteBuf buffer = Unpooled.buffer(100); + RawClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buffer); + writer.serializeData(sink, 0, data.size()); + System.err.println(writer.dictionaryIndex); + System.err.println(writer.keys); + System.err.println(buffer.readableBytes()); + System.err.print(ByteBufUtil.hexDump(buffer)); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index b04ad9b57b..ccf1045879 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -7,6 +7,8 @@ import java.util.List; public class StringColumn extends ClickhouseColumn { + public static final byte[] EMPTY = new byte[0]; + private final ClickhouseNativeDatabaseMetadata md; public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); @@ -22,4 +24,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new StringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + @Override + public Object nullValue() { + return EMPTY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index f4a35a1133..194a6b23bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -19,4 +19,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt8ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return descriptor.isUnsigned() ? Short.valueOf((short) 0) : Byte.valueOf((byte) 0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index da79597bfd..8704f656de 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,7 +38,7 @@ private T key(Integer k) { @Test public void testParseEnumVals() { - Map vals = ClickhouseColumns.parseEnumVals(enumDefinition); + Map vals = QueryParsers.parseEnumValues(enumDefinition); Map expected = new HashMap<>(); expected.put(key(1), "aa4"); expected.put(key(22), "1b3b2"); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java new file mode 100644 index 0000000000..d535bc7f98 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -0,0 +1,152 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; +import io.vertx.sqlclient.Tuple; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class AllTypesTest { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void testUInt8(TestContext ctx) { + doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0)); + } + + @Test + public void testInt8(TestContext ctx) { + doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0)); + } + + @Test + public void testString(TestContext ctx) { + doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0")); + } + + private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, + Object nullValue, + List regularValues) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + List batch = buildBatch(columnsList, nullValue, regularValues); + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), regularValues.size(), "row count mismatch"); + RowIterator rows = res3.iterator(); + int rowNo = 0; + while (rows.hasNext()) { + Row row = rows.next(); + for (String columnName : columnsList) { + Object expectedValue = regularValues.get(rowNo); + expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue); + if (columnName.equalsIgnoreCase("id")) { + compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); + } else { + compare(ctx, row, rowNo, columnName, desiredType, expectedValue); + } + } + ++rowNo; + } + conn.close(); + } + )); + } + )); + })); + })); + } + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t")); + } + return columns; + } + + private List buildBatch(List columnsList, Object nullValue, List regularValues) { + List batch = new ArrayList<>(regularValues.size()); + for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { + Object regularValue = regularValues.get(rowNo); + List vals = new ArrayList<>(columnsList.size()); + for (String columnName : columnsList) { + Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue); + vals.add(val); + } + batch.add(Tuple.tuple(vals)); + } + return batch; + } + + private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue) { + Object val; + if (columnName.equalsIgnoreCase("id")) { + val = rowNo; + } else { + if (regularValue == null) { + if (columnName.startsWith("nullable_")) { + if (columnName.startsWith("nullable_array")) { + throw new IllegalArgumentException("not implemented"); + } else { + val = null; + } + } else { + val = nullValue; + } + } else { + val = regularValue; + } + } + return val; + } + + private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { + Object val = row.get(desiredType, colName); + ctx.assertEquals(val, expected, "row " + colName + " mismatch; rowNo: " + rowNo); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index ac393f1001..485ea6138f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -101,24 +101,30 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator { - conn.query("select array() as empty_array, array(array(), array(NULL), array(1, NULL, 2), array(321)) as non_empty_array," + - "CAST(array(array(), array(NULL), array('a', NULL, 'b'), array('c')), 'Array(Array(LowCardinality(Nullable(String))))') as low_cardinality_array").execute( + conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { - ctx.assertEquals(1, res1.size()); + ctx.assertEquals(res1.size(), 1); Row row = res1.iterator().next(); - Object[] expected = new Object[0]; Object[] actual = (Object[])row.getValue(0); ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); - - expected = new Object[][]{{}, {null}, {1, null, 2}, {321}}; - actual = (Object[])row.getValue(1); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); - - expected = new Object[][]{{}, {null}, {"a", null, "b"}, {"c"}}; - actual = (Object[])row.getValue(2); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); conn.close(); }) ); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index e9f4742ff7..5fb6905bd3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -31,7 +31,9 @@ protected void before() throws Throwable { .setUser(server.getUsername()) .setPassword(server.getPassword()) .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver"); + .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver") + .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 5f9f907405..be31aed9ee 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -3,11 +3,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; import org.junit.After; import org.junit.Test; @@ -21,6 +24,8 @@ @RunWith(Parameterized.class) public class PacketReaderReplayTest { + private static final Logger LOG = LoggerFactory.getLogger(PacketReaderReplayTest.class); + private final Map props; private final ByteBuf buf; private final LZ4Factory lz4Factory; @@ -44,7 +49,8 @@ public static Iterable dataForTest() throws IOException { "/nullable_low_cardinality_with_compression.yaml", "/nullable_low_cardinality_without_compression.yaml", "/select_array_of_nullable_string_without_compression.yaml", - "/select_empty_array_without_compression.yaml" + "/select_empty_array_without_compression.yaml", + "/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); @@ -88,7 +94,13 @@ public void cleanup() { public void doReplayTest() { PooledByteBufAllocator allocator = new PooledByteBufAllocator(); String fullName = "Clickhouse jython-driver"; + LOG.info("all bytes: " + ByteBufUtil.hexDump(buf)); + while (buf.readableBytes() > 0) { + readConnIteraction(allocator, fullName); + } + } + private void readConnIteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); @@ -96,7 +108,7 @@ public void doReplayTest() { do { rdr = new PacketReader(md, fullName, props, lz4Factory); Object packet = rdr.receivePacket(allocator, buf); - System.err.println("packet: " + packet); + LOG.info("packet: " + packet); } while (!rdr.isEndOfStream() && buf.readableBytes() > 0); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java new file mode 100644 index 0000000000..09b83adcdc --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -0,0 +1,18 @@ +package io.vertx.clickhousenativeclient; + +public class Sleep { + //updates may be async even for non-replicated tables; + public static final int SLEEP_TIME = 100; + + public static void sleepOrThrow(int duration) { + try { + Thread.sleep(duration); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public static void sleepOrThrow() { + sleepOrThrow(SLEEP_TIME); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java new file mode 100644 index 0000000000..6fa32dba80 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -0,0 +1,96 @@ +package io.vertx.clickhousenativeclient; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.time.Duration; +import java.util.Optional; + +@RunWith(VertxUnitRunner.class) +public class SpecialTypesTest { + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void testNothing(TestContext ctx) { + runQuery(ctx, "SELECT array()", null, null); + } + + @Test + public void testIntervalYear(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 YEAR", Duration.class, Optional.of(Duration.ofDays(365 * 4))); + } + + @Test + public void testIntervalQuarter(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 QUARTER", Duration.class, Optional.of(Duration.ofDays(120 * 4))); + } + + @Test + public void testIntervalMonth(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 MONTH", Duration.class, Optional.of(Duration.ofDays(30 * 4))); + } + + @Test + public void testIntervalWeek(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); + } + + @Test + //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" + public void testIntervalDay(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); + } + + @Test + public void testIntervalHour(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 HOUR", Duration.class, Optional.of(Duration.ofHours(4))); + } + + @Test + public void testIntervalMinute(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 MINUTE", Duration.class, Optional.of(Duration.ofMinutes(4))); + } + + @Test + public void testIntervalSecond(TestContext ctx) { + runQuery(ctx, "SELECT INTERVAL 4 SECOND", Duration.class, Optional.of(Duration.ofSeconds(4))); + } + + private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query(query).execute( + ctx.asyncAssertSuccess(res -> { + ctx.assertEquals(1, res.size()); + if (expected != null && expected.isPresent()) { + Row row = res.iterator().next(); + Object val = desiredCls == null ? row.getValue(0) : row.get(desiredCls, 0); + ctx.assertEquals(expected.get(), val); + } + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 533b217b70..b83718ea65 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 19c9009c61..77394f3de7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,11 +1,15 @@ package io.vertx.clickhousenativeclient.tck; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; import io.vertx.sqlclient.tck.ConnectionTestBase; import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.rules.TestName; import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) @@ -13,10 +17,15 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Rule + public TestName name = new TestName(); + @Override public void setUp() throws Exception { super.setUp(); - options = rule.options(); + options = new ClickhouseNativeConnectOptions(rule.options()); + options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 8e452b2dcf..23ecf9ebd5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index ee5c69fd8c..5826bcf2bb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,22 +1,32 @@ package io.vertx.clickhousenativeclient.tck; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; import org.junit.ClassRule; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { + + @Rule + public TestName name = new TestName(); + @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @Override protected void initConnector() { - options = rule.options(); + options = new ClickhouseNativeConnectOptions(rule.options()); + options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index c289e53288..87d7d4fff6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 3bc3e8cf21..03c96c1f4b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,6 +1,7 @@ package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java deleted file mode 100644 index 7b5c5ef062..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/Sleep.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.vertx.clickhousenativeclient.tck; - -class Sleep { - //updates may be async even for non-replicated tables; - public static final int SLEEP_TIME = 100; - - static void sleepOrThrow() { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } -} diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py new file mode 100755 index 0000000000..f9bfd32ab4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -0,0 +1,43 @@ +#! /usr/bin/python3 + +ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'String', + {'table': 'FixedString', 'type': 'FixedString(12)'}, + 'DateTime', 'DateTime64', 'Date', 'UUID', + {'table': 'Decimal32', 'type': 'Decimal32(4)'}, + {'table': 'Decimal64', 'type': 'Decimal64(4)'}, + {'table': 'Decimal128', 'type': 'Decimal128(4)'}, + #{'table': 'Decimal256', 'type': 'Decimal256(4)'}, + {'table': 'Enum8', 'type': 'Enum8(\'v0\' = -128, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 127)'}, + {'table': 'Enum16', 'type': 'Enum16(\'v0\' = -32768, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 32767)'}, + 'Float32', 'Float64', 'IPv6', 'IPv4']; + +print('set allow_suspicious_low_cardinality_types=true;'); +for elem_spec in ELEMENTARY_TYPES: + table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; + table_name = "vertx_test_{0}".format(table_name.lower()); + type_name = elem_spec['type'] if isinstance(elem_spec, dict) else elem_spec; + print('DROP TABLE IF EXISTS {0};'.format(table_name)); + print('CREATE TABLE {0} ('.format(table_name)); + columns = ['id Int8']; + low_cardinality = type_name != 'UUID' and type_name != 'DateTime64' \ + and not type_name.startswith('Decimal32(') and not type_name.startswith('Decimal64(') \ + and not type_name.startswith('Decimal128(') \ + and not type_name.startswith('Decimal256(') \ + and not type_name.startswith('Enum'); + columns.append('simple_t {0}'.format(type_name)); + columns.append('nullable_t Nullable({0})'.format(type_name)); + columns.append('array_t Array({0})'.format(type_name)); + columns.append('array3_t Array(Array(Array({0})))'.format(type_name)); + columns.append('nullable_array_t Array(Nullable({0}))'.format(type_name)); + columns.append('nullable_array3_t Array(Array(Array(Nullable({0}))))'.format(type_name)); + + if low_cardinality: + columns.append('simple_lc_t LowCardinality({0})'.format(type_name)); + columns.append('nullable_lc_t LowCardinality(Nullable({0}))'.format(type_name)); + columns.append('array_lc_t Array(LowCardinality({0}))'.format(type_name)); + columns.append('array3_lc_t Array(Array(Array(LowCardinality({0}))))'.format(type_name)); + columns.append('nullable_array_lc_t Array(LowCardinality(Nullable({0})))'.format(type_name)); + columns.append('nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable({0})))))'.format(type_name)); + print(' ', ',\n '.join(columns)); + print(') engine = MergeTree()'); + print(" ORDER BY (id);"); diff --git a/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml b/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml new file mode 100644 index 0000000000..859c270376 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml @@ -0,0 +1,79 @@ +# Packet 189 +peer0_0: !!binary | + AEZDbGlja0hvdXNlIENsaWNraG91c2VOYXRpdmVQcmVwYXJlZFF1ZXJ5Q2FjaGVkVGVzdC50ZXN0 + Q29uY3VycmVudENsb3NlFAqpqQMHZGVmYXVsdAdkZWZhdWx0B2RlZmF1bHQ= +# Packet 191 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQOvqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UD +# Packet 193 +peer0_1: !!binary | + AQABAAAJMC4wLjAuMDowAQh2bGFkaW1pcgZiaG9yc2VGQ2xpY2tIb3VzZSBDbGlja2hvdXNlTmF0 + aXZlUHJlcGFyZWRRdWVyeUNhY2hlZFRlc3QudGVzdENvbmN1cnJlbnRDbG9zZRQKqakDAAIPc2Vu + ZF9sb2dzX2xldmVsAQVkZWJ1ZwAAAgEXU0VMRUNUICogRlJPTSBpbW11dGFibGUCAKeDrGzVXHp8 + taxGvduG4hSCFAAAAAoAAACgAQAC/////wAAAA== +# Packet 195 +peer1_1: !!binary | + CgABAAL/////AAgBCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gF2V2ZW50X3RpbWVfbWljcm9zZWNv + bmRzBlVJbnQzMqjNCQAJaG9zdF9uYW1lBlN0cmluZwZiaG9yc2UIcXVlcnlfaWQGU3RyaW5nJDcx + MzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNgl0aHJlYWRfaWQGVUludDY0jQQAAAAA + AAAIcHJpb3JpdHkESW50OAcGc291cmNlBlN0cmluZwxleGVjdXRlUXVlcnkEdGV4dAZTdHJpbmdH + KGZyb20gMTI3LjAuMC4xOjM3Mzc2LCB1c2luZyBwcm9kdWN0aW9uIHBhcnNlcikgU0VMRUNUICog + RlJPTSBpbW11dGFibGU= +# Packet 197 +peer1_2: !!binary | + AQDMr9H3xEk130UQKUNmLuitgi0AAAAiAAAA8BMBAAL/////AAIAAmlkBUludDMyB21lc3NhZ2UG + U3RyaW5n +# Packet 199 +peer1_3: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gWVlfYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzJ4zwkA988JAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDcxMzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNiQ3MTM3ZTIy + My0yZTJmLTQzNGMtYmE0Mi0wZGQyYjM1OTIxZDYJdGhyZWFkX2lkBlVJbnQ2NI0EAAAAAAAAjQQA + AAAAAAAIcHJpb3JpdHkESW50OAcHBnNvdXJjZQZTdHJpbmciZGVmYXVsdC5pbW11dGFibGUgKFNl + bGVjdEV4ZWN1dG9yKSJkZWZhdWx0LmltbXV0YWJsZSAoU2VsZWN0RXhlY3V0b3IpBHRleHQGU3Ry + aW5nFktleSBjb25kaXRpb246IHVua25vd250U2VsZWN0ZWQgMi8yIHBhcnRzIGJ5IHBhcnRpdGlv + biBrZXksIDIgcGFydHMgYnkgcHJpbWFyeSBrZXksIDIvNCBtYXJrcyBieSBwcmltYXJ5IGtleSwg + MiBtYXJrcyB0byByZWFkIGZyb20gMiByYW5nZXM= +# Packet 201 +peer1_4: !!binary | + AQD4NBJnntW3moTD/45FsVjSgpQCAADHAgAA8C0BAAL/////AAILAmlkBUludDMyAQAAAAIAAAAD + AAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsUAPm7bWVzc2FnZQZTdHJpbmciZm9ydHVu + ZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeURBIGNvbXB1dGVyIHNjaWVudGlzdCBpcyBzb21l + b25lIHdobyBmaXhlcyB0aGluZ3MgdGhhdCBhcmVuJ3QgYnJva2VuLjFBZnRlciBlbm91Z2ggZGVj + aW1hbCBwbGFjZXMsIG5vYm9keSBnaXZlcyBhIGRhbW4uP0EgYmFkIHJhbmRvbSBudW1iZXIgZ2Vu + ZXJhdG9yOiAxLAMAhTQuMzNlKzY3FgAXS7cA4HByb2dyYW0gZG9lcyB3ngDwAnlvdSB0ZWxsIGl0 + IHRvIGRvhQAWdBwARXdhbnQcAHAuSUVtYWNz9ACQYSBuaWNlIG9whwD1KGluZyBzeXN0ZW0sIGJ1 + dCBJIHByZWZlciBVTklYLiDigJQgVG9tIENocmlzdGFlbnNlbihBbnmPABB0igCgcnVucyByaWdo + dGAA029ic29sZXRlLj5BIGxoAeBvbmx5IGFzIHN0cm9uZwoA8gFpdHMgd2Vha2VzdCBsaW5rbADz + HkRvbmFsZCBLbnV0aB5GZWF0dXJlOiBBIGJ1ZyB3aXRoIHNlbmlvcml0eS4xQ9IB8gJzIG1ha2Ug + dmVyeSBmYXN0LAsAoGFjY3VyYXRlIG26APEQa2VzLk88c2NyaXB0PmFsZXJ0KCJUaGlzIHNob3Vs + ZDoB8AJiZSBkaXNwbGF5ZWQgaW4gYfoBUXdzZXIgMQDwAiBib3guIik7PC9zY3JpcHQ+ +# Packet 203 +peer1_5: !!binary | + AQCK4ZfoR2KBBKzMdIBzeLopglwAAABRAAAA8CcBAAL/////AAIBAmlkBUludDMyDAAAAAdtZXNz + YWdlBlN0cmluZyrjg5Xjg6zjg7zjg6Djg68JAPAIgq/jga7jg5njg7Pjg4Hjg57jg7zjgq8= +# Packet 205 +peer1_6: !!binary | + BgwCgAwAAAE= +# Packet 207 +peer1_7: !!binary | + Awy0BgwAAA== +# Packet 209 +peer1_8: !!binary | + AQCng6xs1Vx6fLWsRr3bhuIUghQAAAAKAAAAoAEAAv////8AAAA= +# Packet 211 +peer1_9: !!binary | + AwAAAAAA +# Packet 213 +peer1_10: !!binary | + CgABAAL/////AAgCCmV2ZW50X3RpbWUIRGF0ZVRpbWVZWV9gWVlfYBdldmVudF90aW1lX21pY3Jv + c2Vjb25kcwZVSW50MzLT0wkA7dMJAAlob3N0X25hbWUGU3RyaW5nBmJob3JzZQZiaG9yc2UIcXVl + cnlfaWQGU3RyaW5nJDcxMzdlMjIzLTJlMmYtNDM0Yy1iYTQyLTBkZDJiMzU5MjFkNiQ3MTM3ZTIy + My0yZTJmLTQzNGMtYmE0Mi0wZGQyYjM1OTIxZDYJdGhyZWFkX2lkBlVJbnQ2NI0EAAAAAAAAjQQA + AAAAAAAIcHJpb3JpdHkESW50OAYHBnNvdXJjZQZTdHJpbmcMZXhlY3V0ZVF1ZXJ5DU1lbW9yeVRy + YWNrZXIEdGV4dAZTdHJpbmdLUmVhZCAxMiByb3dzLCA4MjAuMDAgQiBpbiAwLjAwMTUyMTY1NSBz + ZWMuLCA3ODg2IHJvd3Mvc2VjLiwgNTI2LjI2IEtpQi9zZWMuJlBlYWsgbWVtb3J5IHVzYWdlIChm + b3IgcXVlcnkpOiAwLjAwIEIu +# Packet 215 +peer1_11: !!binary | + BQ== diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 2c643ea1b8..263882d8e5 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -132,3 +132,358 @@ INSERT INTO Fortune (id, message) VALUES (11, ''); INSERT INTO Fortune (id, message) VALUES (12, 'フレームワークのベンチマーク'); + + + + +--almost all possible supported types +set allow_suspicious_low_cardinality_types=true; +DROP TABLE IF EXISTS vertx_test_int8; +CREATE TABLE vertx_test_int8 ( + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint8; +CREATE TABLE vertx_test_uint8 ( + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int16; +CREATE TABLE vertx_test_int16 ( + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint16; +CREATE TABLE vertx_test_uint16 ( + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int32; +CREATE TABLE vertx_test_int32 ( + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint32; +CREATE TABLE vertx_test_uint32 ( + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int64; +CREATE TABLE vertx_test_int64 ( + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint64; +CREATE TABLE vertx_test_uint64 ( + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_string; +CREATE TABLE vertx_test_string ( + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_fixedstring; +CREATE TABLE vertx_test_fixedstring ( + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime; +CREATE TABLE vertx_test_datetime ( + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime64; +CREATE TABLE vertx_test_datetime64 ( + id Int8, + simple_t DateTime64, + nullable_t Nullable(DateTime64), + array_t Array(DateTime64), + array3_t Array(Array(Array(DateTime64))), + nullable_array_t Array(Nullable(DateTime64)), + nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_date; +CREATE TABLE vertx_test_date ( + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uuid; +CREATE TABLE vertx_test_uuid ( + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal32; +CREATE TABLE vertx_test_decimal32 ( + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal64; +CREATE TABLE vertx_test_decimal64 ( + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal128; +CREATE TABLE vertx_test_decimal128 ( + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum8; +CREATE TABLE vertx_test_enum8 ( + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum16; +CREATE TABLE vertx_test_enum16 ( + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float32; +CREATE TABLE vertx_test_float32 ( + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float64; +CREATE TABLE vertx_test_float64 ( + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv6; +CREATE TABLE vertx_test_ipv6 ( + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv4; +CREATE TABLE vertx_test_ipv4 ( + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = MergeTree() + ORDER BY (id); From c15b884028690e5b295958aa299b6d32e62392f0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 29 Mar 2021 00:04:03 +0300 Subject: [PATCH 115/176] added Array encoder Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 81 ++++++++----- .../impl/codec/columns/ArrayColumnWriter.java | 112 +++++++++++++++++- .../impl/codec/columns/ClickhouseColumn.java | 2 +- .../codec/columns/ClickhouseColumnReader.java | 9 +- .../codec/columns/LowCardinalityColumn.java | 11 ++ .../impl/codec/columns/UInt8Column.java | 6 +- .../impl/codec/columns/UInt8ColumnReader.java | 8 ++ .../clickhousenativeclient/AllTypesTest.java | 58 +++++---- .../BasicClickhouseTest.java | 41 +++++-- 9 files changed, 259 insertions(+), 69 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 53c8b9b53d..2bf12658f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -15,17 +15,18 @@ import java.util.Map; public class ArrayColumnReader extends ClickhouseColumnReader { - private static final Object[] EMPTY_ARRAY = new Object[0]; private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; + private final ClickhouseNativeColumnDescriptor elementTypeDescr; private Deque, Integer>> graphLevelDeque; private List> slicesSeries; private List curSlice; private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; - private ClickhouseColumnReader curNestedColumn; + private ClickhouseColumnReader nestedColumnReader; + private ClickhouseColumn nestedColumn; + private Class elementClass; private Integer nItems; private boolean resliced; private Object statePrefix; @@ -37,10 +38,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementaryDescr = elementaryDescr(columnDescriptor); + this.elementTypeDescr = elementaryDescr(descr); } - private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { ClickhouseNativeColumnDescriptor tmp = descr; while (tmp.isArray()) { tmp = tmp.getNestedDescr(); @@ -50,7 +51,7 @@ private ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnD @Override protected Object readStatePrefix(ClickhouseStreamDataSource in) { - ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementaryDescr, md).reader(0); + ClickhouseColumnReader statePrefixColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md).reader(0); if (statePrefix == null) { statePrefix = statePrefixColumn.readStatePrefix(in); } @@ -72,47 +73,63 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } readSlices(in); - if (curNestedColumn == null) { - curNestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md).reader(nItems); + if (nestedColumnReader == null) { + nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); + nestedColumnReader = nestedColumn.reader(nItems); + elementClass = nestedColumn.nullValue().getClass(); } if (curNestedColumnDescr.isNullable()) { - curNestedColumn.nullsMap = curNestedColumn.readNullsMap(in); + nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); } if (nItems > 0) { - assert nItems == curNestedColumn.nRows; - if (curNestedColumn.getClass() == LowCardinalityColumnReader.class) { - ((LowCardinalityColumnReader)curNestedColumn).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + assert nItems == nestedColumnReader.nRows; + if (nestedColumnReader.getClass() == LowCardinalityColumnReader.class) { + ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; } - if (curNestedColumn.isPartial()) { - curNestedColumn.itemsArray = curNestedColumn.readItemsAsObjects(in, null); - if (curNestedColumn.isPartial()) { + if (nestedColumnReader.isPartial()) { + nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, null); + if (nestedColumnReader.isPartial()) { return null; } } - if (elementaryDescr.jdbcType() == JDBCType.VARCHAR - || curNestedColumn.getClass() == Enum8ColumnReader.class - || curNestedColumn.getClass() == Enum16ColumnReader.class) { - return curNestedColumn.itemsArray; + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || nestedColumnReader.getClass() == Enum8ColumnReader.class + || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) curNestedColumn.itemsArray); + return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); } resliced = true; - return resliceIntoArray(EMPTY_ARRAY); + return resliceIntoArray((Object[])java.lang.reflect.Array.newInstance(elementClass, 0), elementClass); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Object[] objectsArray = (Object[]) this.itemsArray; - Object[] reslicedRet = resliced ? objectsArray : resliceIntoArray(asDesiredType(objectsArray, desired)); + Object[] reslicedRet; + if (resliced) { + reslicedRet = objectsArray; + } else { + Triplet> maybeRecoded = asDesiredType(objectsArray, desired); + if (maybeRecoded.left()) { + desired = maybeRecoded.right(); + } else { + desired = elementClass; + } + reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); + } return reslicedRet[rowIdx]; } - private Object[] asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementaryDescr.jdbcType() == JDBCType.VARCHAR) { - return stringifyByteArrays(src, md.getStringCharset()); + private Triplet> asDesiredType(Object[] src, Class desired) { + if (desired != null && desired.isArray()) { + desired = desired.getComponentType(); + } + if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { + return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); } - return src; + return new Triplet<>(false, src, desired); } private Object[] stringifyByteArrays(Object[] src, Charset charset) { @@ -126,19 +143,21 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { return ret; } - private Object[] resliceIntoArray(Object[] data) { + private Object[] resliceIntoArray(Object[] data, Class elementClass) { Object[] intermData = data; for (int i = slicesSeries.size() - 1; i >= 0; --i) { List slices = slicesSeries.get(i); Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = new Object[slices.size() - 1]; + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(data.getClass(), slices.size() - 1); + //Object[] newDataList = new Object[slices.size() - 1]; int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); int newSliceSz = slice.getValue() - slice.getKey(); - Object[] resliced = new Object[newSliceSz]; - System.arraycopy(intermData, slice.getKey(), resliced, 0, newSliceSz); - newDataList[tmpSliceIdx] = resliced; + //Object[] reslicedArray = new Object[newSliceSz]; + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(elementClass, newSliceSz); + System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); + newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; } intermData = newDataList; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index bac26ca684..3bcde33a44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -5,18 +5,124 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseColumn elementTypeColumn; public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { - super(data, descriptor, columnIndex); + super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; + this.elementTypeDescr = ArrayColumnReader.elementaryDescr(descriptor); + this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + writeSizes(sink, false, fromRow, toRow); + writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + } + + private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + localData = Collections.emptyList(); + } + ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); + if (localNested.isArray()) { + localData = flattenArrays(localData, fromRow, toRow, colIndex); + colIndex = 0; + fromRow = 0; + toRow = localData.size(); + } + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(localNested, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); + if (localWriter.getClass() == ArrayColumnWriter.class) { + ArrayColumnWriter localArrayWriter = (ArrayColumnWriter)localWriter; + localArrayWriter.writeElementData(sink, localDepth + 1, localNested, localData, fromRow, toRow, colIndex); + } else { + localWriter.serializeDataInternal(sink, fromRow, toRow); + } + } + + private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + localData = Collections.emptyList(); + } + ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); + if (localNested.isArray()) { + List flattened = flattenArrays(localData, fromRow, toRow, colIndex); + writeNullsInfo(sink, localDepth + 1, localNested, flattened, 0, flattened.size(), 0); + } else { + if (localNested.isNullable()) { + elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); + } + } + } + + private static List flattenArrays(List data, int fromRow, int toRow, int colIndex) { + List result = new ArrayList<>(); + for (int i = fromRow; i < toRow; ++i) { + Tuple row = data.get(i); + Object element = row.getValue(colIndex); + Class cls = element.getClass(); + if (cls.isArray() && cls != byte[].class) { + Object[] arr = (Object[])element; + List tuples = Arrays.stream(arr).map(Tuple::of).collect(Collectors.toList()); + result.addAll(tuples); + } else { + result.add(Tuple.of(element)); + } + } + return result; + } + + private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, int fromRow, int toRow) { + int nRows = toRow - fromRow; + ClickhouseNativeColumnDescriptor column = columnDescriptor; + List sizes = new ArrayList<>(); + if (writeTotalSize) { + sizes.add(nRows); + } + + List values = data; + int localColumnIndex = columnIndex; + ClickhouseNativeColumnDescriptor nestedColumn; + while ((nestedColumn = column.getNestedDescr()).isArray()) { + int offset = 0; + List newValue = new ArrayList<>(); + for (int i = fromRow; i < toRow; ++i) { + Object valObj = values.get(i); + Object[] val = (Object[]) maybeUnwrapTuple(valObj, localColumnIndex); + offset += val.length; + sizes.add(offset); + List newTuples = Arrays.asList(val); + newValue.addAll(newTuples); + } + values = newValue; + column = nestedColumn; + localColumnIndex = 0; + fromRow = 0; + toRow = newValue.size(); + } + sink.ensureWritable(sizes.size() * Long.BYTES); + for (Integer size : sizes) { + sink.writeLongLE(size); + } + } + + protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + elementTypeColumn.writer(data, 0).serializeStatePrefix(sink, fromRow, toRow); + } + + private static Object maybeUnwrapTuple(Object val, int columnIndex) { + return val instanceof Tuple ? ((Tuple)val).getValue(columnIndex) : val; } @Override @@ -30,4 +136,8 @@ protected void serializeDataNull(ClickhouseStreamDataSink sink) { @Override protected void serializeNullsMap(ClickhouseStreamDataSink sink, int fromRow, int toRow) { } + + @Override + protected void ensureCapacity(ClickhouseStreamDataSink sink, int fromRow, int toRow) { + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index e2a89a19cb..b40a949c40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -17,6 +17,6 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); public Object nullValue() { - throw new IllegalStateException("not implemented"); + throw new IllegalStateException("not implemented for " + this.getClass()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index a75bcefcae..73d22b0782 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -66,8 +66,15 @@ protected Object[] asObjectsArray(Class desired) { return (Object[]) itemsArray; } + protected Object[] allocateArray(Class desired, int length) { + if (desired == null) { + return new Object[length]; + } + return (Object[]) java.lang.reflect.Array.newInstance(desired, length); + } + protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = new Object[nRows]; + Object[] ret = allocateArray(desired, nRows); for (int i = 0; i < nRows; ++i) { ret[i] = getElement(i, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index e2890063df..123572f506 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -8,6 +8,8 @@ public class LowCardinalityColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; + private Object nullValue; + public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; @@ -22,4 +24,13 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new LowCardinalityColumnWriter(data, descriptor, md, columnIndex); } + + @Override + public Object nullValue() { + if (nullValue == null) { + ClickhouseNativeColumnDescriptor nested = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); + nullValue = ClickhouseColumns.columnForSpec(nested, md).nullValue(); + } + return nullValue; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 194a6b23bf..8ec47c591e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -22,6 +22,10 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return descriptor.isUnsigned() ? Short.valueOf((short) 0) : Byte.valueOf((byte) 0); + if (descriptor.isUnsigned()) { + return (short) 0; + } else { + return (byte) 0; + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 063e26efb0..26b4896dd6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -43,6 +43,14 @@ protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } + @Override + protected Object[] allocateArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + return new Short[length]; + } + return new Byte[length]; + } + @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index d535bc7f98..e5a4a9a1a0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -45,22 +45,27 @@ public void teardDown(TestContext ctx) { @Test public void testUInt8(TestContext ctx) { - doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0)); + doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0), + Arrays.asList(new Short[]{}, new Short[]{0, 2, null, 3, 255}, new Short[]{255, 0, null}, new Short[]{0, null, 0})); } @Test public void testInt8(TestContext ctx) { - doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0)); + doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0), + Arrays.asList(new Byte[]{}, new Byte[]{0, 2, null, 3, Byte.MAX_VALUE}, new Byte[]{Byte.MIN_VALUE, 0, null}, new Byte[]{0, null, 0}, new Byte[]{Byte.MAX_VALUE, Byte.MIN_VALUE})); } @Test public void testString(TestContext ctx) { - doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0")); + doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0"), + Arrays.asList(new String[]{}, new String[]{"val1", "", null, "val2"}, new String[]{null, "", null}, new String[]{null})); } private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, Object nullValue, - List regularValues) { + List regularValues, + List nullableArrayValues) { + ctx.assertEquals(regularValues.size(), nullableArrayValues.size()); String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -69,7 +74,7 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - List batch = buildBatch(columnsList, nullValue, regularValues); + List batch = buildBatch(columnsList, nullValue, regularValues, nullableArrayValues); conn.preparedQuery(query) .executeBatch(batch, ctx.asyncAssertSuccess( res2 -> { @@ -83,7 +88,8 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b Row row = rows.next(); for (String columnName : columnsList) { Object expectedValue = regularValues.get(rowNo); - expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue); + Object expectedNullArrayValue = nullableArrayValues.get(rowNo); + expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue, expectedNullArrayValue); if (columnName.equalsIgnoreCase("id")) { compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); } else { @@ -102,20 +108,21 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b } private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t")); + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "nullable_array_t")); if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t")); + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "nullable_array_lc_t")); } return columns; } - private List buildBatch(List columnsList, Object nullValue, List regularValues) { + private List buildBatch(List columnsList, Object nullValue, List regularValues, List nullableArrayValues) { List batch = new ArrayList<>(regularValues.size()); for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { Object regularValue = regularValues.get(rowNo); + Object nullableArrayValue = nullableArrayValues.get(rowNo); List vals = new ArrayList<>(columnsList.size()); for (String columnName : columnsList) { - Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue); + Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue, nullableArrayValue); vals.add(val); } batch.add(Tuple.tuple(vals)); @@ -123,30 +130,37 @@ private List buildBatch(List columnsList, Object nullValue, List< return batch; } - private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue) { + private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue, Object nullableArrayValue) { Object val; if (columnName.equalsIgnoreCase("id")) { val = rowNo; - } else { + } else if (columnName.startsWith("nullable_array_")) { + val = nullableArrayValue; + } else if (columnName.equals("simple_t") || columnName.equals("simple_lc_t")) { if (regularValue == null) { - if (columnName.startsWith("nullable_")) { - if (columnName.startsWith("nullable_array")) { - throw new IllegalArgumentException("not implemented"); - } else { - val = null; - } - } else { - val = nullValue; - } + val = nullValue; } else { val = regularValue; } + } else if (columnName.equals("nullable_t") || columnName.equals("nullable_lc_t")) { + val = regularValue; + } else { + throw new IllegalStateException("not implemented for " + columnName); } return val; } private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { + boolean isArray = expected != null && expected.getClass().isArray(); + if (isArray) { + desiredType = expected.getClass(); + } Object val = row.get(desiredType, colName); - ctx.assertEquals(val, expected, "row " + colName + " mismatch; rowNo: " + rowNo); + if (isArray) { + boolean equals = Arrays.deepEquals((Object[]) val, (Object[]) expected); + ctx.assertTrue(equals, colName + " row " + " mismatch; rowNo: " + rowNo); + } else { + ctx.assertEquals(val, expected, colName + "row " + " mismatch; rowNo: " + rowNo); + } } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 485ea6138f..8291a5b32d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -60,11 +60,10 @@ public void loginFailureTest(TestContext ctx) { @Test public void testIntegerRanges(TestContext ctx) { - //TODO: LowCardinality List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") .flatMap(el -> "Int128".equals(el) ? Stream.of(el, "Nullable(" + el + ")") - : Stream.of(el, "U" + el, "Nullable(" + el + ")", "Nullable(U" + el + ")")) + : Stream.of(el, "U" + el, "LowCardinality(Nullable(" + el + "))", "Nullable(U" + el + ")", "LowCardinality(Nullable(U" + el + "))")) .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() @@ -102,29 +101,47 @@ private void scheduleIntTypeQuery(TestContext ctx, Iterator expected) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { - ctx.assertEquals(res1.size(), 1); - Row row = res1.iterator().next(); - Object[] actual = (Object[])row.getValue(0); - ctx.assertEquals(true, Arrays.deepEquals(expected, actual)); + ctx.assertEquals(res1.size(), expected.size()); + int i = 0; + for (Row row : res1) { + Object[] expectedVal = expected.get(i); + Object[] actualVal = (Object[]) row.getValue(0); + ctx.assertEquals(true, Arrays.deepEquals(expectedVal, actualVal)); + ++i; + } conn.close(); }) ); From 233fd4fe40b4e65fc54985b509a44778111c8c6d Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 30 Mar 2021 21:32:07 +0300 Subject: [PATCH 116/176] added DateColumnWriter and DateTimeColumnWriter Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 7 +- .../ClickhouseNativeDatabaseMetadata.java | 22 +- .../impl/codec/DatabaseMetadataReader.java | 25 ++- .../impl/codec/InitCommandCodec.java | 2 +- .../impl/codec/columns/ArrayColumnReader.java | 29 ++- .../impl/codec/columns/ClickhouseColumns.java | 6 +- .../impl/codec/columns/DateColumn.java | 9 +- .../impl/codec/columns/DateColumnReader.java | 5 +- .../impl/codec/columns/DateColumnWriter.java | 30 +++ .../impl/codec/columns/DateTimeColumn.java | 11 +- .../codec/columns/DateTimeColumnReader.java | 2 + .../codec/columns/DateTimeColumnWriter.java | 35 +++ .../columns/LowCardinalityColumnWriter.java | 2 +- .../codec/columns/StringColumnReader.java | 4 +- .../impl/codec/columns/UInt16Column.java | 9 + .../clickhousenativeclient/AllTypesTest.java | 211 +++++++++++------- .../ClickhouseResource.java | 7 +- .../PacketReaderReplayTest.java | 2 +- .../tck/ClickhouseNativeConnectionTest.java | 2 +- ...ickhouseNativePreparedQueryCachedTest.java | 2 +- 20 files changed, 297 insertions(+), 125 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 6476fe8978..a76fff7108 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -26,7 +26,7 @@ public class ClickhouseConstants { public static final int CLIENT_VERSION_PATCH = 2; public static final int CLIENT_REVISION = 54441; - public static final String OPTION_CLIENT_NAME = "application_name"; + public static final String OPTION_APPLICATION_NAME = "application_name"; public static final String OPTION_INITIAL_USER = "initial_user"; public static final String OPTION_INITIAL_QUERY_ID = "initial_query_id"; public static final String OPTION_INITIAL_ADDRESS = "initial_address"; @@ -34,6 +34,7 @@ public class ClickhouseConstants { public static final String OPTION_INITIAL_HOSTNAME = "initial_hostname"; public static final String OPTION_COMPRESSOR = "compressor"; public static final String OPTION_STRING_CHARSET = "string_charset"; + public static final String OPTION_DEFAULT_ZONE_ID = "default_zone_id"; public static final String OPTION_YEAR_DURATION = "days_in_year"; public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; public static final String OPTION_MONTH_DURATION = "days_in_month"; @@ -45,7 +46,7 @@ public class ClickhouseConstants { public static final short COMPRESSION_METHOD_ZSTD = 0x90; public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( - OPTION_CLIENT_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, - OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, + OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, + OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, OPTION_MONTH_DURATION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 7951322b8a..a2f5164f24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -15,7 +15,8 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final int revision; private final int patchVersion; private final String displayName; - private final ZoneId timezone; + private final ZoneId serverZoneId; + private final ZoneId defaultZoneId; private final String fullClientName; private final Charset stringCharset; private final Map properties; @@ -24,9 +25,9 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration monthDuration; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, - int patchVersion, String displayName, ZoneId timezone, String fullClientName, - Map properties, Charset stringCharset, Duration yearDuration, - Duration quarterDuration, Duration monthDuration) { + int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, + String fullClientName, Map properties, Charset stringCharset, + Duration yearDuration, Duration quarterDuration, Duration monthDuration) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -34,7 +35,8 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.revision = revision; this.patchVersion = patchVersion; this.displayName = displayName; - this.timezone = timezone; + this.serverZoneId = serverZoneId; + this.defaultZoneId = defaultZoneId; this.fullClientName = fullClientName; this.properties = properties; this.stringCharset = stringCharset; @@ -75,8 +77,12 @@ public String getDisplayName() { return displayName; } - public ZoneId getZoneId() { - return timezone; + public ZoneId getServerZoneId() { + return serverZoneId; + } + + public ZoneId getDefaultZoneId() { + return defaultZoneId; } public String getFullClientName() { @@ -113,7 +119,7 @@ public String toString() { ", revision=" + revision + ", patchVersion=" + patchVersion + ", displayName='" + displayName + '\'' + - ", timezone='" + timezone + '\'' + + ", timezone='" + serverZoneId + '\'' + '}'; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 3d219883c3..849d4a038b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -9,8 +9,6 @@ import java.time.ZoneId; import java.util.Map; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; - public class DatabaseMetadataReader { private final String fullClientName; private final Map properties; @@ -19,7 +17,7 @@ public class DatabaseMetadataReader { private Integer major; private Integer minor; private Integer revision; - private String timezone; + private String serverZoneIdName; private String displayName; private Integer patchVersion; @@ -55,9 +53,9 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { return null; } } - if (timezone == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - timezone = ByteBufUtils.readPascalString(in); - if (timezone == null) { + if (serverZoneIdName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { + serverZoneIdName = ByteBufUtils.readPascalString(in); + if (serverZoneIdName == null) { return null; } } @@ -81,12 +79,25 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { int daysInYear = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_YEAR_DURATION, "365")); int daysInQuarter = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_QUARTER_DURATION, "120")); int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); + ZoneId serverZoneId = serverZoneIdName == null ? null : ZoneId.of(serverZoneIdName); + ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, timezone == null ? null : ZoneId.of(timezone), fullClientName, properties, charset(), + major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); } + private ZoneId getDefaultZoneId(ZoneId serverZoneId) { + String defaultZoneId = properties.get(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID); + if (defaultZoneId == null || "from_server".equals(defaultZoneId)) { + return serverZoneId; + } else if ("system_default".equals(defaultZoneId)) { + return ZoneId.systemDefault(); + } else { + return ZoneId.of(defaultZoneId); + } + } + private Charset charset() { String desiredCharset = properties.get(ClickhouseConstants.OPTION_STRING_CHARSET); if (desiredCharset == null || "system_default".equals(desiredCharset)) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 32f120d315..6f10258d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -28,7 +28,7 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBuf buf = allocateBuffer(); ByteBufUtils.writeULeb128(ClientPacketTypes.HELLO, buf); fullClientName = "ClickHouse " + cmd.properties() - .getOrDefault(ClickhouseConstants.OPTION_CLIENT_NAME, "vertx-sql"); + .getOrDefault(ClickhouseConstants.OPTION_APPLICATION_NAME, "vertx-sql"); ByteBufUtils.writePascalString(fullClientName, buf); ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 2bf12658f3..19ab74d1c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -87,7 +87,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; } if (nestedColumnReader.isPartial()) { - nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, null); + nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); if (nestedColumnReader.isPartial()) { return null; } @@ -111,6 +111,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { if (resliced) { reslicedRet = objectsArray; } else { + desired = maybeUnwrapArrayElementType(desired); Triplet> maybeRecoded = asDesiredType(objectsArray, desired); if (maybeRecoded.left()) { desired = maybeRecoded.right(); @@ -122,10 +123,16 @@ protected Object getElementInternal(int rowIdx, Class desired) { return reslicedRet[rowIdx]; } - private Triplet> asDesiredType(Object[] src, Class desired) { - if (desired != null && desired.isArray()) { - desired = desired.getComponentType(); + private Class maybeUnwrapArrayElementType(Class desired) { + if (desired != null) { + while (desired.isArray() && desired != byte[].class) { + desired = desired.getComponentType(); + } } + return desired; + } + + private Triplet> asDesiredType(Object[] src, Class desired) { if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); } @@ -133,7 +140,7 @@ private Triplet> asDesiredType(Object[] src, Class elementClass) { for (int i = slicesSeries.size() - 1; i >= 0; --i) { List slices = slicesSeries.get(i); Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(data.getClass(), slices.size() - 1); - //Object[] newDataList = new Object[slices.size() - 1]; + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { Map.Entry slice = paired.next(); int newSliceSz = slice.getValue() - slice.getKey(); - //Object[] reslicedArray = new Object[newSliceSz]; - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(elementClass, newSliceSz); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass().getComponentType(), newSliceSz); System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; @@ -218,4 +223,10 @@ private boolean readSlice(ClickhouseStreamDataSource in, Triplet data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new DateColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return DateColumnReader.MIN_VALUE; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index bc9310b0d7..cd26e98987 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -5,7 +5,8 @@ import java.time.LocalDate; public class DateColumnReader extends UInt16ColumnReader { - public static final LocalDate MIN_DATE = LocalDate.of(1970, 1, 1); + public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); + public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); @@ -14,6 +15,6 @@ public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescri @Override protected Object getElementInternal(int rowIdx, Class desired) { Integer offset = (Integer) super.getElementInternal(rowIdx, desired); - return MIN_DATE.plusDays(offset); + return MIN_VALUE.plusDays(offset); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java new file mode 100644 index 0000000000..d51d71602c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -0,0 +1,30 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.List; + +public class DateColumnWriter extends UInt16ColumnWriter { + public static final long MAX_VALUE = 65535; + + public DateColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + LocalDate dateVal = (LocalDate) val; + long daysDelta = ChronoUnit.DAYS.between(DateColumnReader.MIN_VALUE, dateVal); + if (daysDelta < 0) { + throw new IllegalArgumentException("date " + dateVal + " is too small; smallest possible date: " + DateColumnReader.MIN_VALUE); + } + if (daysDelta > MAX_VALUE) { + throw new IllegalArgumentException("date " + dateVal + " is too big; largest possible date: " + DateColumnReader.MAX_VALUE); + } + super.serializeDataElement(sink, daysDelta); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 70922b259c..e31c2f49b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -3,15 +3,19 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.time.Instant; +import java.time.OffsetDateTime; import java.time.ZoneId; import java.util.List; public class DateTimeColumn extends ClickhouseColumn { private final ZoneId zoneId; + private final OffsetDateTime nullValue; public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; + this.nullValue = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); } @Override @@ -21,6 +25,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new DateTimeColumnWriter(data, descriptor, zoneId, columnIndex); + } + + @Override + public Object nullValue() { + return nullValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 9b384bb903..fd88ebf41d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -8,6 +8,8 @@ import java.time.ZoneId; public class DateTimeColumnReader extends ClickhouseColumnReader { + public static final long MAX_EPOCH_SECOND = 4294967295L; + public static final int ELEMENT_SIZE = 4; private final ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java new file mode 100644 index 0000000000..58e72a3c9f --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.List; + +public class DateTimeColumnWriter extends ClickhouseColumnWriter { + public final OffsetDateTime maxValue; + + public DateTimeColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { + super(data, columnDescriptor, columnIndex); + this.maxValue = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + OffsetDateTime dateTime = (OffsetDateTime) val; + long epochSecond = dateTime.toInstant().getEpochSecond(); + if (epochSecond > DateTimeColumnReader.MAX_EPOCH_SECOND) { + throw new IllegalArgumentException("value " + dateTime + " is too big; max epoch seconds: " + maxValue); + } + sink.writeIntLE((int) epochSecond); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeIntLE(0); + } + +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 878d404699..b8c5fc7091 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -137,7 +137,7 @@ public static void main(String[] args) { List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", - 0, 0,0, 0, "dname", ZoneId.systemDefault(), "client", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 02b503ceb4..2a9e5555b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -11,7 +11,7 @@ public class StringColumnReader extends ClickhouseColumnReader { private Integer curStrLength; - private List elements; + private List elements; private final Charset charset; protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { @@ -43,7 +43,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { elements.add(stringBytes); curStrLength = null; } - Object[] ret = elements.toArray(); + Object[] ret = elements.toArray(new byte[elements.size()][]); elements = null; return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 322fbf24f7..b294dbdc46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -19,4 +19,13 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt16ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + if (descriptor.isUnsigned()) { + return (int) 0; + } else { + return (short) 0; + } + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index e5a4a9a1a0..de334c0cf1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -2,13 +2,14 @@ import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; import org.junit.After; import org.junit.Before; @@ -16,6 +17,8 @@ import org.junit.Test; import org.junit.runner.RunWith; +import java.nio.charset.StandardCharsets; +import java.time.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -43,29 +46,120 @@ public void teardDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "nullable_array_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "nullable_array_lc_t")); + } + return columns; + } + @Test public void testUInt8(TestContext ctx) { - doTest(ctx, "uint8", Short.class, true, (short) 0, Arrays.asList((short)0, null, (short)255, (short)0), - Arrays.asList(new Short[]{}, new Short[]{0, 2, null, 3, 255}, new Short[]{255, 0, null}, new Short[]{0, null, 0})); + List batch = Arrays.asList( + Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), + Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), + Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), + Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) + ); + doTest(ctx, "uint8", Short.class, true, batch); } @Test public void testInt8(TestContext ctx) { - doTest(ctx, "int8", Byte.class, true, (byte) 0, Arrays.asList((byte)-128, (byte)0, null, (byte)127, (byte)0), - Arrays.asList(new Byte[]{}, new Byte[]{0, 2, null, 3, Byte.MAX_VALUE}, new Byte[]{Byte.MIN_VALUE, 0, null}, new Byte[]{0, null, 0}, new Byte[]{Byte.MAX_VALUE, Byte.MIN_VALUE})); + List batch = Arrays.asList( + Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), + Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), + Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), + Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) + ); + doTest(ctx, "int8", Byte.class, true, batch); } @Test public void testString(TestContext ctx) { - doTest(ctx, "string", String.class, true, "", Arrays.asList("val1", null, "val2", "0"), - Arrays.asList(new String[]{}, new String[]{"val1", "", null, "val2"}, new String[]{null, "", null}, new String[]{null})); + String v2 = "val2"; + String v_1 = "val_1"; + String v4 = "val_4"; + String v5 = "val5"; + String v3 = "val3"; + String v1 = "val1"; + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), + Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), + Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), + Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) + ); + doTest(ctx, "string", String.class, true, batch); + } + + @Test + public void testBlob(TestContext ctx) { + byte[] v2 = b("val2"); + byte[] em = b(""); + byte[] v3 = b("val3"); + byte[] v_4 = b("val_4"); + byte[] v1 = b("val1"); + byte[] v4 = b("val4"); + byte[] v_1 = b("val_1"); + byte[] z = b("z"); + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new byte[][]{}, new byte[][]{}, em, em, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)2, em, null, new byte[][]{v3, v1, em, z, v4}, new byte[][]{v3, v1, null, em, z, v3}, em, null, new byte[][]{em, v1, em, v2, v2}, new byte[][]{em, v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ), + Tuple.of((byte)4, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, v4}, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, em} ), + Tuple.of((byte)5, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ) + ); + doTest(ctx, "string", byte[].class, true, batch); + } + + @Test + public void testDate(TestContext ctx) { + LocalDate dt = LocalDate.of(2020, 3, 29); + LocalDate d2 = dt.plusDays(2); + LocalDate d3 = dt.plusDays(3); + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), + Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) + ); + doTest(ctx, "date", LocalDate.class, true, batch); + } + + @Test + public void testDateTime(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), + Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) + ); + doTest(ctx, "datetime", OffsetDateTime.class, true, batch); + } + + private static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, - Object nullValue, - List regularValues, - List nullableArrayValues) { - ctx.assertEquals(regularValues.size(), nullableArrayValues.size()); + List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -74,93 +168,48 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - List batch = buildBatch(columnsList, nullValue, regularValues, nullableArrayValues); conn.preparedQuery(query) .executeBatch(batch, ctx.asyncAssertSuccess( res2 -> { Sleep.sleepOrThrow(); conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { - ctx.assertEquals(res3.size(), regularValues.size(), "row count mismatch"); - RowIterator rows = res3.iterator(); - int rowNo = 0; - while (rows.hasNext()) { - Row row = rows.next(); - for (String columnName : columnsList) { - Object expectedValue = regularValues.get(rowNo); - Object expectedNullArrayValue = nullableArrayValues.get(rowNo); - expectedValue = buildColumnValue(rowNo, columnName, nullValue, expectedValue, expectedNullArrayValue); - if (columnName.equalsIgnoreCase("id")) { - compare(ctx, row, rowNo, columnName, Byte.class, ((Number) expectedValue).byteValue()); + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Tuple batchRow = batch.get(batchIdx); + Object id = row.getValue("id"); + for (int colIdx = 0; colIdx < batchRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedValue = batchRow.getValue(colIdx); + Class colType = expectedValue == null ? desiredType : expectedValue.getClass(); + Object actualValue; + if ("id".equals(colName)) { + actualValue = row.getValue(colName); } else { - compare(ctx, row, rowNo, columnName, desiredType, expectedValue); + actualValue = row.get(colType, colName); } + compareValues(ctx, id, colName, colType, expectedValue, actualValue); } - ++rowNo; + ++batchIdx; } - conn.close(); - } - )); - } - )); + })); + })); })); })); } - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "nullable_array_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "nullable_array_lc_t")); - } - return columns; - } - - private List buildBatch(List columnsList, Object nullValue, List regularValues, List nullableArrayValues) { - List batch = new ArrayList<>(regularValues.size()); - for (int rowNo = 0; rowNo < regularValues.size(); ++rowNo) { - Object regularValue = regularValues.get(rowNo); - Object nullableArrayValue = nullableArrayValues.get(rowNo); - List vals = new ArrayList<>(columnsList.size()); - for (String columnName : columnsList) { - Object val = buildColumnValue(rowNo, columnName, nullValue, regularValue, nullableArrayValue); - vals.add(val); - } - batch.add(Tuple.tuple(vals)); - } - return batch; - } - - private Object buildColumnValue(int rowNo, String columnName, Object nullValue, Object regularValue, Object nullableArrayValue) { - Object val; - if (columnName.equalsIgnoreCase("id")) { - val = rowNo; - } else if (columnName.startsWith("nullable_array_")) { - val = nullableArrayValue; - } else if (columnName.equals("simple_t") || columnName.equals("simple_lc_t")) { - if (regularValue == null) { - val = nullValue; + private void compareValues(TestContext ctx, Object id, String colName, Class colType, Object expectedValue, Object actualValue) { + if (colType.isArray()) { + boolean equals; + if (colType == byte[].class) { + equals = Arrays.equals((byte[]) expectedValue, (byte[]) actualValue); } else { - val = regularValue; + equals = Arrays.deepEquals((Object[]) expectedValue, (Object[]) actualValue); } - } else if (columnName.equals("nullable_t") || columnName.equals("nullable_lc_t")) { - val = regularValue; - } else { - throw new IllegalStateException("not implemented for " + columnName); - } - return val; - } - - private void compare(TestContext ctx, Row row, int rowNo, String colName, Class desiredType, Object expected) { - boolean isArray = expected != null && expected.getClass().isArray(); - if (isArray) { - desiredType = expected.getClass(); - } - Object val = row.get(desiredType, colName); - if (isArray) { - boolean equals = Arrays.deepEquals((Object[]) val, (Object[]) expected); - ctx.assertTrue(equals, colName + " row " + " mismatch; rowNo: " + rowNo); + ctx.assertTrue(equals, colName + " byte row mismatch; id = " + id); } else { - ctx.assertEquals(val, expected, colName + "row " + " mismatch; rowNo: " + rowNo); + ctx.assertEquals(expectedValue, actualValue, colName + " row mismatch; id = " + id); } } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 5fb6905bd3..4f96443285 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -31,8 +31,11 @@ protected void before() throws Throwable { .setUser(server.getUsername()) .setPassword(server.getPassword()) .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, "java-driver") - .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "java-driver") + .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") + .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo"); + //.addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe%2FOslo"); //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index be31aed9ee..53eda45627 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -114,7 +114,7 @@ private void readConnIteraction(PooledByteBufAllocator allocator, String fullNam private static Map buildProperties(boolean withCompression) { Map props = new HashMap<>(); - props.put(ClickhouseConstants.OPTION_CLIENT_NAME, "jython-driver"); + props.put(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver"); if (withCompression) { props.put(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 77394f3de7..0f64148a5a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -24,7 +24,7 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { public void setUp() throws Exception { super.setUp(); options = new ClickhouseNativeConnectOptions(rule.options()); - options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index 5826bcf2bb..278295c28c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -25,7 +25,7 @@ public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCached @Override protected void initConnector() { options = new ClickhouseNativeConnectOptions(rule.options()); - options.addProperty(ClickhouseConstants.OPTION_CLIENT_NAME, + options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } From 4c6f94470d8d6e98fe4596436e61afecae4730ee Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 1 Apr 2021 00:33:33 +0300 Subject: [PATCH 117/176] reworked AllTypesTest to use ColumnChecker Signed-off-by: vladimir --- .../codec/columns/StringColumnReader.java | 1 + .../clickhousenativeclient/AllTypesTest.java | 143 ++++++++++++------ 2 files changed, 101 insertions(+), 43 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 2a9e5555b1..fafbfd0881 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -32,6 +32,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } + //no dedicated BLOB type support; will encode into String if user did not request byte[].class byte[] stringBytes; if (nullsMap == null || !nullsMap.get(elements.size())) { stringBytes = new byte[curStrLength]; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java index de334c0cf1..6c03962358 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java @@ -9,12 +9,10 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.*; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; @@ -22,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; @RunWith(VertxUnitRunner.class) public class AllTypesTest { @@ -62,7 +61,7 @@ public void testUInt8(TestContext ctx) { Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) ); - doTest(ctx, "uint8", Short.class, true, batch); + doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); } @Test @@ -73,7 +72,7 @@ public void testInt8(TestContext ctx) { Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) ); - doTest(ctx, "int8", Byte.class, true, batch); + doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); } @Test @@ -91,27 +90,49 @@ public void testString(TestContext ctx) { Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) ); - doTest(ctx, "string", String.class, true, batch); + doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); } @Test public void testBlob(TestContext ctx) { + byte[] v1 = b("val1"); byte[] v2 = b("val2"); - byte[] em = b(""); byte[] v3 = b("val3"); - byte[] v_4 = b("val_4"); - byte[] v1 = b("val1"); byte[] v4 = b("val4"); - byte[] v_1 = b("val_1"); - byte[] z = b("z"); + byte[] v5 = b("value5"); + byte[] v6 = b("value_value_6"); + byte[] nv = b(""); + byte[] mn = b(""); + byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); + List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new byte[][]{}, new byte[][]{}, em, em, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)2, em, null, new byte[][]{v3, v1, em, z, v4}, new byte[][]{v3, v1, null, em, z, v3}, em, null, new byte[][]{em, v1, em, v2, v2}, new byte[][]{em, v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ), - Tuple.of((byte)4, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, v4}, em, em, new byte[][]{em, em, em}, new byte[][]{em, null, em} ), - Tuple.of((byte)5, v_1, v_4, new byte[][]{v4, em, em}, new byte[][]{v3, em, null}, v4, v4, new byte[][]{v1, em, em}, new byte[][]{v2, em, null} ) + Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), + Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), + Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), + Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), + Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), + Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), + Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), + Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), + Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), + Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), + Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), + Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), + Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, v4}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, nv} ), + Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), + Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ), + Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ) ); - doTest(ctx, "string", byte[].class, true, batch); + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); } @Test @@ -130,7 +151,7 @@ public void testDate(TestContext ctx) { Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) ); - doTest(ctx, "date", LocalDate.class, true, batch); + doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); } @Test @@ -151,15 +172,15 @@ public void testDateTime(TestContext ctx) { Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) ); - doTest(ctx, "datetime", OffsetDateTime.class, true, batch); + doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); } private static byte[] b(String s) { return s.getBytes(StandardCharsets.UTF_8); } - private void doTest(TestContext ctx, String tableSuffix, Class desiredType, boolean hasLowCardinality, - List batch) { + private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -177,19 +198,11 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); int batchIdx = 0; for (Row row : res3) { - Tuple batchRow = batch.get(batchIdx); - Object id = row.getValue("id"); - for (int colIdx = 0; colIdx < batchRow.size(); ++colIdx) { + Tuple expectedRow = batch.get(batchIdx); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { String colName = columnsList.get(colIdx); - Object expectedValue = batchRow.getValue(colIdx); - Class colType = expectedValue == null ? desiredType : expectedValue.getClass(); - Object actualValue; - if ("id".equals(colName)) { - actualValue = row.getValue(colName); - } else { - actualValue = row.get(colType, colName); - } - compareValues(ctx, id, colName, colType, expectedValue, actualValue); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); } ++batchIdx; } @@ -198,18 +211,62 @@ private void doTest(TestContext ctx, String tableSuffix, Class desiredType, b })); })); } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } - private void compareValues(TestContext ctx, Object id, String colName, Class colType, Object expectedValue, Object actualValue) { - if (colType.isArray()) { - boolean equals; - if (colType == byte[].class) { - equals = Arrays.equals((byte[]) expectedValue, (byte[]) actualValue); + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provided dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } } else { - equals = Arrays.deepEquals((Object[]) expectedValue, (Object[]) actualValue); + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } } - ctx.assertTrue(equals, colName + " byte row mismatch; id = " + id); - } else { - ctx.assertEquals(expectedValue, actualValue, colName + " row mismatch; id = " + id); } + checker.forRow(row); } } From 41c68fd1dca01e01362229c46d029bd3251b354f Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 16:19:20 +0300 Subject: [PATCH 118/176] reworked ArrayColumnReader Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 110 +++---- .../codec/columns/ClickhouseColumnReader.java | 6 - .../columns/LowCardinalityColumnWriter.java | 24 -- .../codec/columns/StringColumnReader.java | 8 +- .../codec/columns/UInt32ColumnReader.java | 8 - .../impl/codec/columns/UInt8ColumnReader.java | 8 - .../clickhousenativeclient/AllTypesTest.java | 272 ----------------- .../ArraySerDesTest.java | 73 +++++ .../alltypes/AllTypesTest.java | 283 ++++++++++++++++++ 9 files changed, 399 insertions(+), 393 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 19ab74d1c1..29658b321c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -4,12 +4,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import java.lang.reflect.Array; import java.nio.charset.Charset; import java.sql.JDBCType; -import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -19,10 +18,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private Deque, Integer>> graphLevelDeque; private List> slicesSeries; - private List curSlice; - private Integer curDepth; private ClickhouseNativeColumnDescriptor curNestedColumnDescr; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; @@ -30,10 +26,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer nItems; private boolean resliced; private Object statePrefix; - private boolean hasFirstSlice; - private int sliceIdxAtCurrentDepth; - private int prevSliceSizeAtCurrentDepth = 0; - private Triplet, Integer> slicesAtCurrentDepth; + + private Integer curLevelSliceSize; + private List curLevelSlice; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); @@ -60,19 +55,17 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (graphLevelDeque == null) { - graphLevelDeque = new ArrayDeque<>(); - graphLevelDeque.add(new Triplet<>(columnDescriptor, Collections.singletonList(nRows), 0)); + if (nItems == null) { slicesSeries = new ArrayList<>(); - curSlice = new ArrayList<>(); - curDepth = 0; curNestedColumnDescr = columnDescriptor.getNestedDescr(); nItems = 0; } if (statePrefix == null) { return null; } - readSlices(in); + if (curNestedColumnDescr.isArray()) { + readSlices(in); + } if (nestedColumnReader == null) { nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); nestedColumnReader = nestedColumn.reader(nItems); @@ -100,8 +93,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { resliced = true; return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); } + Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || nestedColumnReader.getClass() == Enum8ColumnReader.class + || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + return emptyData; + } resliced = true; - return resliceIntoArray((Object[])java.lang.reflect.Array.newInstance(elementClass, 0), elementClass); + return resliceIntoArray(emptyData, elementClass); } @Override @@ -118,6 +117,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } + //reslicing for every row can be slow (for BLOBS and Enums if recoding requested), maybe store resliced array into Phantom/Weak reference reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } return reslicedRet[rowIdx]; @@ -167,66 +167,40 @@ private Object[] resliceIntoArray(Object[] data, Class elementClass) { } intermData = newDataList; } - return intermData; + return (Object[]) intermData[0]; } private void readSlices(ClickhouseStreamDataSource in) { - if (!hasFirstSlice) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - hasFirstSlice = readSlice(in, slicesAtCurrentDepth); + if (slicesSeries.isEmpty()) { + slicesSeries.add(Arrays.asList(0, nRows)); + curLevelSliceSize = nRows; } - - while (!graphLevelDeque.isEmpty() || sliceIdxAtCurrentDepth != 0) { - if (sliceIdxAtCurrentDepth == 0) { - slicesAtCurrentDepth = graphLevelDeque.remove(); - curNestedColumnDescr = slicesAtCurrentDepth.left().getNestedDescr(); - - curDepth = slicesAtCurrentDepth.right(); - slicesSeries.add(curSlice); - - //The last element in slice is index(number) of the last - //element in current level. On the last iteration this - //represents number of elements in fully flattened array. - nItems = curSlice.get(curSlice.size() - 1); - curSlice = new ArrayList<>(); - } - if (curNestedColumnDescr.isArray()) { - readSlice(in, slicesAtCurrentDepth); - } + if (nRows == 0) { + curNestedColumnDescr = elementTypeDescr; + return; } - } - private boolean readSlice(ClickhouseStreamDataSource in, Triplet, Integer> sliceState) { - if (sliceIdxAtCurrentDepth == 0) { - curSlice.add(0); - } - for (; sliceIdxAtCurrentDepth < sliceState.middle().size(); ++sliceIdxAtCurrentDepth) { - int size = sliceState.middle().get(sliceIdxAtCurrentDepth); - int nestedSizeCount = size - prevSliceSizeAtCurrentDepth; - if (in.readableBytes() < nestedSizeCount * 8) { - return false; + long lastSliceSize = 0; + while (curNestedColumnDescr.isArray()) { + if (curLevelSlice == null) { + curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); + curLevelSlice.add(0); } - ArrayList nestedSizes = new ArrayList<>(nestedSizeCount); - for (int i = 0; i < nestedSizeCount; ++i) { - long sz = in.readLongLE(); - if (sz > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + sz + ") max " + Integer.MAX_VALUE); + if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { + return; + } + for (int curLevelSliceIndex = 0; curLevelSliceIndex < curLevelSliceSize; ++curLevelSliceIndex) { + lastSliceSize = in.readLongLE(); + if (lastSliceSize > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); } - nestedSizes.add((int) sz); + curLevelSlice.add((int) lastSliceSize); } - curSlice.addAll(nestedSizes); - prevSliceSizeAtCurrentDepth = size; - graphLevelDeque.add(new Triplet<>(curNestedColumnDescr, nestedSizes, curDepth + 1)); + slicesSeries.add(curLevelSlice); + curLevelSlice = null; + curLevelSliceSize = (int) lastSliceSize; + curNestedColumnDescr = curNestedColumnDescr.getNestedDescr(); } - sliceIdxAtCurrentDepth = 0; - prevSliceSizeAtCurrentDepth = 0; - return true; - } - - public static void main(String[] args) { - String[][][] el = new String[0][][]; - Class elType = el.getClass().getComponentType(); - System.err.println(elType.getSimpleName()); + nItems = (int)lastSliceSize; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 73d22b0782..f15a3a3203 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -2,10 +2,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; import java.util.BitSet; -import java.util.List; public abstract class ClickhouseColumnReader { private static final Object NOP_STATE = new Object(); @@ -122,8 +120,4 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } - - public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index b8c5fc7091..85c9fac8fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,16 +1,10 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.RawClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; -import java.nio.charset.StandardCharsets; -import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -131,22 +125,4 @@ public int hashCode() { return hash; } } - - public static void main(String[] args) { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("LowCardinality(Nullable(String))", "name"); - List data = Arrays.asList(Tuple.of("str1"), Tuple.of("str2"), Tuple.of("str1"), Tuple.of(null)); - - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", - 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); - LowCardinalityColumnWriter writer = new LowCardinalityColumnWriter(data, descr, md, 0); - - ByteBuf buffer = Unpooled.buffer(100); - RawClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buffer); - writer.serializeData(sink, 0, data.size()); - System.err.println(writer.dictionaryIndex); - System.err.println(writer.keys); - System.err.println(buffer.readableBytes()); - System.err.print(ByteBufUtil.hexDump(buffer)); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index fafbfd0881..61fd984492 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -3,7 +3,6 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.util.ArrayList; @@ -32,7 +31,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { if (in.readableBytes() < curStrLength) { return null; } - //no dedicated BLOB type support; will encode into String if user did not request byte[].class + //no dedicated BLOB type support; will encode(later) into String if user asked for String explicitly byte[] stringBytes; if (nullsMap == null || !nullsMap.get(elements.size())) { stringBytes = new byte[curStrLength]; @@ -57,9 +56,4 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new StringColumnWriter(data, columnDescriptor, charset, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 2c54ca6e8d..10d307d408 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -2,9 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; - -import java.util.List; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; @@ -42,9 +39,4 @@ protected Object getElementInternal(int rowIdx, Class desired) { protected Object[] asObjectsArray(Class desired) { return asObjectsArrayWithGetElement(desired); } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new UInt32ColumnWriter(data, columnDescriptor, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 26b4896dd6..8c001c0311 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -2,9 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.Tuple; - -import java.util.List; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; @@ -50,9 +47,4 @@ protected Object[] allocateArray(Class desired, int length) { } return new Byte[length]; } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new UInt8ColumnWriter(data, columnDescriptor, columnIndex); - } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java deleted file mode 100644 index 6c03962358..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/AllTypesTest.java +++ /dev/null @@ -1,272 +0,0 @@ -package io.vertx.clickhousenativeclient; - -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.ext.unit.TestContext; -import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.ColumnChecker; -import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.Tuple; -import org.junit.*; -import org.junit.runner.RunWith; - -import java.nio.charset.StandardCharsets; -import java.time.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Consumer; - -@RunWith(VertxUnitRunner.class) -public class AllTypesTest { - private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); - - public static final String TABLE_PREFIX = "vertx_test_"; - - @ClassRule - public static ClickhouseResource rule = new ClickhouseResource(); - - private ClickhouseNativeConnectOptions options; - private Vertx vertx; - - @Before - public void setup(TestContext ctx) { - options = rule.options(); - vertx = Vertx.vertx(); - } - - @After - public void teardDown(TestContext ctx) { - vertx.close(ctx.asyncAssertSuccess()); - } - - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "nullable_array_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "nullable_array_lc_t")); - } - return columns; - } - - @Test - public void testUInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), - Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), - Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), - Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) - ); - doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - @Test - public void testInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), - Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), - Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), - Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) - ); - doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); - } - - @Test - public void testString(TestContext ctx) { - String v2 = "val2"; - String v_1 = "val_1"; - String v4 = "val_4"; - String v5 = "val5"; - String v3 = "val3"; - String v1 = "val1"; - List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), - Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), - Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), - Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); - } - - @Test - public void testBlob(TestContext ctx) { - byte[] v1 = b("val1"); - byte[] v2 = b("val2"); - byte[] v3 = b("val3"); - byte[] v4 = b("val4"); - byte[] v5 = b("value5"); - byte[] v6 = b("value_value_6"); - byte[] nv = b(""); - byte[] mn = b(""); - byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); - - List batch = Arrays.asList( - Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), - Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, mn} ), - Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), - Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn}, mn, mn, new byte[][]{mn, mn}, new byte[][]{mn, null, mn} ), - Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][]{mx, null, mx}, mx, mx, new byte[][]{mx, mx}, new byte[][]{mx, null, mx} ), - Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), - Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][]{mn, null, mx}, mx, mx, new byte[][]{mn, mx}, new byte[][]{mn, null, mx} ), - Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][]{}, nv, nv, new byte[][]{}, new byte[][]{} ), - Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][]{nv}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv}, new byte[][]{nv} ), - Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), - Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx}, nv, nv, new byte[][]{nv, mn, mx}, new byte[][]{nv, mn, null, mx} ), - Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), - Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][]{v3, v1, null, nv, mx, v3}, nv, null, new byte[][]{nv, v1, nv, v2, v2}, new byte[][]{nv, v2, null, v3, v2} ), - Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), - Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, v4}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][]{nv, null, nv} ), - Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][]{v3, nv, null}, v4, v4, new byte[][]{v1, nv, nv}, new byte[][]{v2, nv, null} ), - Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ), - Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, v4, v4, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); - } - - @Test - public void testDate(TestContext ctx) { - LocalDate dt = LocalDate.of(2020, 3, 29); - LocalDate d2 = dt.plusDays(2); - LocalDate d3 = dt.plusDays(3); - LocalDate mn = DateColumnReader.MIN_VALUE; - LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), - Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) - ); - doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - @Test - public void testDateTime(TestContext ctx) { - ZoneId zoneId = ZoneId.of("Europe/Oslo"); - OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), - Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) - ); - doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - private static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); - } - - private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Tuple expectedRow = batch.get(batchIdx); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); - } - ++batchIdx; - } - })); - })); - })); - })); - } -} - -class MyColumnChecker { - private final Class componentType; - private final ColumnChecker.SerializableBiFunction byIndexGetter; - private final ColumnChecker.SerializableBiFunction byNameGetter; - private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; - private final ColumnChecker.SerializableBiFunction arrayByNameGetter; - - public MyColumnChecker(Class componentType, - ColumnChecker.SerializableBiFunction byIndexGetter, - ColumnChecker.SerializableBiFunction byNameGetter, - ColumnChecker.SerializableBiFunction arrayByIndexGetter, - ColumnChecker.SerializableBiFunction arrayByNameGetter) { - this.componentType = componentType; - this.byIndexGetter = byIndexGetter; - this.byNameGetter = byNameGetter; - this.arrayByNameGetter = arrayByNameGetter; - this.arrayByIndexGetter = arrayByIndexGetter; - } - - public void checkColumn(Row row, int index, String name, R expected) { - ColumnChecker checker = ColumnChecker.checkColumn(index, name); - if ("id".equals(name)) { - checker.returns((Class)expected.getClass(), expected) - .forRow(row); - return; - } - if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { - //ask driver to turn off String encoding - checker = checker - .returns((tuple, idx) -> tuple.get(byte[].class, idx), - (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), - (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); - } else { - //arrays are non-nullable - if (expected != null && expected.getClass().isArray()) { - boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding - checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); - } else { - checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); - } - if (!multidimensional && arrayByIndexGetter != null) { - //API does not provided dedicated methods to get multi-dimensional arrays - checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); - } - } else { - //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); - if (byIndexGetter != null) { - checker = checker.returns(byIndexGetter, byNameGetter, expected); - } - } - } - checker.forRow(row); - } -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java new file mode 100644 index 0000000000..114e849b0e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -0,0 +1,73 @@ +package io.vertx.clickhousenativeclient; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.buffer.UnpooledByteBufAllocator; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhousenative.impl.codec.*; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.sqlclient.Tuple; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(Parameterized.class) +public class ArraySerDesTest { + private final ClickhouseColumn col; + private final List data; + + public ArraySerDesTest(String nm, ClickhouseColumn col, List data) { + this.col = col; + this.data = data; + } + + @Parameterized.Parameters(name = "{0}") + public static Iterable dataForTest() { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); + List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + Tuple.of(new String[][][]{ {{}}, {{}} } ), + Tuple.of(new String[][][]{ {{}}, {{}} } ), + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ), + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ) + ); + + return Arrays.asList(new Object[][]{ + {data.size() + " rows", col, data}, + {"0 rows", col, Collections.emptyList()} + }); + } + + @Test + public void doSerDes() { + ClickhouseColumnWriter writer = col.writer(data, 0); + ByteBuf buf = Unpooled.buffer(); + ClickhouseStreamDataSink sink = new RawClickhouseStreamDataSink(buf); + writer.serializeColumn(sink, 0, data.size()); + sink.finish(); + + ClickhouseColumnReader reader = col.reader(data.size()); + ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(); + ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); + reader.readColumn(ds); + for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { + Object actual = reader.getElement(rowIdx, String.class); + Object expected = data.get(rowIdx).getValue(0); + Assert.assertArrayEquals((Object[])expected, (Object[])actual); + } + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java new file mode 100644 index 0000000000..1e8e1b3f6b --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java @@ -0,0 +1,283 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.*; +import org.junit.runner.RunWith; + +import java.nio.charset.StandardCharsets; +import java.time.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +@RunWith(VertxUnitRunner.class) +public class AllTypesTest { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); + } + return columns; + } + + @Test + public void testEmptyBlob(TestContext ctx) { + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), Collections.emptyList()); + } + + @Test + public void testBlob(TestContext ctx) { + byte[] v1 = b("val1"); + byte[] v2 = b("val2"); + byte[] v3 = b("val3"); + byte[] v4 = b("val4"); + byte[] v5 = b("value5"); + byte[] v6 = b("value_value_6"); + byte[] nv = b(""); + byte[] mn = b(""); + byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t + Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, mx}, new byte[][][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mx, mx}, new byte[][][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mx, null, mx}, new byte[][][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); + } + + //@Test + public void testUInt8(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), + Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), + Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), + Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) + ); + doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); + } + + //@Test + public void testInt8(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), + Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), + Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), + Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) + ); + doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); + } + + //@Test + public void testString(TestContext ctx) { + String v2 = "val2"; + String v_1 = "val_1"; + String v4 = "val_4"; + String v5 = "val5"; + String v3 = "val3"; + String v1 = "val1"; + List batch = Arrays.asList( + Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), + Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), + Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), + Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), + Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) + ); + doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); + } + + //@Test + public void testDate(TestContext ctx) { + LocalDate dt = LocalDate.of(2020, 3, 29); + LocalDate d2 = dt.plusDays(2); + LocalDate d3 = dt.plusDays(3); + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), + Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) + ); + doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); + } + + //@Test + public void testDateTime(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), + Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), + Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), + Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), + Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) + ); + doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); + } + + private static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); + } + + private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + } + ++batchIdx; + } + })); + })); + })); + })); + } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } + + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provided dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } + } else { + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } + } + } + checker.forRow(row); + } +} From 13267dff3ac3fefe9071d399a3c99e10a041e6f7 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 18:16:34 +0300 Subject: [PATCH 119/176] reworked AllTypesTest Signed-off-by: vladimir --- .../alltypes/AllTypesBase.java | 152 ++++++++++ .../{AllTypesTest.java => BlobTest.java} | 266 +++--------------- .../alltypes/DateTest.java | 79 ++++++ .../alltypes/DateTimeTest.java | 84 ++++++ .../alltypes/Int8Test.java | 78 +++++ .../alltypes/StringTest.java | 76 +++++ .../alltypes/UInt8Test.java | 77 +++++ 7 files changed, 578 insertions(+), 234 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/{AllTypesTest.java => BlobTest.java} (56%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java new file mode 100644 index 0000000000..b1f433c4a2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -0,0 +1,152 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.ColumnChecker; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; + +@RunWith(VertxUnitRunner.class) +public abstract class AllTypesBase { + private static final Logger LOG = LoggerFactory.getLogger(AllTypesBase.class); + + public static final String TABLE_PREFIX = "vertx_test_"; + + @ClassRule + public static ClickhouseResource rule = new ClickhouseResource(); + + private ClickhouseNativeConnectOptions options; + private Vertx vertx; + + @Before + public void setup(TestContext ctx) { + options = rule.options(); + vertx = Vertx.vertx(); + } + + @After + public void teardDown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + protected abstract String tableSuffix(); + protected abstract Class elementType(); + + private List columnsList(boolean hasLowCardinality) { + List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); + if (hasLowCardinality) { + columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); + } + return columns; + } + + protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, + MyColumnChecker columnChecker, List batch) { + String tableName = TABLE_PREFIX + tableSuffix; + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName).execute( + ctx.asyncAssertSuccess(res1 -> { + Sleep.sleepOrThrow(); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess( + res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + } + ++batchIdx; + } + })); + })); + })); + })); + } +} + +class MyColumnChecker { + private final Class componentType; + private final ColumnChecker.SerializableBiFunction byIndexGetter; + private final ColumnChecker.SerializableBiFunction byNameGetter; + private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; + private final ColumnChecker.SerializableBiFunction arrayByNameGetter; + + public MyColumnChecker(Class componentType, + ColumnChecker.SerializableBiFunction byIndexGetter, + ColumnChecker.SerializableBiFunction byNameGetter, + ColumnChecker.SerializableBiFunction arrayByIndexGetter, + ColumnChecker.SerializableBiFunction arrayByNameGetter) { + this.componentType = componentType; + this.byIndexGetter = byIndexGetter; + this.byNameGetter = byNameGetter; + this.arrayByNameGetter = arrayByNameGetter; + this.arrayByIndexGetter = arrayByIndexGetter; + } + + public void checkColumn(Row row, int index, String name, R expected) { + ColumnChecker checker = ColumnChecker.checkColumn(index, name); + if ("id".equals(name)) { + checker.returns((Class)expected.getClass(), expected) + .forRow(row); + return; + } + if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { + //ask driver to turn off String encoding + checker = checker + .returns((tuple, idx) -> tuple.get(byte[].class, idx), + (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), + (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); + } else { + //arrays are non-nullable + if (expected != null && expected.getClass().isArray()) { + boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; + if (componentType == byte[].class) { + //ask driver to turn off String encoding + checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); + } else { + checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); + } + if (!multidimensional && arrayByIndexGetter != null) { + //API does not provide dedicated methods to get multi-dimensional arrays + checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); + } + } else { + //regular non-array elements + checker = checker.returns(Tuple::getValue, Row::getValue, expected); + if (byIndexGetter != null) { + checker = checker.returns(byIndexGetter, byNameGetter, expected); + } + } + } + checker.forRow(row); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java similarity index 56% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java rename to vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 1e8e1b3f6b..4eff773be5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,68 +1,29 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.ColumnChecker; -import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.*; +import org.junit.Test; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; -import java.time.*; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.function.Consumer; @RunWith(VertxUnitRunner.class) -public class AllTypesTest { - private static final Logger LOG = LoggerFactory.getLogger(AllTypesTest.class); - - public static final String TABLE_PREFIX = "vertx_test_"; - - @ClassRule - public static ClickhouseResource rule = new ClickhouseResource(); - - private ClickhouseNativeConnectOptions options; - private Vertx vertx; - - @Before - public void setup(TestContext ctx) { - options = rule.options(); - vertx = Vertx.vertx(); - } - - @After - public void teardDown(TestContext ctx) { - vertx.close(ctx.asyncAssertSuccess()); - } - - private List columnsList(boolean hasLowCardinality) { - List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); - if (hasLowCardinality) { - columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); - } - return columns; +public class BlobTest extends AllTypesBase { + protected static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } @Test - public void testEmptyBlob(TestContext ctx) { - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), Collections.emptyList()); + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); } @Test - public void testBlob(TestContext ctx) { + public void testData(TestContext ctx) { byte[] v1 = b("val1"); byte[] v2 = b("val2"); byte[] v3 = b("val3"); @@ -74,7 +35,7 @@ public void testBlob(TestContext ctx) { byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); List batch = Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mn}, new byte[][][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -87,197 +48,34 @@ public void testBlob(TestContext ctx) { Tuple.of((byte)10, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new byte[][]{mn, mx}, new byte[][][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, null, mx}, new byte[][][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)11, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), Tuple.of((byte)12, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{}, new byte[][][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)13, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)14, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)15, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)16, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)17, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)18, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)19, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)20, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)21, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)22, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)23, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)24, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)25, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + Tuple.of((byte)13, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{}, new byte[][][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}}, v2, v3, new byte[][]{}, new byte[][][][]{{{}}}, new byte[][]{null}, new byte[][][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv}, new byte[][][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new byte[][]{nv, mn, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, mn, null, mx}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, v1, null, nv, mx, v3}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new byte[][]{v3, v1, nv, mx, v4}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, v2, null, v3, v2}, new byte[][][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new byte[][]{v1, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, v4}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new byte[][]{nv, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{nv, null, nv}, new byte[][][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v3, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v4, nv, nv}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v2, nv, null}, new byte[][][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, "string", true, new MyColumnChecker<>(byte[].class, null, null, null, null), batch); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); } - //@Test - public void testUInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (short)0, (short)0, new Short[]{}, new Short[]{}, (short)0, (short)0, new Short[]{}, new Short[]{} ), - Tuple.of((byte)2, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255}, (short)0, null, new Short[]{0, 2, 0, 3, 255}, new Short[]{0, 2, null, 3, 255} ), - Tuple.of((byte)3, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null}, (short)255, (short)255, new Short[]{255, 0, 0}, new Short[]{255, 0, null} ), - Tuple.of((byte)4, (short)0, (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0}, (short)0 , (short)0, new Short[]{0, 0, 0}, new Short[]{0, null, 0} ) - ); - doTest(ctx, "uint8", true, new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - //@Test - public void testInt8(TestContext ctx) { - List batch = Arrays.asList( - Tuple.of((byte)1, (byte)-128, (byte)-128, new Byte[]{}, new Byte[]{}, (byte)0, (byte)0, new Byte[]{}, new Byte[]{} ), - Tuple.of((byte)2, (byte)0, null, new Byte[]{-128, 2, 0, 3, 127}, new Byte[]{-128, 2, null, 3, 127}, (byte)0, null, new Byte[]{0, 2, 0, 3, 127}, new Byte[]{0, 2, null, 3, -128} ), - Tuple.of((byte)3, (byte)127, (byte)127, new Byte[]{127, 0, 0}, new Byte[]{127, 0, null}, (byte)255, (byte)255, new Byte[]{-128, 0, 0}, new Byte[]{127, 0, null} ), - Tuple.of((byte)4, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0}, (byte)0, (byte)0, new Byte[]{0, 0, 0}, new Byte[]{0, null, 0} ) - ); - doTest(ctx, "int8", true, new MyColumnChecker<>(Byte.class, null, null, null, null), batch); - } - - //@Test - public void testString(TestContext ctx) { - String v2 = "val2"; - String v_1 = "val_1"; - String v4 = "val_4"; - String v5 = "val5"; - String v3 = "val3"; - String v1 = "val1"; - List batch = Arrays.asList( - Tuple.of((byte)1, v2, v3, new String[]{}, new String[]{}, "", "", new String[]{}, new String[]{} ), - Tuple.of((byte)2, "", null, new String[]{v3, v1, "", "z", v5}, new String[]{v3, v1, null, "", "z", v3}, "", null, new String[]{"", v1, "", v2, v2}, new String[]{"", v2, null, v3, v2} ), - Tuple.of((byte)3, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ), - Tuple.of((byte)4, "", "", new String[]{"", "", ""}, new String[]{"", null, v5}, "", "", new String[]{"", "", ""}, new String[]{"", null, ""} ), - Tuple.of((byte)5, v_1, v4, new String[]{v5, "", ""}, new String[]{v3, "", null}, v5, v5, new String[]{v1, "", ""}, new String[]{v2, "", null} ) - ); - doTest(ctx, "string", true, new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings), batch); - } - - //@Test - public void testDate(TestContext ctx) { - LocalDate dt = LocalDate.of(2020, 3, 29); - LocalDate d2 = dt.plusDays(2); - LocalDate d3 = dt.plusDays(3); - LocalDate mn = DateColumnReader.MIN_VALUE; - LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new LocalDate[]{}, new LocalDate[]{}, mn, mn, new LocalDate[]{}, new LocalDate[]{} ), - Tuple.of((byte)2, mn, null, new LocalDate[]{d2, mn, mn, mx, d3}, new LocalDate[]{d2, d3, null, mn, mn, d3}, mn, null, new LocalDate[]{mn, d2, mn, d3, d3}, new LocalDate[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, d3}, mn, mn, new LocalDate[]{mn, mn, mn}, new LocalDate[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d3, mn, null}, d2, d3, new LocalDate[]{d2, mn, mn}, new LocalDate[]{d2, mn, null} ) - ); - doTest(ctx, "date", true, new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - //@Test - public void testDateTime(TestContext ctx) { - ZoneId zoneId = ZoneId.of("Europe/Oslo"); - OffsetDateTime dt = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d2 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime d3 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); - OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - - List batch = Arrays.asList( - Tuple.of((byte)1, d2, d2, new OffsetDateTime[]{}, new OffsetDateTime[]{}, mn, mn, new OffsetDateTime[]{}, new OffsetDateTime[]{} ), - Tuple.of((byte)2, mn, null, new OffsetDateTime[]{d2, mn, mn, mx, d3}, new OffsetDateTime[]{d2, d3, null, mn, mn, d3}, mn, null, new OffsetDateTime[]{mn, d2, mn, d3, d3}, new OffsetDateTime[]{mn, d2, null, d3, d2} ), - Tuple.of((byte)3, dt, dt, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)4, dt, dt, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, d3}, mn, mn, new OffsetDateTime[]{mn, mn, mn}, new OffsetDateTime[]{mn, null, mn} ), - Tuple.of((byte)5, mn, mn, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ), - Tuple.of((byte)6, mx, mx, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d3, mn, null}, d2, d3, new OffsetDateTime[]{d2, mn, mn}, new OffsetDateTime[]{d2, mn, null} ) - ); - doTest(ctx, "datetime", true, new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - private static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); - } - - private void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Number id = row.get(Number.class, "id"); - Tuple expectedRow = batch.get(batchIdx); - LOG.info("checking row " + tableSuffix + ":" + id); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); - } - ++batchIdx; - } - })); - })); - })); - })); - } -} - -class MyColumnChecker { - private final Class componentType; - private final ColumnChecker.SerializableBiFunction byIndexGetter; - private final ColumnChecker.SerializableBiFunction byNameGetter; - private final ColumnChecker.SerializableBiFunction arrayByIndexGetter; - private final ColumnChecker.SerializableBiFunction arrayByNameGetter; - - public MyColumnChecker(Class componentType, - ColumnChecker.SerializableBiFunction byIndexGetter, - ColumnChecker.SerializableBiFunction byNameGetter, - ColumnChecker.SerializableBiFunction arrayByIndexGetter, - ColumnChecker.SerializableBiFunction arrayByNameGetter) { - this.componentType = componentType; - this.byIndexGetter = byIndexGetter; - this.byNameGetter = byNameGetter; - this.arrayByNameGetter = arrayByNameGetter; - this.arrayByIndexGetter = arrayByIndexGetter; + @Override + protected String tableSuffix() { + return "string"; } - public void checkColumn(Row row, int index, String name, R expected) { - ColumnChecker checker = ColumnChecker.checkColumn(index, name); - if ("id".equals(name)) { - checker.returns((Class)expected.getClass(), expected) - .forRow(row); - return; - } - if (componentType == byte[].class && (expected == null || expected.getClass() == byte[].class)) { - //ask driver to turn off String encoding - checker = checker - .returns((tuple, idx) -> tuple.get(byte[].class, idx), - (ColumnChecker.SerializableBiFunction) (r, colName) -> r.get(byte[].class, colName), - (Consumer) actual -> Assert.assertArrayEquals((byte[])actual, (byte[])expected)); - } else { - //arrays are non-nullable - if (expected != null && expected.getClass().isArray()) { - boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding - checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); - } else { - checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); - } - if (!multidimensional && arrayByIndexGetter != null) { - //API does not provided dedicated methods to get multi-dimensional arrays - checker = checker.returns(arrayByIndexGetter, arrayByNameGetter, (Object[]) expected); - } - } else { - //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); - if (byIndexGetter != null) { - checker = checker.returns(byIndexGetter, byNameGetter, expected); - } - } - } - checker.forRow(row); + @Override + protected Class elementType() { + return byte[].class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java new file mode 100644 index 0000000000..d2c6517574 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTest extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + LocalDate v1 = LocalDate.of(2020, 3, 29); + LocalDate v2 = v1.plusDays(2); + LocalDate v3 = v2.plusDays(3); + LocalDate v4 = v1.minusDays(2); + LocalDate v5 = v2.minusDays(3); + LocalDate v6 = v2.minusDays(4); + LocalDate nv = DateColumnReader.MIN_VALUE; + LocalDate mn = DateColumnReader.MIN_VALUE; + LocalDate mx = DateColumnReader.MAX_VALUE; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mx, mx}, new LocalDate[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mx, null, mx}, new LocalDate[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new LocalDate[]{mn, mx}, new LocalDate[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, null, mx}, new LocalDate[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{}, new LocalDate[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{}, new LocalDate[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}}, v2, v3, new LocalDate[]{}, new LocalDate[][][]{{{}}}, new LocalDate[]{null}, new LocalDate[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv}, new LocalDate[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new LocalDate[]{nv, mn, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, mn, null, mx}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, v1, null, nv, mx, v3}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, v2, null, v3, v2}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, v1, null, nv, mx, v3}, new LocalDate[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new LocalDate[]{v3, v1, nv, mx, v4}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, v2, null, v3, v2}, new LocalDate[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new LocalDate[]{v1, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new LocalDate[]{v1, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v2, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new LocalDate[]{nv, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, null, v4}, new LocalDate[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new LocalDate[]{nv, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{nv, null, nv}, new LocalDate[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new LocalDate[]{v4, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v3, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v4, nv, nv}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v2, nv, null}, new LocalDate[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); + } + + @Override + protected String tableSuffix() { + return "date"; + } + + @Override + protected Class elementType() { + return LocalDate.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java new file mode 100644 index 0000000000..210a44e467 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -0,0 +1,84 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTimeTest extends AllTypesBase { + + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v3 = Instant.ofEpochSecond(1617120094L + 20L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v4 = Instant.ofEpochSecond(1617120094L - 10L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v5 = Instant.ofEpochSecond(1617120094L - 20L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v6 = Instant.ofEpochSecond(1617120094L - 200L).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime nv = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}}, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, v2, null, v3, v2}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, v2, null, v3, v2}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v2, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, v4}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, nv}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v2, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); + } + + @Override + protected String tableSuffix() { + return "datetime"; + } + + @Override + protected Class elementType() { + return OffsetDateTime.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java new file mode 100644 index 0000000000..f9fc8298a4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -0,0 +1,78 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int8Test extends AllTypesBase { + + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + Byte v1 = 10; + Byte v2 = -20; + Byte v3 = 30; + Byte v4 = -40; + Byte v5 = 60; + Byte v6 = -70; + Byte nv = 0; + Byte mn = -128; + Byte mx = 127; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, mx}, new Byte[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mx, mx}, new Byte[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mx, null, mx}, new Byte[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Byte[]{mn, mx}, new Byte[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, null, mx}, new Byte[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{}, new Byte[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{}, new Byte[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}}, v2, v3, new Byte[]{}, new Byte[][][]{{{}}}, new Byte[]{null}, new Byte[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv}, new Byte[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Byte[]{nv, mn, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, mn, null, mx}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, v1, null, nv, mx, v3}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, v2, null, v3, v2}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, v1, null, nv, mx, v3}, new Byte[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Byte[]{v3, v1, nv, mx, v4}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, v2, null, v3, v2}, new Byte[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Byte[]{v1, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Byte[]{v1, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v2, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Byte[]{nv, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, null, v4}, new Byte[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Byte[]{nv, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{nv, null, nv}, new Byte[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Byte[]{v4, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v3, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v4, nv, nv}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v2, nv, null}, new Byte[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); + } + + + @Override + protected String tableSuffix() { + return "int8"; + } + + @Override + protected Class elementType() { + return Byte.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java new file mode 100644 index 0000000000..8cf1097b63 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -0,0 +1,76 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class StringTest extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + String v1 = "val1"; + String v2 = "val2"; + String v3 = "val3"; + String v4 = "val4"; + String v5 = "value5"; + String v6 = "value_value_6"; + String nv = ""; + String mn = ""; + String mx = "not so looooooooooooooooooooooooooooooooooooooong value"; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, v4}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, nv}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); + } + + @Override + protected String tableSuffix() { + return "string"; + } + + @Override + protected Class elementType() { + return String.class; + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java new file mode 100644 index 0000000000..c792f28e8e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -0,0 +1,77 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt8Test extends AllTypesBase { + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + Short v1 = 10; + Short v2 = 20; + Short v3 = 30; + Short v4 = 40; + Short v5 = 60; + Short v6 = 70; + Short nv = 0; + Short mn = 0; + Short mx = 255; + + List batch = Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, v4}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, nv}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); + } + + @Override + protected String tableSuffix() { + return "uint8"; + } + + @Override + protected Class elementType() { + return Short.class; + } +} From 888985fae873b96bb78a2260396c64d89c760dc3 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 3 Apr 2021 23:55:42 +0300 Subject: [PATCH 120/176] added IPv4 column test Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 +- .../impl/codec/columns/Float64Column.java | 4 + .../codec/columns/Float64ColumnReader.java | 5 + .../impl/codec/columns/IPv4Column.java | 21 + .../impl/codec/columns/IPv4ColumnReader.java | 3 +- .../impl/codec/columns/IPv4ColumnWriter.java | 2 +- .../impl/codec/columns/IPv6Column.java | 4 +- .../impl/codec/columns/IPv6ColumnReader.java | 1 - .../impl/codec/columns/IPv6ColumnWriter.java | 27 ++ .../impl/codec/columns/Int128Column.java | 32 ++ ...umnReader.java => Int128ColumnReader.java} | 12 +- .../codec/columns/Int128ColumnWriter.java | 27 ++ .../impl/codec/columns/UInt128Column.java | 22 -- .../impl/codec/columns/UInt32Column.java | 8 + .../impl/codec/columns/UUIDColumn.java | 10 +- .../impl/codec/columns/UUIDColumnReader.java | 5 +- .../impl/codec/columns/UUIDColumnWriter.java | 26 ++ .../alltypes/AllTypesBase.java | 37 +- .../alltypes/BlobTest.java | 29 +- .../alltypes/DateTest.java | 25 +- .../alltypes/DateTimeTest.java | 26 +- .../alltypes/Float64Test.java | 62 +++ .../alltypes/IPv4Test.java | 72 ++++ .../alltypes/Int128Test.java | 79 ++++ .../alltypes/Int8Test.java | 27 +- .../alltypes/StringTest.java | 26 +- .../alltypes/UInt8Test.java | 25 +- .../alltypes/UUIDTest.java | 59 +++ .../src/test/python/all_types_table.sql | 367 ++++++++++++++++++ .../src/test/python/gen_all_types_tables.py | 4 +- .../src/test/resources/init.sql | 17 + 31 files changed, 898 insertions(+), 180 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{UInt128ColumnReader.java => Int128ColumnReader.java} (73%) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java create mode 100644 vertx-clickhouse-native-client/src/test/python/all_types_table.sql diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index d9affc019a..8c72b1f927 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -97,8 +97,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt128ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, - new BigInteger("-170141183460469231731687303715884105728"), new BigInteger( "170141183460469231731687303715884105727")); + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + Int128Column.INT128_MIN_VALUE, Int128Column.INT128_MAX_VALUE); } else if (spec.equals("String")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); @@ -114,7 +114,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); @@ -144,10 +144,10 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("IPv4".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } else if ("IPv6".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); @@ -182,8 +182,8 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } else if (jdbcType == JDBCType.BIGINT) { if (descr.getElementSize() == UInt64ColumnReader.ELEMENT_SIZE) { return new UInt64Column(descr); - } else if (descr.getElementSize() == UInt128ColumnReader.ELEMENT_SIZE) { - return new UInt128Column(descr); + } else if (descr.getElementSize() == Int128Column.ELEMENT_SIZE) { + return new Int128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index f05e6c818b..db3846812a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -19,4 +19,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Float64ColumnWriter(data, descriptor, columnIndex); } + + public Object nullValue() { + return (double)0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index 320dd79ff5..9e4c5ab07a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -26,4 +26,9 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index f843fbdbdb..d06ae238a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -3,9 +3,25 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.List; public class IPv4Column extends UInt32Column { + public static final int ELEMENT_SIZE = 4; + public static final Inet4Address ZERO_VALUE = ipv4(new byte[]{0, 0, 0, 0}); + public static final Inet4Address MAX_VALUE = ipv4(new byte[]{Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE}); + public static final Inet4Address MIN_VALUE = ipv4(new byte[]{Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE}); + + private static Inet4Address ipv4(byte[] src) { + try { + return (Inet4Address) Inet4Address.getByAddress(src); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + public IPv4Column(ClickhouseNativeColumnDescriptor descr) { super(descr); } @@ -19,4 +35,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv4ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return ZERO_VALUE; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index ce2d4b82f7..9cb58387f4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -7,7 +7,6 @@ import java.net.UnknownHostException; public class IPv4ColumnReader extends UInt32ColumnReader { - public static final int ELEMENT_SIZE = 4; public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { super(nRows, descriptor); @@ -15,7 +14,7 @@ public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet4Address.class || desired == null) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == String.class || desired == null) { Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); try { return Inet4Address.getByAddress(intBytes(addr)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index 763c752771..7d798113d6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -18,6 +18,6 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { } private static int intFromBytes(byte[] b) { - return b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; + return (0xFF000000 & (b[0] << 24)) | (0xFF0000 & (b[1] << 16)) | (0xFF00 & (b[2] << 8)) | (0xFF & (b[3])); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index bbf699dc70..4396bd7a00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -7,6 +7,8 @@ import java.util.List; public class IPv6Column extends FixedStringColumn { + public static final int ELEMENT_SIZE = 16; + public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(descr, md); } @@ -18,6 +20,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 86dcbb5885..d69f82d267 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -8,7 +8,6 @@ import java.net.UnknownHostException; public class IPv6ColumnReader extends FixedStringColumnReader { - public static final int ELEMENT_SIZE = 16; protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java new file mode 100644 index 0000000000..98ec4a1857 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.net.Inet6Address; +import java.nio.charset.Charset; +import java.util.List; + +public class IPv6ColumnWriter extends FixedStringColumnWriter { + public IPv6ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + super(data, columnDescriptor, charset, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Inet6Address address = (Inet6Address) val; + byte[] bytes = address.getAddress(); + super.serializeDataElement(sink, bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(IPv6Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java new file mode 100644 index 0000000000..1e1387b73a --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.util.List; + +public class Int128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final BigInteger ZERO_VALUE = new BigInteger(new byte[ELEMENT_SIZE]); + public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); + public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); + + public Int128Column(ClickhouseNativeColumnDescriptor descriptor) { + super(descriptor); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new Int128ColumnReader(nRows, descriptor); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new Int128ColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return ZERO_VALUE; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 40845f1f5c..f1d24a7564 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -7,24 +7,22 @@ import java.math.BigInteger; //experimental support at the moment -public class UInt128ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; - - protected UInt128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { +public class Int128ColumnReader extends ClickhouseColumnReader { + protected Int128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Int128Column.ELEMENT_SIZE * nRows) { BigInteger[] data = new BigInteger[nRows]; - byte[] readBuffer = new byte[ELEMENT_SIZE]; + byte[] readBuffer = new byte[Int128Column.ELEMENT_SIZE]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); data[i] = new BigInteger(Utils.reverse(readBuffer)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Int128Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java new file mode 100644 index 0000000000..5b80729691 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -0,0 +1,27 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.util.List; + +public class Int128ColumnWriter extends ClickhouseColumnWriter { + public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigInteger bi = (BigInteger) val; + byte[] bytes = Utils.reverse(bi.toByteArray()); + sink.writeBytes(bytes); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Int128Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java deleted file mode 100644 index cece9b61ca..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt128Column.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.sqlclient.Tuple; - -import java.util.List; - -public class UInt128Column extends ClickhouseColumn { - public UInt128Column(ClickhouseNativeColumnDescriptor descriptor) { - super(descriptor); - } - - @Override - public ClickhouseColumnReader reader(int nRows) { - return new UInt128ColumnReader(nRows, descriptor); - } - - @Override - public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index f1a4c37359..d99c183eb1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -19,4 +19,12 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt32ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + if (descriptor.isUnsigned()) { + return 0L; + } + return 0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index ef9fe811fe..8e661638b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -4,8 +4,12 @@ import io.vertx.sqlclient.Tuple; import java.util.List; +import java.util.UUID; public class UUIDColumn extends ClickhouseColumn { + public static final UUID ZERO_UUID = new UUID(0, 0); + public static final int ELEMENT_SIZE = 16; + public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -17,6 +21,10 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new UUIDColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return ZERO_UUID; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index ddb8c80cb7..4e8c87ab02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -6,7 +6,6 @@ import java.util.UUID; public class UUIDColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); @@ -14,7 +13,7 @@ protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= UUIDColumn.ELEMENT_SIZE * nRows) { UUID[] data = new UUID[nRows]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { @@ -22,7 +21,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { long leastSigBits = in.readLongLE(); data[i] = new UUID(mostSigBits, leastSigBits); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(UUIDColumn.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java new file mode 100644 index 0000000000..c3e21525e2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; +import java.util.UUID; + +public class UUIDColumnWriter extends ClickhouseColumnWriter { + public UUIDColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + UUID uuid = (UUID) val; + sink.writeLongLE(uuid.getMostSignificantBits()); + sink.writeLongLE(uuid.getLeastSignificantBits()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(UUIDColumn.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index b1f433c4a2..3acfaa4aa6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -12,14 +12,12 @@ import io.vertx.sqlclient.ColumnChecker; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; +import org.junit.*; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -28,6 +26,9 @@ public abstract class AllTypesBase { private static final Logger LOG = LoggerFactory.getLogger(AllTypesBase.class); public static final String TABLE_PREFIX = "vertx_test_"; + protected final String tableSuffix; + protected final MyColumnChecker checker; + protected final boolean hasLowCardinality; @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -35,6 +36,16 @@ public abstract class AllTypesBase { private ClickhouseNativeConnectOptions options; private Vertx vertx; + public AllTypesBase(String tableSuffix, MyColumnChecker checker) { + this(tableSuffix, checker, true); + } + + public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasLowCardinality) { + this.tableSuffix = tableSuffix; + this.checker = checker; + this.hasLowCardinality = hasLowCardinality; + } + @Before public void setup(TestContext ctx) { options = rule.options(); @@ -46,8 +57,17 @@ public void teardDown(TestContext ctx) { vertx.close(ctx.asyncAssertSuccess()); } - protected abstract String tableSuffix(); - protected abstract Class elementType(); + @Test + public void testEmptyData(TestContext ctx) { + doTest(ctx, Collections.emptyList()); + } + + @Test + public void testData(TestContext ctx) { + doTest(ctx, createBatch()); + } + + public abstract List createBatch(); private List columnsList(boolean hasLowCardinality) { List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); @@ -57,8 +77,7 @@ private List columnsList(boolean hasLowCardinality) { return columns; } - protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCardinality, - MyColumnChecker columnChecker, List batch) { + protected void doTest(TestContext ctx, List batch) { String tableName = TABLE_PREFIX + tableSuffix; ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( @@ -82,7 +101,7 @@ protected void doTest(TestContext ctx, String tableSuffix, boolean hasLowCa for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { String colName = columnsList.get(colIdx); Object expectedColumnValue = expectedRow.getValue(colIdx); - columnChecker.checkColumn(row, colIdx, colName, (R) expectedColumnValue); + checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); } ++batchIdx; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 4eff773be5..739eb756d1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,29 +1,25 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class BlobTest extends AllTypesBase { - protected static byte[] b(String s) { - return s.getBytes(StandardCharsets.UTF_8); + public BlobTest() { + super("string", new MyColumnChecker<>(byte[].class, null, null, null, null)); } - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + protected static byte[] b(String s) { + return s.getBytes(StandardCharsets.UTF_8); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { byte[] v1 = b("val1"); byte[] v2 = b("val2"); byte[] v3 = b("val3"); @@ -34,7 +30,7 @@ public void testData(TestContext ctx) { byte[] mn = b(""); byte[] mx = b("not so looooooooooooooooooooooooooooooooooooooong value"); - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new byte[][]{mn, mn}, new byte[][][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{mn, mn}, new byte[][][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -66,16 +62,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new byte[][][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new byte[][]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new byte[][][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - @Override - protected String tableSuffix() { - return "string"; - } - - @Override - protected Class elementType() { - return byte[].class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index d2c6517574..f3d7b8b1e4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,27 +1,23 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.time.LocalDate; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class DateTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), Collections.emptyList()); + public DateTest() { + super("date", new MyColumnChecker<>(LocalDate.class, Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { LocalDate v1 = LocalDate.of(2020, 3, 29); LocalDate v2 = v1.plusDays(2); LocalDate v3 = v2.plusDays(3); @@ -32,7 +28,7 @@ public void testData(TestContext ctx) { LocalDate mn = DateColumnReader.MIN_VALUE; LocalDate mx = DateColumnReader.MAX_VALUE; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{mn, mn}, new LocalDate[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -64,16 +60,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new LocalDate[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new LocalDate[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getLocalDate, Row::getLocalDate, Tuple::getArrayOfLocalDates, Row::getArrayOfLocalDates), batch); - } - - @Override - protected String tableSuffix() { - return "date"; - } - - @Override - protected Class elementType() { - return LocalDate.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 210a44e467..f84dc7bc28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,31 +1,26 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; - import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneId; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class DateTimeTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), Collections.emptyList()); + public DateTimeTest() { + super("datetime", new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { ZoneId zoneId = ZoneId.of("Europe/Oslo"); OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L).atZone(zoneId).toOffsetDateTime(); OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L).atZone(zoneId).toOffsetDateTime(); @@ -37,7 +32,7 @@ public void testData(TestContext ctx) { OffsetDateTime mn = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -69,16 +64,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), batch); - } - - @Override - protected String tableSuffix() { - return "datetime"; - } - - @Override - protected Class elementType() { - return OffsetDateTime.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java new file mode 100644 index 0000000000..4a2897df00 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Float64Test extends AllTypesBase { + public Float64Test() { + super("float64", new MyColumnChecker<>(Double.class, Tuple::getDouble, Row::getDouble, Tuple::getArrayOfDoubles, Row::getArrayOfDoubles)); + } + + @Override + public List createBatch() { + Double v1 = Double.MAX_VALUE / 2; + Double v2 = Double.MIN_VALUE / 2; + Double v3 = 30.0; + Double v4 = -40.0; + Double v5 = 60.0; + Double v6 = -70.0; + Double nv = 0.0; + Double mn = Double.MIN_VALUE; + Double mx = Double.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, mn}, new Double[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mn, mn}, new Double[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mn}, new Double[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, mx}, new Double[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Double[]{mx, mx}, new Double[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mx, null, mx}, new Double[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Double[]{mn, mx}, new Double[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{mn, null, mx}, new Double[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{}, new Double[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{}, new Double[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}}, v2, v3, new Double[]{}, new Double[][][]{{{}}}, new Double[]{null}, new Double[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv}, new Double[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Double[]{nv, mn, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, mn, null, mx}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, v1, null, nv, mx, v3}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, v2, null, v3, v2}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, v1, null, nv, mx, v3}, new Double[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Double[]{v3, v1, nv, mx, v4}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, v2, null, v3, v2}, new Double[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Double[]{v1, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Double[]{v1, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v2, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Double[]{nv, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, null, v4}, new Double[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Double[]{nv, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{nv, null, nv}, new Double[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Double[]{v4, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v3, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v4, nv, nv}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v2, nv, null}, new Double[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Double[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Double[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Double[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java new file mode 100644 index 0000000000..41a90a6529 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -0,0 +1,72 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.net.Inet4Address; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class IPv4Test extends AllTypesBase { + public IPv4Test() { + super("ipv4", new MyColumnChecker<>(Inet4Address.class, null, null, null, null)); + } + + private static Inet4Address ipv4(int b1, int b2, int b3, int b4) { + try { + return (Inet4Address) Inet4Address.getByAddress(new byte[]{(byte)b1, (byte)b2, (byte)b3, (byte)b4}); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public List createBatch() { + Inet4Address v1 = ipv4(192, 168, 1, 1); + Inet4Address v2 = ipv4(10, 23, 1, 1); + Inet4Address v3 = ipv4(1, 1, 1, 1); + Inet4Address v4 = ipv4(8, 8, 8, 8); + Inet4Address v5 = ipv4(1, 2, 3, 4); + Inet4Address v6 = ipv4(100, 100, 100, 100); + Inet4Address nv = IPv4Column.ZERO_VALUE; + Inet4Address mn = IPv4Column.MIN_VALUE; + Inet4Address mx = IPv4Column.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mn, mn}, new Inet4Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mn}, new Inet4Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet4Address[]{mx, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mx, null, mx}, new Inet4Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Inet4Address[]{mn, mx}, new Inet4Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{mn, null, mx}, new Inet4Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{}, new Inet4Address[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}}, v2, v3, new Inet4Address[]{}, new Inet4Address[][][]{{{}}}, new Inet4Address[]{null}, new Inet4Address[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv}, new Inet4Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet4Address[]{nv, mn, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, mn, null, mx}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, v1, null, nv, mx, v3}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, v2, null, v3, v2}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, v1, null, nv, mx, v3}, new Inet4Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet4Address[]{v3, v1, nv, mx, v4}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, v2, null, v3, v2}, new Inet4Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Inet4Address[]{v1, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Inet4Address[]{v1, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v2, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Inet4Address[]{nv, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, null, v4}, new Inet4Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Inet4Address[]{nv, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{nv, null, nv}, new Inet4Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Inet4Address[]{v4, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v3, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v4, nv, nv}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v2, nv, null}, new Inet4Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet4Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet4Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java new file mode 100644 index 0000000000..986b91a448 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.List; + + +@RunWith(VertxUnitRunner.class) +public class Int128Test extends AllTypesBase { + public Int128Test() { + super("int128", new MyColumnChecker<>(BigInteger.class, null, null, null, null)); + } + + @Ignore + @Test + public void testEmptyData(TestContext ctx) { + //experimental support at the moment + } + + @Ignore + @Test + public void testData(TestContext ctx) { + //experimental support at the moment + } + + @Override + public List createBatch() { + BigInteger v1 = BigInteger.valueOf(Long.MAX_VALUE); + BigInteger v2 = BigInteger.valueOf(Long.MIN_VALUE); + BigInteger v3 = BigInteger.valueOf(Integer.MAX_VALUE); + BigInteger v4 = BigInteger.valueOf(Integer.MIN_VALUE); + BigInteger v5 = BigInteger.valueOf(Long.MAX_VALUE / 2); + BigInteger v6 = BigInteger.valueOf(Long.MIN_VALUE / 2); + BigInteger nv = Int128Column.ZERO_VALUE; + BigInteger mn = Int128Column.INT128_MIN_VALUE; + BigInteger mx = Int128Column.INT128_MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mn, mn}, new BigInteger[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mn}, new BigInteger[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new BigInteger[]{mx, mx}, new BigInteger[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mx, null, mx}, new BigInteger[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new BigInteger[]{mn, mx}, new BigInteger[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{mn, null, mx}, new BigInteger[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{}, new BigInteger[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{}, new BigInteger[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}}, v2, v3, new BigInteger[]{}, new BigInteger[][][]{{{}}}, new BigInteger[]{null}, new BigInteger[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv}, new BigInteger[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new BigInteger[]{nv, mn, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, mn, null, mx}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, v1, null, nv, mx, v3}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, v2, null, v3, v2}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, v1, null, nv, mx, v3}, new BigInteger[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new BigInteger[]{v3, v1, nv, mx, v4}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, v2, null, v3, v2}, new BigInteger[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new BigInteger[]{v1, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new BigInteger[]{v1, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v2, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new BigInteger[]{nv, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, null, v4}, new BigInteger[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new BigInteger[]{nv, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{nv, null, nv}, new BigInteger[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new BigInteger[]{v4, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v3, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v4, nv, nv}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v2, nv, null}, new BigInteger[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new BigInteger[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new BigInteger[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index f9fc8298a4..80023dd612 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,25 +1,20 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class Int8Test extends AllTypesBase { - - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + public Int8Test() { + super("int8", new MyColumnChecker<>(Byte.class, null, null, null, null)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { Byte v1 = 10; Byte v2 = -20; Byte v3 = 30; @@ -30,7 +25,7 @@ public void testData(TestContext ctx) { Byte mn = -128; Byte mx = 127; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Byte[]{mn, mn}, new Byte[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{mn, mn}, new Byte[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -62,17 +57,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Byte[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Byte[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Byte[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - - @Override - protected String tableSuffix() { - return "int8"; - } - - @Override - protected Class elementType() { - return Byte.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 8cf1097b63..9ff654d963 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,24 +1,21 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class StringTest extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), Collections.emptyList()); + public StringTest() { + super("string", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { String v1 = "val1"; String v2 = "val2"; String v3 = "val3"; @@ -29,7 +26,7 @@ public void testData(TestContext ctx) { String mn = ""; String mx = "not so looooooooooooooooooooooooooooooooooooooong value"; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -61,16 +58,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), null, null, null, null), batch); - } - - @Override - protected String tableSuffix() { - return "string"; - } - - @Override - protected Class elementType() { - return String.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index c792f28e8e..8046242ede 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,25 +1,21 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; -import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; -import java.util.Collections; import java.util.List; @RunWith(VertxUnitRunner.class) public class UInt8Test extends AllTypesBase { - @Test - public void testEmptyData(TestContext ctx) { - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), Collections.emptyList()); + public UInt8Test() { + super("uint8", new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts)); } - @Test - public void testData(TestContext ctx) { + @Override + public List createBatch() { Short v1 = 10; Short v2 = 20; Short v3 = 30; @@ -30,7 +26,7 @@ public void testData(TestContext ctx) { Short mn = 0; Short mx = 255; - List batch = Arrays.asList( + return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), @@ -62,16 +58,5 @@ public void testData(TestContext ctx) { Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) ); - doTest(ctx, tableSuffix(), true, new MyColumnChecker<>(elementType(), Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts), batch); - } - - @Override - protected String tableSuffix() { - return "uint8"; - } - - @Override - protected Class elementType() { - return Short.class; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java new file mode 100644 index 0000000000..90c3db931e --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -0,0 +1,59 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class UUIDTest extends AllTypesBase { + public UUIDTest() { + super("uuid", new MyColumnChecker<>(UUID.class, null, null, null, null), false); + } + + @Override + public List createBatch() { + UUID v1 = new UUID(1000, 2000); + UUID v2 = new UUID(-1000, -2000); + UUID v3 = new UUID(Integer.MIN_VALUE, Integer.MIN_VALUE); + UUID v4 = new UUID(Integer.MAX_VALUE, Integer.MAX_VALUE); + UUID v5 = new UUID(Long.MIN_VALUE / 2 , Long.MIN_VALUE / 2); + UUID v6 = new UUID(Long.MAX_VALUE / 2, Long.MAX_VALUE / 2); + UUID nv = new UUID(0, 0); + UUID mn = new UUID(Long.MIN_VALUE, Long.MIN_VALUE); + UUID mx = new UUID(Long.MAX_VALUE, Long.MAX_VALUE); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, mn}, new UUID[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, mn}, new UUID[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mn}, new UUID[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new UUID[]{mn, mn}, new UUID[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mn}, new UUID[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, mx}, new UUID[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, null, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new UUID[]{mx, mx}, new UUID[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mx, null, mx}, new UUID[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new UUID[]{mn, mx}, new UUID[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mx}, new UUID[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new UUID[]{mn, mx}, new UUID[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{mn, null, mx}, new UUID[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{}, new UUID[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{}, new UUID[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{}, new UUID[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{null}, new UUID[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new UUID[]{}, new UUID[][][]{{{}}}, new UUID[]{null}, new UUID[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv}, new UUID[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new UUID[]{nv, mn, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, mn, null, mx}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new UUID[]{v3, v1, nv, mx, v4}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, v1, null, nv, mx, v3}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new UUID[]{v3, v1, nv, mx, v4}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, v1, null, nv, mx, v3}, new UUID[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new UUID[]{v1, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, nv, null}, new UUID[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new UUID[]{nv, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{nv, null, v4}, new UUID[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new UUID[]{v4, nv, nv}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v3, nv, null}, new UUID[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new UUID[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new UUID[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new UUID[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new UUID[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql new file mode 100644 index 0000000000..a5e28cd04a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -0,0 +1,367 @@ +set allow_suspicious_low_cardinality_types=true; +DROP TABLE IF EXISTS vertx_test_int8; +CREATE TABLE vertx_test_int8 ( + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint8; +CREATE TABLE vertx_test_uint8 ( + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int16; +CREATE TABLE vertx_test_int16 ( + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint16; +CREATE TABLE vertx_test_uint16 ( + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int32; +CREATE TABLE vertx_test_int32 ( + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint32; +CREATE TABLE vertx_test_uint32 ( + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int64; +CREATE TABLE vertx_test_int64 ( + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uint64; +CREATE TABLE vertx_test_uint64 ( + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int128; +CREATE TABLE vertx_test_int128 ( + id Int8, + simple_t Int128, + nullable_t Nullable(Int128), + array_t Array(Int128), + array3_t Array(Array(Array(Int128))), + nullable_array_t Array(Nullable(Int128)), + nullable_array3_t Array(Array(Array(Nullable(Int128)))), + simple_lc_t LowCardinality(Int128), + nullable_lc_t LowCardinality(Nullable(Int128)), + array_lc_t Array(LowCardinality(Int128)), + array3_lc_t Array(Array(Array(LowCardinality(Int128)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_string; +CREATE TABLE vertx_test_string ( + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_fixedstring; +CREATE TABLE vertx_test_fixedstring ( + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime; +CREATE TABLE vertx_test_datetime ( + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_datetime64; +CREATE TABLE vertx_test_datetime64 ( + id Int8, + simple_t DateTime64, + nullable_t Nullable(DateTime64), + array_t Array(DateTime64), + array3_t Array(Array(Array(DateTime64))), + nullable_array_t Array(Nullable(DateTime64)), + nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_date; +CREATE TABLE vertx_test_date ( + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_uuid; +CREATE TABLE vertx_test_uuid ( + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal32; +CREATE TABLE vertx_test_decimal32 ( + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal64; +CREATE TABLE vertx_test_decimal64 ( + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_decimal128; +CREATE TABLE vertx_test_decimal128 ( + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum8; +CREATE TABLE vertx_test_enum8 ( + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_enum16; +CREATE TABLE vertx_test_enum16 ( + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float32; +CREATE TABLE vertx_test_float32 ( + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_float64; +CREATE TABLE vertx_test_float64 ( + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv6; +CREATE TABLE vertx_test_ipv6 ( + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = MergeTree() + ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_ipv4; +CREATE TABLE vertx_test_ipv4 ( + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = MergeTree() + ORDER BY (id); diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index f9bfd32ab4..fdfe03ba97 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -1,6 +1,6 @@ #! /usr/bin/python3 -ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'String', +ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', {'table': 'FixedString', 'type': 'FixedString(12)'}, 'DateTime', 'DateTime64', 'Date', 'UUID', {'table': 'Decimal32', 'type': 'Decimal32(4)'}, @@ -12,6 +12,8 @@ 'Float32', 'Float64', 'IPv6', 'IPv4']; print('set allow_suspicious_low_cardinality_types=true;'); +print('set allow_experimental_bigint_types=true'); + for elem_spec in ELEMENTARY_TYPES: table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; table_name = "vertx_test_{0}".format(table_name.lower()); diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 263882d8e5..1eb25dbd79 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -274,6 +274,23 @@ CREATE TABLE vertx_test_uint64 ( nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) ) engine = MergeTree() ORDER BY (id); +DROP TABLE IF EXISTS vertx_test_int128; +CREATE TABLE vertx_test_int128 ( + id Int8, + simple_t Int128, + nullable_t Nullable(Int128), + array_t Array(Int128), + array3_t Array(Array(Array(Int128))), + nullable_array_t Array(Nullable(Int128)), + nullable_array3_t Array(Array(Array(Nullable(Int128)))), + simple_lc_t LowCardinality(Int128), + nullable_lc_t LowCardinality(Nullable(Int128)), + array_lc_t Array(LowCardinality(Int128)), + array3_lc_t Array(Array(Array(LowCardinality(Int128)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) +) engine = MergeTree() + ORDER BY (id); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( id Int8, From 0ef566dbcebb8d62d81814587e1c8de718cd9b2f Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 00:48:23 +0300 Subject: [PATCH 121/176] added IPv6 column test Signed-off-by: vladimir --- .../columns/FixedStringColumnReader.java | 4 +- .../impl/codec/columns/IPv6Column.java | 27 +++++++ .../impl/codec/columns/IPv6ColumnReader.java | 7 +- .../alltypes/IPv6Test.java | 79 +++++++++++++++++++ 4 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 759eb253ee..623c449af8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -11,7 +11,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; - private List elements; + private List elements; protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); @@ -36,7 +36,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { } elements.add(stringBytes); } - Object[] ret = elements.toArray(); + Object[] ret = elements.toArray(new byte[elements.size()][]); elements = null; return ret; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 4396bd7a00..6beeba5fe0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -4,10 +4,33 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.net.Inet6Address; +import java.net.UnknownHostException; import java.util.List; public class IPv6Column extends FixedStringColumn { public static final int ELEMENT_SIZE = 16; + public static final Inet6Address ZERO_VALUE = ipv6(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + public static final Inet6Address MIN_VALUE = ipv6(new byte[]{ + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, + Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE + }); + public static final Inet6Address MAX_VALUE = ipv6(new byte[]{ + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, + Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE + }); + + private static Inet6Address ipv6(byte[] src) { + try { + return (Inet6Address) Inet6Address.getByAddress(src); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(descr, md); @@ -22,4 +45,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + public Object nullValue() { + return ZERO_VALUE; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index d69f82d267..debd41bae1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -15,7 +15,7 @@ protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet6Address.class || desired == null) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == String.class || desired == null) { byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); try { return Inet6Address.getByAddress(addr); @@ -25,4 +25,9 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return super.getElementInternal(rowIdx, desired); } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java new file mode 100644 index 0000000000..9e906096bc --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -0,0 +1,79 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv6Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.net.Inet6Address; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class IPv6Test extends AllTypesBase { + public IPv6Test() { + super("ipv6", new MyColumnChecker<>(Inet6Address.class, null, null, null, null)); + } + + private static Inet6Address ipv6(int b1, int b2, int b3, int b4, int b5, int b6, int b7, int b8, + int b9, int b10, int b11, int b12, int b13, int b14, int b15, int b16) { + try { + return (Inet6Address) Inet6Address.getByAddress(new byte[]{ + (byte)b1, (byte)b2, (byte)b3, (byte)b4, + (byte)b5, (byte)b6, (byte)b7, (byte)b8, + (byte)b9, (byte)b10, (byte)b11, (byte)b12, + (byte)b13, (byte)b14, (byte)b15, (byte)b16 + }); + } catch (UnknownHostException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public List createBatch() { + Inet6Address v1 = ipv6(192, 168, 35, 255, 44, 42, 42, 55, 78, 90, -120, 22, 10, -67, -90, -43); + Inet6Address v2 = ipv6(14, 23, 21, 54, 76, 90, 12, 11, -43, -11, -55, 93, 43, 87, -32, -21); + Inet6Address v3 = ipv6(32, 11, 85, 0, 14, -12, -98, 120, 43, 32, -65, 2, 41, -9, 0, 11); + Inet6Address v4 = ipv6(11, 0, 0, 0, 14, -43, 2, 65, 32, 14, 87, 3, 11, -9, 97, 11); + Inet6Address v5 = ipv6(11, 98, 32, 65, 11, -46, 0, 31, 99, 104, 54, 11, 11, -65, 111, 14); + Inet6Address v6 = ipv6(10, 10, 22, 78, -43, -46, 2, 98, 99, 43, 11, 2, -11, -33, 0, 1); + Inet6Address nv = IPv6Column.ZERO_VALUE; + Inet6Address mn = IPv6Column.MIN_VALUE; + Inet6Address mx = IPv6Column.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mn, mn}, new Inet6Address[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mn}, new Inet6Address[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Inet6Address[]{mx, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mx, null, mx}, new Inet6Address[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Inet6Address[]{mn, mx}, new Inet6Address[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{mn, null, mx}, new Inet6Address[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{}, new Inet6Address[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}}, v2, v3, new Inet6Address[]{}, new Inet6Address[][][]{{{}}}, new Inet6Address[]{null}, new Inet6Address[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv}, new Inet6Address[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Inet6Address[]{nv, mn, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, mn, null, mx}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, v1, null, nv, mx, v3}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, v2, null, v3, v2}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, v1, null, nv, mx, v3}, new Inet6Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Inet6Address[]{v3, v1, nv, mx, v4}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, v2, null, v3, v2}, new Inet6Address[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Inet6Address[]{v1, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Inet6Address[]{v1, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v2, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Inet6Address[]{nv, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, null, v4}, new Inet6Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Inet6Address[]{nv, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{nv, null, nv}, new Inet6Address[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Inet6Address[]{v4, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v3, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v4, nv, nv}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v2, nv, null}, new Inet6Address[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Inet6Address[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Inet6Address[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From c7228b234ebc799e5651731019ab88b5517bc857 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 01:14:16 +0300 Subject: [PATCH 122/176] added Int16/32/64 tests Signed-off-by: vladimir --- .../impl/codec/columns/UInt64Column.java | 4 ++ .../alltypes/Int16Test.java | 62 +++++++++++++++++++ .../alltypes/Int32Test.java | 62 +++++++++++++++++++ .../alltypes/Int64Test.java | 62 +++++++++++++++++++ .../alltypes/Int8Test.java | 12 ++-- 5 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index af256bacda..d98bc133cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -19,4 +19,8 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt64ColumnWriter(data, descriptor, columnIndex); } + + public Object nullValue() { + return 0L; + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java new file mode 100644 index 0000000000..8a53198a18 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int16Test extends AllTypesBase { + public Int16Test() { + super("int16", new MyColumnChecker<>(Short.class, Tuple::getShort, Row::getShort, Tuple::getArrayOfShorts, Row::getArrayOfShorts)); + } + + @Override + public List createBatch() { + Short v1 = 10; + Short v2 = Short.MIN_VALUE / 3; + Short v3 = Short.MAX_VALUE / 3; + Short v4 = Short.MIN_VALUE / 2; + Short v5 = Short.MAX_VALUE / 2; + Short v6 = -70; + Short nv = 0; + Short mn = Short.MIN_VALUE; + Short mx = Short.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mx, mx}, new Short[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mx, null, mx}, new Short[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Short[]{mn, mx}, new Short[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mx}, new Short[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, v1, null, nv, mx, v3}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Short[]{v3, v1, nv, mx, v4}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, v2, null, v3, v2}, new Short[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Short[]{v1, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, v4}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Short[]{nv, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, null, nv}, new Short[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v3, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v4, nv, nv}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v2, nv, null}, new Short[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Short[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Short[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java new file mode 100644 index 0000000000..0762242de2 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int32Test extends AllTypesBase { + public Int32Test() { + super("int32", new MyColumnChecker<>(Integer.class, Tuple::getInteger, Row::getInteger, Tuple::getArrayOfIntegers, Row::getArrayOfIntegers)); + } + + @Override + public List createBatch() { + Integer v1 = 10; + Integer v2 = Integer.MIN_VALUE / 3; + Integer v3 = Integer.MAX_VALUE / 3; + Integer v4 = Integer.MIN_VALUE / 2; + Integer v5 = Integer.MAX_VALUE / 2; + Integer v6 = -70; + Integer nv = 0; + Integer mn = Integer.MIN_VALUE; + Integer mx = Integer.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, v4}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, nv}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java new file mode 100644 index 0000000000..360c60d135 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Int64Test extends AllTypesBase { + public Int64Test() { + super("int64", new MyColumnChecker<>(Long.class, Tuple::getLong, Row::getLong, Tuple::getArrayOfLongs, Row::getArrayOfLongs)); + } + + @Override + public List createBatch() { + Long v1 = 10L; + Long v2 = Long.MIN_VALUE / 3; + Long v3 = Long.MAX_VALUE / 3; + Long v4 = Long.MIN_VALUE / 2; + Long v5 = Long.MAX_VALUE / 2; + Long v6 = -70L; + Long nv = 0L; + Long mn = Long.MIN_VALUE; + Long mx = Long.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, v4}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, nv}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 80023dd612..6ef1d16b5d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -16,14 +16,14 @@ public Int8Test() { @Override public List createBatch() { Byte v1 = 10; - Byte v2 = -20; - Byte v3 = 30; - Byte v4 = -40; - Byte v5 = 60; + Byte v2 = Byte.MIN_VALUE / 3; + Byte v3 = Byte.MAX_VALUE / 3; + Byte v4 = Byte.MIN_VALUE / 2; + Byte v5 = Byte.MAX_VALUE / 2; Byte v6 = -70; Byte nv = 0; - Byte mn = -128; - Byte mx = 127; + Byte mn = Byte.MIN_VALUE; + Byte mx = Byte.MAX_VALUE; return Arrays.asList( // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t From 4ddb4d42c5951736948113342b6a5cc400f7aeb1 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 14:26:02 +0300 Subject: [PATCH 123/176] fixed fragmented read issue Signed-off-by: vladimir --- .../codec/ClickhouseStreamDataSource.java | 7 ++-- .../codec/Lz4ClickhouseStreamDataSource.java | 32 ++++++------------- .../codec/RawClickhouseStreamDataSource.java | 4 +++ .../src/test/python/all_types_table.sql | 1 + .../src/test/python/gen_all_types_tables.py | 2 +- .../src/test/resources/init.sql | 3 +- 6 files changed, 22 insertions(+), 27 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index dfb768e1b6..8503205e12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -2,8 +2,12 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; public interface ClickhouseStreamDataSource { + Logger LOG = LoggerFactory.getLogger(ClickhouseStreamDataSource.class); + void moreData(ByteBuf buf, ByteBufAllocator ctx); int readableBytes(); void skipBytes(int length); @@ -19,6 +23,5 @@ public interface ClickhouseStreamDataSource { void readBytes(byte[] dst); byte readByte(); String hexdump(); - default void finish(){ - } + void finish(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index b5a8936d9c..f19fced1e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -3,7 +3,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,7 +24,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private Long sizeWithHeader; private Long compressedAndSizeSize; private Long uncompressedSize; - private Integer checkSummedReaderIndex; + private ByteBuf arrayBb; public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; @@ -38,13 +37,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { serverCityHash = new long[2]; dumpHeader(buf); - LOG.info("lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex()); + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); serverCityHash[0] = buf.readLongLE(); serverCityHash[1] = buf.readLongLE(); - checkSummedReaderIndex = buf.readerIndex(); + int checkSummedReaderIndex = buf.readerIndex(); int compressionMethod = buf.readUnsignedByte(); if (compressionMethod != ClickhouseConstants.COMPRESSION_METHOD_LZ4) { decompressedData.release(); @@ -63,6 +62,9 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { } LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + arrayBb = alloc.buffer(sizeWithHeader.intValue()); + buf.readerIndex(checkSummedReaderIndex); + buf.readBytes(arrayBb, 1 + 4 + 4); } } if (uncompressedSize == null) { @@ -71,11 +73,10 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) int compressedDataSize = compressedAndSizeSize.intValue() - 4; if (buf.readableBytes() < compressedDataSize) { + //NB: fragmented read return; } - //TODO: maybe skip allocation if buf.hasArray() == true - ByteBuf arrayBb = alloc.heapBuffer(sizeWithHeader.intValue()); - buf.readerIndex(checkSummedReaderIndex); + //TODO: maybe skip arrayBb allocation if buf.hasArray() == true and not fragmented read^^^^ buf.readBytes(arrayBb); long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size @@ -103,7 +104,6 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { sizeWithHeader = null; compressedAndSizeSize = null; uncompressedSize = null; - checkSummedReaderIndex = null; } private void dumpHeader(ByteBuf buf) { @@ -189,18 +189,4 @@ public String hexdump() { public void finish() { decompressedData.release(); } - - public static void main(String[] args) { - String bytesStr = "747572653a20412062756720776974682073656e696f726974792e3143d201f20273206d616b65207665727920666173742c0b00a06163637572617465206dba00f1106b65732e4f3c7363726970743e616c6572742822546869732073686f756c643a01f002626520646973706c6179656420696e2061fa015177736572203100f00220626f782e22293b3c2f7363726970743e01008ae197e847628104accc74807378ba29825c00000051000000f027010002ffffffff00020102696405496e7433320c000000076d65737361676506537472696e672ae38395e383ace383bce383a0e383af0900f00882afe381aee38399e383b3e38381e3839ee383bce382af060c02800c000001030cb4060c00000100a783ac6cd55c7a7cb5ac46bddb86e21482140000000a000000a0010002ffffffff0000000300000000000a00010002ffffffff0008020a6576656e745f74696d65084461746554696d65cf415f60cf415f60176576656e745f74696d655f6d6963726f7365636f6e64730655496e743332035706001657060009686f73745f6e616d6506537472696e670662686f7273650662686f7273650871756572795f696406537472696e672462643762643639332d383736652d343339382d386135302d3464393763353861343135352462643762643639332d383736652d343339382d386135302d346439376335386134313535097468726561645f69640655496e7436348d040000000000008d04000000000000087072696f7269747904496e7438060706736f7572636506537472696e670c6578656375746551756572790d4d656d6f7279547261636b6572047465787406537472696e674a5265616420313220726f77732c203832302e3030204220696e20302e303031343237373720736563"; - byte[] bytes = new byte[bytesStr.length() / 2]; - for (int i = 0; i < bytesStr.length(); i += 2) { - String s = bytesStr.substring(i, i + 2); - byte b = (byte)Integer.parseInt(s, 16); - bytes[i / 2] = b; - } - ByteBuf arrayBb = Unpooled.wrappedBuffer(bytes); - Long sizeWithHeader = 660L; - long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); - System.err.println(Arrays.toString(Utils.hex(oursCityHash))); - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index e9cd54fdfc..78ea7b8133 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -80,6 +80,10 @@ public double readDoubleLE() { return source.readDoubleLE(); } + @Override + public void finish() { + } + @Override public String hexdump() { return source != null diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index a5e28cd04a..beedfaa555 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -1,4 +1,5 @@ set allow_suspicious_low_cardinality_types=true; +set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( id Int8, diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index fdfe03ba97..868832856c 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -12,7 +12,7 @@ 'Float32', 'Float64', 'IPv6', 'IPv4']; print('set allow_suspicious_low_cardinality_types=true;'); -print('set allow_experimental_bigint_types=true'); +print('set allow_experimental_bigint_types=true;'); for elem_spec in ELEMENTARY_TYPES: table_name = elem_spec['table'] if isinstance(elem_spec, dict) else elem_spec; diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 1eb25dbd79..68b2ea09e4 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -136,8 +136,9 @@ VALUES (12, 'フレームワークのベンチマーク'); ---almost all possible supported types +--almost all possible supported types tables(maybe except experimental ones) set allow_suspicious_low_cardinality_types=true; +set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( id Int8, From f43cf8784d768eb3e7bb30a5edeb8e4fefa5354b Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 4 Apr 2021 19:42:56 +0300 Subject: [PATCH 124/176] added DateTime64 test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 4 +- .../ClickhouseNativeDatabaseMetadata.java | 9 ++- .../impl/codec/DatabaseMetadataReader.java | 4 +- .../impl/codec/columns/ArrayColumn.java | 17 ++++- .../impl/codec/columns/ArrayColumnReader.java | 12 +--- .../impl/codec/columns/ArrayColumnWriter.java | 4 +- .../impl/codec/columns/ClickhouseColumns.java | 16 +++-- .../impl/codec/columns/DateTime64Column.java | 14 +++- .../codec/columns/DateTime64ColumnReader.java | 5 +- .../codec/columns/DateTime64ColumnWriter.java | 48 +++++++++++++ .../ArraySerDesTest.java | 2 +- .../ClickhouseResource.java | 6 +- .../alltypes/DateTime64Test.java | 67 +++++++++++++++++++ 13 files changed, 174 insertions(+), 34 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index a76fff7108..a36cc4146f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -39,7 +39,7 @@ public class ClickhouseConstants { public static final String OPTION_QUARTER_DURATION = "days_in_quarter"; public static final String OPTION_MONTH_DURATION = "days_in_month"; public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; - + public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; @@ -48,5 +48,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index a2f5164f24..990d4f8001 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -23,11 +23,13 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration yearDuration; private final Duration quarterDuration; private final Duration monthDuration; + private final boolean saturateExtraNanos; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, - Duration yearDuration, Duration quarterDuration, Duration monthDuration) { + Duration yearDuration, Duration quarterDuration, Duration monthDuration, + boolean saturateExtraNanos) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -43,6 +45,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.yearDuration = yearDuration; this.quarterDuration = quarterDuration; this.monthDuration = monthDuration; + this.saturateExtraNanos = saturateExtraNanos; } @Override @@ -109,6 +112,10 @@ public Duration monthDuration() { return monthDuration; } + public boolean isSaturateExtraNanos() { + return saturateExtraNanos; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 849d4a038b..7845ded01c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -81,10 +81,12 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { int daysInMonth = Integer.parseInt(properties.getOrDefault(ClickhouseConstants.OPTION_MONTH_DURATION, "30")); ZoneId serverZoneId = serverZoneIdName == null ? null : ZoneId.of(serverZoneIdName); ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); + String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); + boolean saturateExtraNanos = "saturate".equals(extraNanos); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), - Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth)); + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos); } private ZoneId getDefaultZoneId(ZoneId serverZoneId) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index ab901e26ce..4a4a3acf83 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -8,18 +8,29 @@ public class ArrayColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseNativeColumnDescriptor elementaryDescr; + public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; + this.elementaryDescr = elementaryDescr(descriptor); } - @Override + private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { + ClickhouseNativeColumnDescriptor tmp = descr; + while (tmp.isArray()) { + tmp = tmp.getNestedDescr(); + } + return tmp; + } + + @Override public ClickhouseColumnReader reader(int nRows) { - return new ArrayColumnReader(nRows, descriptor, md); + return new ArrayColumnReader(nRows, descriptor, elementaryDescr, md); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new ArrayColumnWriter(data, descriptor, md, columnIndex); + return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 29658b321c..345aaa891b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -30,18 +30,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; private List curLevelSlice; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementTypeDescr = elementaryDescr(descr); - } - - static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; + this.elementTypeDescr = elementTypeDescr; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 3bcde33a44..1cf50ea9fc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -16,10 +16,10 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md, int columnIndex) { super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; - this.elementTypeDescr = ArrayColumnReader.elementaryDescr(descriptor); + this.elementTypeDescr = elementTypeDescr; this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8c72b1f927..29553cafd9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -111,7 +111,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64ColumnReader.ELEMENT_SIZE, + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, @@ -198,19 +198,23 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de if (nativeType.endsWith(")")) { int openBracePos = nativeType.indexOf("("); String dateModifiers = nativeType.substring(openBracePos + 1, nativeType.length() - 1); - if (descr.getElementSize() == DateTime64ColumnReader.ELEMENT_SIZE) { + if (descr.getElementSize() == DateTime64Column.ELEMENT_SIZE) { String[] modifiers = dateModifiers.split(","); precision = Integer.parseInt(modifiers[0].trim()); - zoneId = modifiers.length == 2 - ? ZoneId.of(modifiers[1].trim()) - : md.getDefaultZoneId(); + if (modifiers.length == 2) { + String id = modifiers[1].trim(); + id = id.substring(1, id.length() - 1); + zoneId = ZoneId.of(id); + } else { + zoneId = md.getDefaultZoneId(); + } } else { zoneId = ZoneId.of(dateModifiers); } } else { zoneId = md.getDefaultZoneId(); } - return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, zoneId); + return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index cdc8c7dfc6..41e9e6aa34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -3,17 +3,22 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.time.Instant; import java.time.ZoneId; import java.util.List; public class DateTime64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + private final Integer precision; private final ZoneId zoneId; + private boolean saturateExtraNanos; - public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, ZoneId zoneId) { + public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { super(descriptor); this.precision = precision; this.zoneId = zoneId; + this.saturateExtraNanos = saturateExtraNanos; } @Override @@ -23,6 +28,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalStateException("not implemented"); + return new DateTime64ColumnWriter(data, descriptor, precision, zoneId, saturateExtraNanos, columnIndex); + } + + @Override + public Object nullValue() { + return Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 8214d9086b..47c0668c04 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -9,7 +9,6 @@ import java.time.ZoneId; public class DateTime64ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 8; private final ZoneId zoneId; private final BigInteger invTickSize; @@ -22,7 +21,7 @@ public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= DateTime64Column.ELEMENT_SIZE * nRows) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { @@ -32,7 +31,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); data[i] = dt; } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(DateTime64Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java new file mode 100644 index 0000000000..fd0fa8887c --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -0,0 +1,48 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.math.BigInteger; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.List; + +public class DateTime64ColumnWriter extends ClickhouseColumnWriter { + private final BigInteger invTickSize; + private final long invTickLong; + private final ZoneId zoneId; + private final boolean saturateExtraNanos; + + public DateTime64ColumnWriter(List data, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { + super(data, descr, columnIndex); + this.zoneId = zoneId; + this.invTickSize = BigInteger.TEN.pow(precision); + this.invTickLong = invTickSize.longValueExact(); + this.saturateExtraNanos = saturateExtraNanos; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + OffsetDateTime dt = (OffsetDateTime) val; + //TODO: maybe check zone offset + long tickCount = invTickSize.multiply(BigInteger.valueOf(dt.toEpochSecond())).longValue(); + long nanos = dt.getNano(); + if (nanos < invTickLong) { + tickCount += nanos; + } else { + if (saturateExtraNanos) { + tickCount += invTickLong - 1; + } else { + throw new IllegalArgumentException("nano adjustment " + nanos + " is too big, max " + invTickLong); + } + } + sink.writeLongLE(tickCount); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(DateTime64Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 114e849b0e..52341eaa8a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -36,7 +36,7 @@ public static Iterable dataForTest() { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null); + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 4f96443285..7d1a77d04f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -34,9 +34,9 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "java-driver") .addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") - .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo"); - //.addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe%2FOslo"); - //.addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") + .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") + .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java new file mode 100644 index 0000000000..f22a1765aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -0,0 +1,67 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class DateTime64Test extends AllTypesBase { + public DateTime64Test() { + super("datetime64", new MyColumnChecker<>(OffsetDateTime.class, Tuple::getOffsetDateTime, Row::getOffsetDateTime, Tuple::getArrayOfOffsetDateTimes, Row::getArrayOfOffsetDateTimes), false); + } + + @Override + public List createBatch() { + ZoneId zoneId = ZoneId.of("Europe/Oslo"); + OffsetDateTime v1 = Instant.ofEpochSecond(1617120094L, 300).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v2 = Instant.ofEpochSecond(1617120094L + 10L, 400).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v3 = Instant.ofEpochSecond(1617120094L + 20L, 500).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v4 = Instant.ofEpochSecond(1617120094L - 10L, 600).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v5 = Instant.ofEpochSecond(1617120094L - 20L, 700).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime v6 = Instant.ofEpochSecond(1617120094L - 200L, 800).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime nv = Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mn = Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + OffsetDateTime mx = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND, 999).atZone(zoneId).toOffsetDateTime(); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new OffsetDateTime[]{mn, mn}, new OffsetDateTime[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mn}, new OffsetDateTime[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new OffsetDateTime[]{mx, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mx, null, mx}, new OffsetDateTime[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new OffsetDateTime[]{mn, mx}, new OffsetDateTime[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{mn, null, mx}, new OffsetDateTime[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new OffsetDateTime[]{}, new OffsetDateTime[][][]{{{}}}, new OffsetDateTime[]{null}, new OffsetDateTime[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv}, new OffsetDateTime[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new OffsetDateTime[]{nv, mn, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, mn, null, mx}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new OffsetDateTime[]{v3, v1, nv, mx, v4}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, v1, null, nv, mx, v3}, new OffsetDateTime[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new OffsetDateTime[]{v1, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new OffsetDateTime[]{nv, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{nv, null, v4}, new OffsetDateTime[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new OffsetDateTime[]{v4, nv, nv}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v3, nv, null}, new OffsetDateTime[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new OffsetDateTime[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new OffsetDateTime[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From dff91045f3088e16ae67816d6164429ae0c645ac Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 00:41:45 +0300 Subject: [PATCH 125/176] added Enum8Test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../impl/ClickhouseNativeRowImpl.java | 2 +- .../impl/codec/PacketReader.java | 20 +++--- .../impl/codec/QueryParsers.java | 11 ++- .../impl/codec/columns/ArrayColumnReader.java | 12 +++- .../impl/codec/columns/ClickhouseColumns.java | 7 +- .../impl/codec/columns/Enum16Column.java | 4 +- .../impl/codec/columns/Enum8Column.java | 10 +-- .../impl/codec/columns/Enum8ColumnReader.java | 38 +++++++++- .../impl/codec/columns/Enum8ColumnWriter.java | 59 ++++++++++++++++ .../columns/FixedStringColumnReader.java | 2 +- .../impl/codec/columns/IPv4ColumnReader.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../codec/columns/StringColumnReader.java | 2 +- .../impl/codec/columns/UInt8Column.java | 2 +- .../columns/ClickhouseColumnsTestReader.java | 6 +- .../alltypes/AllTypesBase.java | 10 ++- .../alltypes/Enum8Test.java | 70 +++++++++++++++++++ .../io/vertx/sqlclient/ColumnChecker.java | 5 +- 19 files changed, 230 insertions(+), 37 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index a36cc4146f..3e45a21c57 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -40,6 +40,7 @@ public class ClickhouseConstants { public static final String OPTION_MONTH_DURATION = "days_in_month"; public static final String OPTION_SEND_LOGS_LEVEL = "send_logs_level"; public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; + public static final String OPTION_ENUM_RESOLUTION = "enum_resolution"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; @@ -48,5 +49,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 3a527c4ea1..6de8776d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -34,7 +34,7 @@ public int getColumnIndex(String column) { @Override public Object getValue(int columnIndex) { - return getValue(columnIndex, String.class); + return getValue(columnIndex, Object.class); } private Object getValue(int columnIndex, Class desired) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 78f4805c51..5f211ff479 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -74,6 +74,7 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { + //TODO: find a way to expose profile block to the calling app return readProfileInfoBlock(in); } else if (packetType == ServerPacketType.LOG) { ColumnOrientedBlock block = readDataBlock(alloc, in, false); @@ -90,14 +91,17 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } private void traceServerLogs(ColumnOrientedBlock block) { - LOG.info("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); - List rows = block.rows(); - LOG.info("rows: "); - StringBuilder bldr = new StringBuilder(); - for (ClickhouseNativeRowImpl row : rows) { - bldr.append(rowAsString(row, block.rowDesc())).append("\n"); - } - LOG.info(bldr); + //TODO: find a way to expose logs to the calling app + if (LOG.isDebugEnabled()) { + LOG.debug("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); + List rows = block.rows(); + LOG.debug("rows: "); + StringBuilder bldr = new StringBuilder(); + for (ClickhouseNativeRowImpl row : rows) { + bldr.append(rowAsString(row, block.rowDesc())).append("\n"); + } + LOG.debug(bldr); + } } private String rowAsString(Row row, RowDesc rowDesc) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index b26882c97c..4e519176f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -132,6 +132,7 @@ public static Map parseEnumValues(String nativeType) { boolean gotEq = false; String enumElementName = null; int startEnumValPos = -1; + int signum = 1; for (int i = openBracketPos; i < nativeType.length(); ++i) { char ch = nativeType.charAt(i); if (ch == '\'') { @@ -144,21 +145,25 @@ public static Map parseEnumValues(String nativeType) { } else if (ch == '=') { gotEq = true; } else if (gotEq) { - if (Character.isDigit(ch)) { + if (ch == '-') { + signum = -1; + } if (Character.isDigit(ch)) { if (startEnumValPos == -1) { startEnumValPos = i; } else if (!Character.isDigit(nativeType.charAt(i + 1))) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)); + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i + 1)) * signum; Number key = byteOrShort(enumValue, isByte); result.put(key, enumElementName); + signum = 1; startEnumValPos = -1; enumElementName = null; gotEq = false; } } else if (startEnumValPos != -1) { - int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)); + int enumValue = Integer.parseInt(nativeType.substring(startEnumValPos, i)) * signum; Number key = byteOrShort(enumValue, isByte); result.put(key, enumElementName); + signum = 1; startEnumValPos = -1; enumElementName = null; gotEq = false; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 345aaa891b..39be308b6d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -125,8 +125,16 @@ private Class maybeUnwrapArrayElementType(Class desired) { } private Triplet> asDesiredType(Object[] src, Class desired) { - if (desired == String.class && elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { - return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { + if (desired == String.class || desired == Object.class) { + return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + } + return new Triplet<>(false, src, desired); + } else if (nestedColumn.getClass() == Enum8Column.class) { + Object[] recoded = ((Enum8ColumnReader)nestedColumnReader).recodeValues(src, desired); + return new Triplet<>(true, recoded, desired); + } else if (nestedColumn.getClass() == Enum16Column.class) { + //((Enum16ColumnReader)nestedColumnReader).recodeValues(src, desired); } return new Triplet<>(false, src, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 29553cafd9..caa9cb09c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,5 +1,6 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; @@ -238,10 +239,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new UUIDColumn(descr); } else if (nativeType.startsWith(ENUM_PREFIX)) { Map enumVals = QueryParsers.parseEnumValues(nativeType); + String enumResolutionStr = md.getProperties().getOrDefault(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name"); + boolean enumsByName = "by_name".equals(enumResolutionStr); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { - return new Enum8Column(descr, enumVals); + return new Enum8Column(descr, enumVals, enumsByName); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { - return new Enum16Column(descr, enumVals); + return new Enum16Column(descr, enumVals, enumsByName); } } else if (nativeType.startsWith(INTERVAL_PREFIX)) { Duration multiplier = getDurationMultiplier(descr, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index e52519cbae..ff0f48cc2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -8,10 +8,12 @@ public class Enum16Column extends ClickhouseColumn { private final Map enumVals; + private final boolean enumsByName; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { super(descriptor); this.enumVals = enumVals; + this.enumsByName = enumsByName; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index a54673c121..a2df9d88b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -6,21 +6,23 @@ import java.util.List; import java.util.Map; -public class Enum8Column extends ClickhouseColumn { +public class Enum8Column extends UInt8Column { private final Map enumVals; + private final boolean enumsByName; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals) { + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { super(descriptor); this.enumVals = enumVals; + this.enumsByName = enumsByName; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum8ColumnReader(nRows, descriptor, enumVals); + return new Enum8ColumnReader(nRows, descriptor, enumVals, enumsByName); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Enum8ColumnWriter(data, descriptor, enumVals, columnIndex, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 44693da31b..f7ebf1f344 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -7,15 +7,47 @@ public class Enum8ColumnReader extends UInt8ColumnReader { public static final int ELEMENT_SIZE = 1; private final Map enumVals; + private final boolean enumsByName; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); this.enumVals = (Map) enumVals; + this.enumsByName = enumsByName; } @Override - protected Object getElementInternal(int rowIdx, Class desired) { + protected Object getElementInternal(int rowIdx, Class desired) { Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + return recodeElement(key, desired); + } + + private Object recodeElement(Byte key, Class desired) { + if (Number.class.isAssignableFrom(desired)) { + return key; + } + String str = enumVals.get(key); + if (desired.isEnum()) { + if (enumsByName) { + return Enum.valueOf(desired, str); + } else { + return desired.getEnumConstants()[key]; + } + } + return str; + } + + Object[] recodeValues(Object[] src, Class desired) { + Byte[] bytes = (Byte[])src; + if (desired == Object.class) { + desired = String.class; + } + Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); + for (int idx = 0; idx < ret.length; ++idx) { + Byte el = bytes[idx]; + if (el != null) { + ret[idx] = recodeElement(el, desired); + } + } + return ret; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java new file mode 100644 index 0000000000..732e5b961d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -0,0 +1,59 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Enum8ColumnWriter extends UInt8ColumnWriter { + private final Map enumIndexToName; + private final Map enumNameToIndex; + private final boolean enumsByName; + + public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Map enumVals, + int columnIndex, boolean enumsByName) { + super(data, columnDescriptor, columnIndex); + this.enumIndexToName = enumVals; + this.enumNameToIndex = buildReverseIndex(enumVals); + this.enumsByName = enumsByName; + } + + private Map buildReverseIndex(Map enumVals) { + Map ret = new HashMap<>(); + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getValue(), entry.getKey()); + } + return ret; + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number idx; + if (val.getClass() == String.class) { + idx = enumNameToIndex.get(val); + } else if (val.getClass().isEnum()) { + Enum enumVal = (Enum) val; + if (enumsByName) { + idx = enumNameToIndex.get(enumVal.name()); + } else { + Byte tmp = (byte) enumVal.ordinal(); + if (enumIndexToName.containsKey(tmp)) { + idx = tmp; + } else { + idx = null; + } + } + } else if (val instanceof Number) { + idx = (Number) val; + } else { + throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); + } + if (idx == null) { + throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToIndex.keySet()); + } + super.serializeDataElement(sink, idx); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 623c449af8..58908d1e18 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -44,7 +44,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { + if ((desired == String.class || desired == Object.class) && tmp != null) { return new String((byte[])tmp, charset); } return tmp; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 9cb58387f4..66e8b8e681 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -14,7 +14,7 @@ public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet4Address.class || desired == String.class || desired == null) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { Long addr = (Long) super.getElementInternal(rowIdx, byte[].class); try { return Inet4Address.getByAddress(intBytes(addr)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index debd41bae1..4afefc7d27 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -15,7 +15,7 @@ protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDes @Override protected Object getElementInternal(int rowIdx, Class desired) { - if (desired == InetAddress.class || desired == Inet6Address.class || desired == String.class || desired == null) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { byte[] addr = (byte[]) super.getElementInternal(rowIdx, byte[].class); try { return Inet6Address.getByAddress(addr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 61fd984492..cd87d42375 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -51,7 +51,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); - if (desired == String.class && tmp != null) { + if ((desired == String.class || desired == Object.class) && tmp != null) { return new String((byte[])tmp, charset); } return tmp; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 8ec47c591e..aed243495e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -22,7 +22,7 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - if (descriptor.isUnsigned()) { + if (descriptor.isUnsigned()) { return (short) 0; } else { return (byte) 0; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 8704f656de..3d9725e0a9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -27,8 +27,8 @@ public static Iterable dataForTest() { java.util.function.Function byteConverter = Integer::byteValue; java.util.function.Function shortConverter = Integer::shortValue; return Arrays.asList(new Object[][]{ - {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", byteConverter}, - {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28)", shortConverter} + {"Enum8", "Enum8('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28,'neg1'=-1, 'neg2' = -22)", byteConverter}, + {"Enum16", "Enum16('aa4' = 1, '1b3b2' = 22, '1b3b3' = 24,'1b3b4' = 25,'1b3b5'= 26,'1b3b6' =27,'1b3b7'=28,'neg1'=-1, 'neg2' = -22)", shortConverter} }); } @@ -47,6 +47,8 @@ public void testParseEnumVals() { expected.put(key(26), "1b3b5"); expected.put(key(27), "1b3b6"); expected.put(key(28), "1b3b7"); + expected.put(key(-1), "neg1"); + expected.put(key(-22), "neg2"); Assert.assertEquals(expected, vals); } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 3acfaa4aa6..a07b680d5d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -148,8 +148,8 @@ public void checkColumn(Row row, int index, String name, R expected) { //arrays are non-nullable if (expected != null && expected.getClass().isArray()) { boolean multidimensional = expected.getClass().getComponentType().isArray() && expected.getClass().getComponentType() != byte[].class; - if (componentType == byte[].class) { - //ask driver to turn off String encoding + if (componentType == byte[].class || componentType.isEnum()) { + //ask driver to turn off String encoding for BLOBs or force encoding for Enums checker = checker.returns((tuple, idx) -> tuple.get(expected.getClass(), idx), (r, colName) -> r.get(expected.getClass(), colName), (Object[]) expected); } else { checker = checker.returns(Tuple::getValue, Row::getValue, (Object[]) expected); @@ -160,7 +160,11 @@ public void checkColumn(Row row, int index, String name, R expected) { } } else { //regular non-array elements - checker = checker.returns(Tuple::getValue, Row::getValue, expected); + Object v = expected; + if (componentType.isEnum()) { + v = expected == null ? null : (R) ((Enum)expected).name(); + } + checker = checker.returns(Tuple::getValue, Row::getValue, v); if (byIndexGetter != null) { checker = checker.returns(byIndexGetter, byNameGetter, expected); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java new file mode 100644 index 0000000000..6d0a68d6aa --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -0,0 +1,70 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Enum8Test extends AllTypesBase { + public Enum8Test() { + this(Test8Enum.class); + } + + private Enum8Test(Class cls) { + super("enum8", new MyColumnChecker<>(cls, + (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); + } + + @Override + public List createBatch() { + Test8Enum v1 = Test8Enum.v0; + Test8Enum v2 = Test8Enum.v1; + Test8Enum v3 = Test8Enum.v2; + Test8Enum v4 = Test8Enum.v3; + Test8Enum v5 = Test8Enum.v4; + Test8Enum v6 = Test8Enum.v5; + Test8Enum nv = Test8Enum.v0; + Test8Enum mn = Test8Enum.v3; + Test8Enum mx = Test8Enum.v6; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Test8Enum[]{v1, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Test8Enum[]{nv, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, null, v4}, new Test8Enum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Test8Enum[]{v4, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} + +enum Test8Enum { + v0, v1, v2, v3, v4, v5, v6 +} diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java index c96e354659..8ca7aa27a0 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/ColumnChecker.java @@ -98,12 +98,13 @@ public ColumnChecker returns(SerializableBiFunction byInd blackList.add(byIndexMeth); Method byNameMeth = byNameGetter.method(); blackList.add(byNameMeth); + String nameIndex = name + "/" + index; expects.add(row -> { Object actual = byIndexGetter.apply(row, index); try { check.accept((R) actual); } catch (AssertionError cause) { - AssertionFailedError failure = new AssertionFailedError("Expected that " + byIndexMeth + " would not fail: " + cause.getMessage()); + AssertionFailedError failure = new AssertionFailedError("Expected that " + byIndexMeth + " would not fail for " + nameIndex + ": " + cause.getMessage()); failure.setStackTrace(failure.getStackTrace()); throw failure; } @@ -111,7 +112,7 @@ public ColumnChecker returns(SerializableBiFunction byInd try { check.accept((R) actual); } catch (AssertionError cause) { - AssertionFailedError failure = new AssertionFailedError("Expected that " + byNameMeth + " would not fail: " + cause.getMessage()); + AssertionFailedError failure = new AssertionFailedError("Expected that " + byNameMeth + " would not fail for " + nameIndex + ": " + cause.getMessage()); failure.setStackTrace(failure.getStackTrace()); throw failure; } From 82c9ec6c5144f02b5a626875b4e689c710cd8d32 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 01:43:41 +0300 Subject: [PATCH 126/176] added Enum16Test Signed-off-by: vladimir --- .../codec/Lz4ClickhouseStreamDataSource.java | 12 +++- .../clickhousenative/impl/codec/Utils.java | 20 ------ .../impl/codec/columns/ArrayColumnReader.java | 6 +- .../impl/codec/columns/ColumnUtils.java | 12 ++++ .../codec/columns/Decimal128ColumnReader.java | 3 +- .../codec/columns/Decimal256ColumnReader.java | 3 +- .../impl/codec/columns/Enum16Column.java | 6 +- .../codec/columns/Enum16ColumnReader.java | 15 +++-- .../codec/columns/Enum16ColumnWriter.java | 24 +++++++ .../impl/codec/columns/Enum8Column.java | 2 +- .../impl/codec/columns/Enum8ColumnReader.java | 41 ++---------- .../impl/codec/columns/Enum8ColumnWriter.java | 45 ++----------- .../impl/codec/columns/EnumColumnDecoder.java | 43 +++++++++++++ .../impl/codec/columns/EnumColumnEncoder.java | 51 +++++++++++++++ .../impl/codec/columns/EnumColumnReader.java | 5 ++ .../codec/columns/Int128ColumnReader.java | 3 +- .../codec/columns/Int128ColumnWriter.java | 3 +- .../alltypes/Enum16Test.java | 12 ++++ .../alltypes/Enum8Test.java | 63 +----------------- .../alltypes/EnumTest.java | 64 +++++++++++++++++++ .../alltypes/TestEnum.java | 5 ++ 21 files changed, 260 insertions(+), 178 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index f19fced1e1..5bf1988c4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -89,8 +89,8 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + - Arrays.toString(Utils.hex(serverCityHash)) + "; ours: " + - Arrays.toString(Utils.hex(oursCityHash))); + Arrays.toString(hex(serverCityHash)) + "; ours: " + + Arrays.toString(hex(oursCityHash))); } byte[] uncompressedBytes = new byte[uncompressedSize.intValue()]; LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); @@ -189,4 +189,12 @@ public String hexdump() { public void finish() { decompressedData.release(); } + + private static String[] hex(long[] src) { + String[] result = new String[src.length]; + for (int i = 0; i < src.length; ++i) { + result[i] = "0x" + Long.toHexString(src[i]); + } + return result; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java deleted file mode 100644 index c1ddf363a3..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Utils.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec; - -public class Utils { - public static String[] hex(long[] src) { - String[] result = new String[src.length]; - for (int i = 0; i < src.length; ++i) { - result[i] = "0x" + Long.toHexString(src[i]); - } - return result; - } - - public static byte[] reverse(byte[] src) { - for (int i = 0, j = src.length - 1; i < j; ++i, --j) { - byte tmp = src[i]; - src[i] = src[j]; - src[j] = tmp; - } - return src; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 39be308b6d..0bea6ea2e8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -130,11 +130,9 @@ private Triplet> asDesiredType(Object[] src, Class(true, stringifyByteArrays(src, md.getStringCharset()), desired); } return new Triplet<>(false, src, desired); - } else if (nestedColumn.getClass() == Enum8Column.class) { - Object[] recoded = ((Enum8ColumnReader)nestedColumnReader).recodeValues(src, desired); + } else if (nestedColumnReader instanceof EnumColumnReader) { + Object[] recoded = ((EnumColumnReader)nestedColumnReader).recodeValues(src, desired); return new Triplet<>(true, recoded, desired); - } else if (nestedColumn.getClass() == Enum16Column.class) { - //((Enum16ColumnReader)nestedColumnReader).recodeValues(src, desired); } return new Triplet<>(false, src, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java new file mode 100644 index 0000000000..25cb3ce00e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -0,0 +1,12 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class ColumnUtils { + public static byte[] reverse(byte[] src) { + for (int i = 0, j = src.length - 1; i < j; ++i, --j) { + byte tmp = src[i]; + src[i] = src[j]; + src[j] = tmp; + } + return src; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java index a5ab29014d..9952606891 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -29,7 +28,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java index e813a128c2..54edf0ab6d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -29,7 +28,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - BigInteger bi = new BigInteger(Utils.reverse(readBuffer)); + BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); } else { in.skipBytes(ELEMENT_SIZE); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index ff0f48cc2e..8caa341db6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; -public class Enum16Column extends ClickhouseColumn { +public class Enum16Column extends UInt16Column { private final Map enumVals; private final boolean enumsByName; @@ -18,11 +18,11 @@ public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 041070b7db..592595ba62 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -4,18 +4,23 @@ import java.util.Map; -public class Enum16ColumnReader extends UInt16ColumnReader { +public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 2; - private final Map enumVals; + private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals) { + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); - this.enumVals = (Map) enumVals; + this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Short key = (Short) super.getElementInternal(rowIdx, desired); - return enumVals.get(key); + return columnRecoder.recodeElement(key, desired); + } + + @Override + public Object[] recodeValues(Object[] src, Class desired) { + return columnRecoder.recodeValues(src, desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java new file mode 100644 index 0000000000..cf99ad527d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -0,0 +1,24 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; +import java.util.Map; + +public class Enum16ColumnWriter extends UInt16ColumnWriter { + private final EnumColumnEncoder columnEncoder; + + public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + Map enumVals, boolean enumsByName) { + super(data, columnDescriptor, columnIndex); + this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + Number idx = columnEncoder.encode(val); + super.serializeDataElement(sink, idx); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index a2df9d88b5..6fdac43c99 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -23,6 +23,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum8ColumnWriter(data, descriptor, enumVals, columnIndex, enumsByName); + return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index f7ebf1f344..e3276ecc36 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -4,50 +4,23 @@ import java.util.Map; -public class Enum8ColumnReader extends UInt8ColumnReader { +public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 1; - private final Map enumVals; - private final boolean enumsByName; + private final EnumColumnDecoder columnRecoder; public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { super(nRows, descr); - this.enumVals = (Map) enumVals; - this.enumsByName = enumsByName; + this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); } @Override protected Object getElementInternal(int rowIdx, Class desired) { Byte key = (Byte) super.getElementInternal(rowIdx, desired); - return recodeElement(key, desired); + return columnRecoder.recodeElement(key, desired); } - private Object recodeElement(Byte key, Class desired) { - if (Number.class.isAssignableFrom(desired)) { - return key; - } - String str = enumVals.get(key); - if (desired.isEnum()) { - if (enumsByName) { - return Enum.valueOf(desired, str); - } else { - return desired.getEnumConstants()[key]; - } - } - return str; - } - - Object[] recodeValues(Object[] src, Class desired) { - Byte[] bytes = (Byte[])src; - if (desired == Object.class) { - desired = String.class; - } - Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); - for (int idx = 0; idx < ret.length; ++idx) { - Byte el = bytes[idx]; - if (el != null) { - ret[idx] = recodeElement(el, desired); - } - } - return ret; + @Override + public Object[] recodeValues(Object[] src, Class desired) { + return columnRecoder.recodeValues(src, desired); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 732e5b961d..b97e3cdd57 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -4,56 +4,21 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; -import java.util.HashMap; import java.util.List; import java.util.Map; public class Enum8ColumnWriter extends UInt8ColumnWriter { - private final Map enumIndexToName; - private final Map enumNameToIndex; - private final boolean enumsByName; + private final EnumColumnEncoder columnEncoder; - public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Map enumVals, - int columnIndex, boolean enumsByName) { + public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + Map enumVals, boolean enumsByName) { super(data, columnDescriptor, columnIndex); - this.enumIndexToName = enumVals; - this.enumNameToIndex = buildReverseIndex(enumVals); - this.enumsByName = enumsByName; - } - - private Map buildReverseIndex(Map enumVals) { - Map ret = new HashMap<>(); - for (Map.Entry entry : enumVals.entrySet()) { - ret.put(entry.getValue(), entry.getKey()); - } - return ret; + this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); } @Override protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { - Number idx; - if (val.getClass() == String.class) { - idx = enumNameToIndex.get(val); - } else if (val.getClass().isEnum()) { - Enum enumVal = (Enum) val; - if (enumsByName) { - idx = enumNameToIndex.get(enumVal.name()); - } else { - Byte tmp = (byte) enumVal.ordinal(); - if (enumIndexToName.containsKey(tmp)) { - idx = tmp; - } else { - idx = null; - } - } - } else if (val instanceof Number) { - idx = (Number) val; - } else { - throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); - } - if (idx == null) { - throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToIndex.keySet()); - } + Number idx = columnEncoder.encode(val); super.serializeDataElement(sink, idx); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java new file mode 100644 index 0000000000..d0b043d01d --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -0,0 +1,43 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.Map; + +class EnumColumnDecoder { + private final Map enumKeyToName; + private final boolean enumsByName; + + EnumColumnDecoder(Map enumVals, boolean enumsByName) { + this.enumKeyToName = enumVals; + this.enumsByName = enumsByName; + } + + public Object recodeElement(Number key, Class desired) { + if (Number.class.isAssignableFrom(desired)) { + return key; + } + String str = enumKeyToName.get(key); + if (desired.isEnum()) { + if (enumsByName) { + return Enum.valueOf(desired, str); + } else { + return desired.getEnumConstants()[key.intValue()]; + } + } + return str; + } + + Object[] recodeValues(Object[] src, Class desired) { + Number[] bytes = (Number[])src; + if (desired == Object.class) { + desired = String.class; + } + Object[] ret = (Object[]) java.lang.reflect.Array.newInstance(desired, src.length); + for (int idx = 0; idx < ret.length; ++idx) { + Number el = bytes[idx]; + if (el != null) { + ret[idx] = recodeElement(el, desired); + } + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java new file mode 100644 index 0000000000..bdadb815b0 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -0,0 +1,51 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.HashMap; +import java.util.Map; + +public class EnumColumnEncoder { + private final Map enumKeyToName; + private final Map enumNameToKey; + private final boolean enumsByName; + + public EnumColumnEncoder(Map enumKeyToName, boolean enumsByName) { + this.enumKeyToName = enumKeyToName; + this.enumNameToKey = buildReverseIndex(enumKeyToName); + this.enumsByName = enumsByName; + } + + private Map buildReverseIndex(Map enumVals) { + Map ret = new HashMap<>(); + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getValue(), entry.getKey()); + } + return ret; + } + + public Number encode(Object val) { + Number idx; + if (val.getClass() == String.class) { + idx = enumNameToKey.get(val); + } else if (val.getClass().isEnum()) { + Enum enumVal = (Enum) val; + if (enumsByName) { + idx = enumNameToKey.get(enumVal.name()); + } else { + Byte tmp = (byte) enumVal.ordinal(); + if (enumKeyToName.containsKey(tmp)) { + idx = tmp; + } else { + idx = null; + } + } + } else if (val instanceof Number) { + idx = (Number) val; + } else { + throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); + } + if (idx == null) { + throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToKey.keySet()); + } + return idx; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java new file mode 100644 index 0000000000..990ea8e110 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -0,0 +1,5 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public interface EnumColumnReader { + Object[] recodeValues(Object[] src, Class desired); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index f1d24a7564..d8976952c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import java.math.BigInteger; @@ -20,7 +19,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); - data[i] = new BigInteger(Utils.reverse(readBuffer)); + data[i] = new BigInteger(ColumnUtils.reverse(readBuffer)); } else { in.skipBytes(Int128Column.ELEMENT_SIZE); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 5b80729691..34b1c10c7f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -2,7 +2,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.Utils; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -16,7 +15,7 @@ public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor col @Override protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { BigInteger bi = (BigInteger) val; - byte[] bytes = Utils.reverse(bi.toByteArray()); + byte[] bytes = ColumnUtils.reverse(bi.toByteArray()); sink.writeBytes(bytes); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java new file mode 100644 index 0000000000..8a391480e8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -0,0 +1,12 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +@RunWith(VertxUnitRunner.class) +public class Enum16Test extends EnumTest { + public Enum16Test() { + super("enum16"); + } +} + diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 6d0a68d6aa..3650819ffa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,70 +1,11 @@ package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; -import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; -import java.util.Arrays; -import java.util.List; - @RunWith(VertxUnitRunner.class) -public class Enum8Test extends AllTypesBase { +public class Enum8Test extends EnumTest { public Enum8Test() { - this(Test8Enum.class); - } - - private Enum8Test(Class cls) { - super("enum8", new MyColumnChecker<>(cls, - (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); - } - - @Override - public List createBatch() { - Test8Enum v1 = Test8Enum.v0; - Test8Enum v2 = Test8Enum.v1; - Test8Enum v3 = Test8Enum.v2; - Test8Enum v4 = Test8Enum.v3; - Test8Enum v5 = Test8Enum.v4; - Test8Enum v6 = Test8Enum.v5; - Test8Enum nv = Test8Enum.v0; - Test8Enum mn = Test8Enum.v3; - Test8Enum mx = Test8Enum.v6; - - return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t - Tuple.of((byte)1, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)2, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)3, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)4, mn, mn, new Test8Enum[]{mn, mn}, new Test8Enum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mn}, new Test8Enum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)5, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)6, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), - Tuple.of((byte)7, mx, mx, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)8, mn, mn, new Test8Enum[]{mx, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mx, null, mx}, new Test8Enum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), - Tuple.of((byte)9, mx, mx, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)10, mn, mn, new Test8Enum[]{mn, mx}, new Test8Enum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{mn, null, mx}, new Test8Enum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)11, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)12, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)13, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), - Tuple.of((byte)14, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{}, new Test8Enum[][][]{{{}}} ), - Tuple.of((byte)15, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), - Tuple.of((byte)16, v2, v3, new Test8Enum[]{}, new Test8Enum[][][]{{{}}}, new Test8Enum[]{null}, new Test8Enum[][][]{{{null}}} ), - Tuple.of((byte)17, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)18, v2, v3, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv}, new Test8Enum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)19, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)20, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)21, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)22, v2, v3, new Test8Enum[]{nv, mn, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, mn, null, mx}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)23, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)24, nv, null, new Test8Enum[]{v3, v1, nv, mx, v4}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, v1, null, nv, mx, v3}, new Test8Enum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)25, v1, v1, new Test8Enum[]{v1, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)26, nv, nv, new Test8Enum[]{nv, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{nv, null, v4}, new Test8Enum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)27, v6, v5, new Test8Enum[]{v4, nv, nv}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v3, nv, null}, new Test8Enum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)28, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), - Tuple.of((byte)29, v6, v5, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Test8Enum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Test8Enum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) - ); + super("enum8"); } } - -enum Test8Enum { - v0, v1, v2, v3, v4, v5, v6 -} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java new file mode 100644 index 0000000000..cc16708ba8 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -0,0 +1,64 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; + +public abstract class EnumTest extends AllTypesBase { + public EnumTest(String tableSuffix) { + this(tableSuffix, TestEnum.class); + } + + private EnumTest(String tableSuffix, Class cls) { + super(tableSuffix, new MyColumnChecker<>(cls, + (row, idx) -> row.get(cls, idx), (tp, name) -> tp.get(cls, name), null, null), false); + } + + @Override + public List createBatch() { + TestEnum v1 = TestEnum.v0; + TestEnum v2 = TestEnum.v1; + TestEnum v3 = TestEnum.v2; + TestEnum v4 = TestEnum.v3; + TestEnum v5 = TestEnum.v4; + TestEnum v6 = TestEnum.v5; + TestEnum nv = TestEnum.v0; + TestEnum mn = TestEnum.v3; + TestEnum mx = TestEnum.v6; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mn}, new TestEnum[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new TestEnum[]{mn, mn}, new TestEnum[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mn}, new TestEnum[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, null, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new TestEnum[]{mx, mx}, new TestEnum[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mx, null, mx}, new TestEnum[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new TestEnum[]{mn, mx}, new TestEnum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mx}, new TestEnum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new TestEnum[]{mn, mx}, new TestEnum[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{mn, null, mx}, new TestEnum[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{}, new TestEnum[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{}, new TestEnum[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{}, new TestEnum[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{null}, new TestEnum[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new TestEnum[]{}, new TestEnum[][][]{{{}}}, new TestEnum[]{null}, new TestEnum[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv}, new TestEnum[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new TestEnum[]{nv, mn, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, mn, null, mx}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new TestEnum[]{v3, v1, nv, mx, v4}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, v1, null, nv, mx, v3}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new TestEnum[]{v3, v1, nv, mx, v4}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, v1, null, nv, mx, v3}, new TestEnum[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new TestEnum[]{v1, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, nv, null}, new TestEnum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new TestEnum[]{nv, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{nv, null, v4}, new TestEnum[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new TestEnum[]{v4, nv, nv}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v3, nv, null}, new TestEnum[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new TestEnum[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new TestEnum[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new TestEnum[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} + diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java new file mode 100644 index 0000000000..c20c8fad4f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -0,0 +1,5 @@ +package io.vertx.clickhousenativeclient.alltypes; + +enum TestEnum { + v0, v1, v2, v3, v4, v5, v6 +} From b4fce3d86fa0fe73dfee3b534a19bb77b276a855 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 02:11:04 +0300 Subject: [PATCH 127/176] added Interval array tests Signed-off-by: vladimir --- .../impl/codec/columns/Float32Column.java | 5 +++ .../impl/codec/columns/IntervalColumn.java | 5 +++ .../SpecialTypesTest.java | 37 ++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 9a82e2779f..6cbd90a337 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -19,4 +19,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Float32ColumnWriter(data, descriptor, columnIndex); } + + @Override + public Object nullValue() { + return (float) 0; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 96d6a319aa..a579d07699 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -24,4 +24,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); throw new IllegalStateException("not implemented"); } + + @Override + public Object nullValue() { + return multiplier.multipliedBy(0); + } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 6fa32dba80..c7b72070dd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -13,6 +13,7 @@ import org.junit.runner.RunWith; import java.time.Duration; +import java.util.Arrays; import java.util.Optional; @RunWith(VertxUnitRunner.class) @@ -59,27 +60,57 @@ public void testIntervalWeek(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); } + @Test + public void testIntervalWeekArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalWeek(4), toIntervalWeek(1), toIntervalWeek(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 7), Duration.ofDays(7), Duration.ofDays(0)})); + } + @Test //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" public void testIntervalDay(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); } + @Test + public void testIntervalDayArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalDay(4), toIntervalDay(1), toIntervalDay(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4), Duration.ofDays(1), Duration.ofDays(0)})); + } + @Test public void testIntervalHour(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 HOUR", Duration.class, Optional.of(Duration.ofHours(4))); } + @Test + public void testIntervalHourArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalHour(4), toIntervalHour(1), toIntervalHour(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofHours(4), Duration.ofHours(1), Duration.ofHours(0)})); + } + @Test public void testIntervalMinute(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 MINUTE", Duration.class, Optional.of(Duration.ofMinutes(4))); } + @Test + public void testIntervalMinuteArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalMinute(4), toIntervalMinute(1), toIntervalMinute(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofMinutes(4), Duration.ofMinutes(1), Duration.ofMinutes(0)})); + } + @Test public void testIntervalSecond(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 SECOND", Duration.class, Optional.of(Duration.ofSeconds(4))); } + @Test + public void testIntervalSecondArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalSecond(4), toIntervalSecond(1), toIntervalSecond(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofSeconds(4), Duration.ofSeconds(1), Duration.ofSeconds(0)})); + } + private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( @@ -88,7 +119,11 @@ private void runQuery(TestContext ctx, String query, Class desiredCls, Option if (expected != null && expected.isPresent()) { Row row = res.iterator().next(); Object val = desiredCls == null ? row.getValue(0) : row.get(desiredCls, 0); - ctx.assertEquals(expected.get(), val); + if (desiredCls.isArray()) { + ctx.assertTrue(Arrays.deepEquals((Object[])expected.get(), (Object[])val)); + } else { + ctx.assertEquals(expected.get(), val); + } } })); })); From 923f44be7ed2adb6a6f33ff93c1297ed37f3565f Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 5 Apr 2021 13:50:10 +0300 Subject: [PATCH 128/176] added enum_resolution option Signed-off-by: vladimir --- .../impl/codec/QueryParsers.java | 11 +---- .../impl/codec/columns/ClickhouseColumns.java | 8 ++-- .../impl/codec/columns/Enum16Column.java | 10 ++--- .../codec/columns/Enum16ColumnReader.java | 4 +- .../codec/columns/Enum16ColumnWriter.java | 4 +- .../impl/codec/columns/Enum8Column.java | 10 ++--- .../impl/codec/columns/Enum8ColumnReader.java | 4 +- .../impl/codec/columns/Enum8ColumnWriter.java | 4 +- .../impl/codec/columns/EnumColumnDecoder.java | 25 ++++++++--- .../impl/codec/columns/EnumColumnEncoder.java | 44 ++++++++++++------- .../codec/columns/EnumResolutionMethod.java | 26 +++++++++++ .../impl/codec/columns/IntervalColumn.java | 1 - .../ClickhouseResource.java | 1 + 13 files changed, 98 insertions(+), 54 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 4e519176f6..2405619bd2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -3,14 +3,7 @@ import io.vertx.sqlclient.Tuple; import java.time.temporal.Temporal; -import java.util.AbstractMap; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; //TODO: maybe switch to antlr4 or JavaCC + .jj file (see ClickHouseSqlParser.jj in regular ClickHouse jdbc driver) public class QueryParsers { @@ -127,7 +120,7 @@ public static Map.Entry findKeyWord(String sql, int startPos, C public static Map parseEnumValues(String nativeType) { final boolean isByte = nativeType.startsWith("Enum8("); int openBracketPos = nativeType.indexOf('('); - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); int lastQuotePos = -1; boolean gotEq = false; String enumElementName = null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index caa9cb09c5..8b0b1fd923 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -239,12 +239,12 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new UUIDColumn(descr); } else if (nativeType.startsWith(ENUM_PREFIX)) { Map enumVals = QueryParsers.parseEnumValues(nativeType); - String enumResolutionStr = md.getProperties().getOrDefault(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name"); - boolean enumsByName = "by_name".equals(enumResolutionStr); + String enumResolutionStr = md.getProperties().get(ClickhouseConstants.OPTION_ENUM_RESOLUTION); + EnumResolutionMethod resolutionMethod = enumResolutionStr == null ? EnumResolutionMethod.ORDINAL : EnumResolutionMethod.forOpt(enumResolutionStr); if (descr.getElementSize() == Enum8ColumnReader.ELEMENT_SIZE) { - return new Enum8Column(descr, enumVals, enumsByName); + return new Enum8Column(descr, enumVals, resolutionMethod); } else if (descr.getElementSize() == Enum16ColumnReader.ELEMENT_SIZE) { - return new Enum16Column(descr, enumVals, enumsByName); + return new Enum16Column(descr, enumVals, resolutionMethod); } } else if (nativeType.startsWith(INTERVAL_PREFIX)) { Duration multiplier = getDurationMultiplier(descr, md); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 8caa341db6..5ebd0f1758 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -8,21 +8,21 @@ public class Enum16Column extends UInt16Column { private final Map enumVals; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { + public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum16ColumnReader(nRows, descriptor, enumVals, enumsByName); + return new Enum16ColumnReader(nRows, descriptor, enumVals, resolutionMethod); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); + return new Enum16ColumnWriter(data, descriptor, columnIndex, enumVals, resolutionMethod); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 592595ba62..977d2d893d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -8,9 +8,9 @@ public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumn public static final int ELEMENT_SIZE = 2; private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { + public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); - this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); + this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index cf99ad527d..99237088ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -11,9 +11,9 @@ public class Enum16ColumnWriter extends UInt16ColumnWriter { private final EnumColumnEncoder columnEncoder; public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, - Map enumVals, boolean enumsByName) { + Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); - this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 6fdac43c99..7a4f17f3f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -8,21 +8,21 @@ public class Enum8Column extends UInt8Column { private final Map enumVals; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, boolean enumsByName) { + public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; } @Override public ClickhouseColumnReader reader(int nRows) { - return new Enum8ColumnReader(nRows, descriptor, enumVals, enumsByName); + return new Enum8ColumnReader(nRows, descriptor, enumVals, resolutionMethod); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, enumsByName); + return new Enum8ColumnWriter(data, descriptor, columnIndex, enumVals, resolutionMethod); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index e3276ecc36..4ee4313ad7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -8,9 +8,9 @@ public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnRe public static final int ELEMENT_SIZE = 1; private final EnumColumnDecoder columnRecoder; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, boolean enumsByName) { + public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); - this.columnRecoder = new EnumColumnDecoder(enumVals, enumsByName); + this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index b97e3cdd57..6ab08e9dfa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -11,9 +11,9 @@ public class Enum8ColumnWriter extends UInt8ColumnWriter { private final EnumColumnEncoder columnEncoder; public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, - Map enumVals, boolean enumsByName) { + Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); - this.columnEncoder = new EnumColumnEncoder(enumVals, enumsByName); + this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index d0b043d01d..22eeb055a6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,14 +1,27 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import java.util.HashMap; import java.util.Map; class EnumColumnDecoder { private final Map enumKeyToName; - private final boolean enumsByName; + private final Map enumKeyToOrdinal; + private final EnumResolutionMethod resolutionMethod; - EnumColumnDecoder(Map enumVals, boolean enumsByName) { + EnumColumnDecoder(Map enumVals, EnumResolutionMethod resolutionMethod) { this.enumKeyToName = enumVals; - this.enumsByName = enumsByName; + this.resolutionMethod = resolutionMethod; + this.enumKeyToOrdinal = resolutionMethod == EnumResolutionMethod.ORDINAL ? buildEnumKeyToOrdinal(enumVals) : null; + } + + static Map buildEnumKeyToOrdinal(Map enumVals) { + Map ret = new HashMap<>(); + int idx = 0; + for (Map.Entry entry : enumVals.entrySet()) { + ret.put(entry.getKey(), idx); + ++idx; + } + return ret; } public Object recodeElement(Number key, Class desired) { @@ -17,10 +30,12 @@ public Object recodeElement(Number key, Class desired) { } String str = enumKeyToName.get(key); if (desired.isEnum()) { - if (enumsByName) { + if (resolutionMethod == EnumResolutionMethod.NAME) { return Enum.valueOf(desired, str); - } else { + } else if (resolutionMethod == EnumResolutionMethod.KEY) { return desired.getEnumConstants()[key.intValue()]; + } else { + return desired.getEnumConstants()[enumKeyToOrdinal.get(key)]; } } return str; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index bdadb815b0..960c221cc6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -4,14 +4,24 @@ import java.util.Map; public class EnumColumnEncoder { - private final Map enumKeyToName; + private final Number[] enumOrdinalToKey; private final Map enumNameToKey; - private final boolean enumsByName; + private final EnumResolutionMethod resolutionMethod; - public EnumColumnEncoder(Map enumKeyToName, boolean enumsByName) { - this.enumKeyToName = enumKeyToName; - this.enumNameToKey = buildReverseIndex(enumKeyToName); - this.enumsByName = enumsByName; + public EnumColumnEncoder(Map enumKeyToName, EnumResolutionMethod resolutionMethod) { + this.resolutionMethod = resolutionMethod; + this.enumNameToKey = resolutionMethod == EnumResolutionMethod.NAME ? buildReverseIndex(enumKeyToName) : null; + this.enumOrdinalToKey = resolutionMethod == EnumResolutionMethod.NAME ? null : enumOrdinalToKey(enumKeyToName); + } + + private Number[] enumOrdinalToKey(Map enumVals) { + Number[] ret = new Number[enumVals.size()]; + int idx = 0; + for (Map.Entry entry:enumVals.entrySet()) { + ret[idx] = entry.getKey(); + ++idx; + } + return ret; } private Map buildReverseIndex(Map enumVals) { @@ -23,29 +33,29 @@ private Map buildReverseIndex(Map enumV } public Number encode(Object val) { - Number idx; + Number key; if (val.getClass() == String.class) { - idx = enumNameToKey.get(val); + key = enumNameToKey.get(val); } else if (val.getClass().isEnum()) { Enum enumVal = (Enum) val; - if (enumsByName) { - idx = enumNameToKey.get(enumVal.name()); + if (resolutionMethod == EnumResolutionMethod.NAME) { + key = enumNameToKey.get(enumVal.name()); } else { - Byte tmp = (byte) enumVal.ordinal(); - if (enumKeyToName.containsKey(tmp)) { - idx = tmp; + int ordinal = enumVal.ordinal(); + if (ordinal < enumOrdinalToKey.length) { + key = enumOrdinalToKey[ordinal]; } else { - idx = null; + throw new IllegalArgumentException("ordinal " + ordinal + " for enum val " + enumVal + " is too big, max " + (enumOrdinalToKey.length - 1)); } } } else if (val instanceof Number) { - idx = (Number) val; + key = (Number) val; } else { throw new IllegalArgumentException("don't know how to serialize " + val + " of class " + val.getClass()); } - if (idx == null) { + if (key == null) { throw new IllegalArgumentException(val + " is not in dictionary; possible values: " + enumNameToKey.keySet()); } - return idx; + return key; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java new file mode 100644 index 0000000000..05b3518454 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -0,0 +1,26 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +public enum EnumResolutionMethod { + NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key"); + private static final Map index = Arrays + .stream(EnumResolutionMethod.values()) + .collect(Collectors.toMap(el -> el.optVal, el -> el)); + + String optVal; + + EnumResolutionMethod(String optVal) { + this.optVal = optVal; + } + + public static EnumResolutionMethod forOpt(String optVal) { + EnumResolutionMethod ret = index.get(optVal); + if (ret == null) { + throw new IllegalArgumentException("unknown option value " + optVal); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index a579d07699..e8c7c68727 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -21,7 +21,6 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - //return new IntervalColumnReader(data, descriptor, multiplier, columnIndex); throw new IllegalStateException("not implemented"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 7d1a77d04f..551639f2a4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -36,6 +36,7 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_STRING_CHARSET, "utf-8") .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") + .addProperty(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name") .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } From 8456b0f7b7c54cd603e98631101047ad6bdb3a5b Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 07:55:20 +0300 Subject: [PATCH 129/176] added FixedString test Signed-off-by: vladimir --- .../clickhousenative/ClickhouseConstants.java | 3 +- .../ClickhouseNativeConnectionUriParser.java | 3 +- .../ClickhouseNativeDatabaseMetadata.java | 8 ++- .../impl/codec/DatabaseMetadataReader.java | 3 +- .../impl/codec/columns/ArrayColumnReader.java | 9 ++- .../impl/codec/columns/ColumnUtils.java | 7 +++ .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 5 ++ .../columns/FixedStringColumnReader.java | 6 +- .../ArraySerDesTest.java | 2 +- .../ClickhouseResource.java | 1 + .../alltypes/FixedStringTest.java | 62 +++++++++++++++++++ 12 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 3e45a21c57..6c86a1e806 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -42,6 +42,7 @@ public class ClickhouseConstants { public static final String OPTION_DATETIME64_EXTRA_NANOS_MODE = "dt64_extra_nanos"; public static final String OPTION_ENUM_RESOLUTION = "enum_resolution"; public static final String OPTION_MAX_BLOCK_SIZE = "max_block_size"; + public static final String OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS = "remove_trailing_zeros_when_encode_fixed_strings"; public static final short COMPRESSION_METHOD_LZ4 = 0x82; public static final short COMPRESSION_METHOD_ZSTD = 0x90; @@ -49,5 +50,5 @@ public class ClickhouseConstants { public static final Set NON_QUERY_OPTIONS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( OPTION_APPLICATION_NAME, OPTION_INITIAL_USER, OPTION_INITIAL_QUERY_ID, OPTION_INITIAL_ADDRESS, OPTION_INITIAL_USERNAME, OPTION_INITIAL_HOSTNAME, OPTION_COMPRESSOR, OPTION_STRING_CHARSET, OPTION_DEFAULT_ZONE_ID, OPTION_YEAR_DURATION, OPTION_QUARTER_DURATION, - OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION))); + OPTION_MONTH_DURATION, OPTION_DATETIME64_EXTRA_NANOS_MODE, OPTION_ENUM_RESOLUTION, OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS))); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 272438c081..7acfb6b429 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,6 +1,5 @@ package io.vertx.clickhouse.clickhousenative.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; import io.vertx.core.json.JsonObject; import java.net.URI; @@ -18,7 +17,7 @@ public static JsonObject parse(String connectionUri) { URI location = URI.create(connectionUri); String userInfo = location.getUserInfo(); String user = userInfo; - String password = null; + String password = ""; if (userInfo.contains(":")) { String[] tokens = userInfo.split(":"); user = tokens[0]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 990d4f8001..c2c5b0230e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -24,12 +24,13 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final Duration quarterDuration; private final Duration monthDuration; private final boolean saturateExtraNanos; + private final boolean removeTrailingZerosInFixedStrings; public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, Duration yearDuration, Duration quarterDuration, Duration monthDuration, - boolean saturateExtraNanos) { + boolean saturateExtraNanos, boolean removeTrailingZerosInFixedStrings) { this.productName = productName; this.fullVersion = fullVersion; this.major = major; @@ -46,6 +47,7 @@ public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, this.quarterDuration = quarterDuration; this.monthDuration = monthDuration; this.saturateExtraNanos = saturateExtraNanos; + this.removeTrailingZerosInFixedStrings = removeTrailingZerosInFixedStrings; } @Override @@ -116,6 +118,10 @@ public boolean isSaturateExtraNanos() { return saturateExtraNanos; } + public boolean isRemoveTrailingZerosInFixedStrings() { + return removeTrailingZerosInFixedStrings; + } + @Override public String toString() { return "ClickhouseNativeDatabaseMetadata{" + diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 7845ded01c..f334acb6e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -83,10 +83,11 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { ZoneId defaultZoneId = getDefaultZoneId(serverZoneId); String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); boolean saturateExtraNanos = "saturate".equals(extraNanos); + boolean removeTrailingZerosInFixedStringsStr = Boolean.parseBoolean(properties.getOrDefault(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true")); return new ClickhouseNativeDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), - Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos); + Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos, removeTrailingZerosInFixedStringsStr); } private ZoneId getDefaultZoneId(ZoneId serverZoneId) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 0bea6ea2e8..9930fed124 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -142,7 +142,14 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { for (int i = 0; i < src.length; ++i) { Object element = src[i]; if (element != null) { - ret[i] = new String((byte[]) element, charset); + int lastNonZeroIdx; + byte[] bytes = (byte[]) element; + if (md.isRemoveTrailingZerosInFixedStrings() && elementTypeDescr.getNestedType().startsWith("FixedString")) { + lastNonZeroIdx = ColumnUtils.getLastNonZeroPos(bytes); + } else { + lastNonZeroIdx = bytes.length - 1; + } + ret[i] = new String(bytes, 0, lastNonZeroIdx + 1, charset); } } return ret; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 25cb3ce00e..8b58317ad6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -9,4 +9,11 @@ public static byte[] reverse(byte[] src) { } return src; } + + public static int getLastNonZeroPos(byte[] bytes) { + int lastNonZeroPos = bytes.length - 1; + for (; lastNonZeroPos >= 0 && bytes[lastNonZeroPos] == 0; --lastNonZeroPos) { + } + return lastNonZeroPos; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index 05b3518454..fd76395e3f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; public enum EnumResolutionMethod { - NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key"); + NAME("by_name"), ORDINAL("by_ordinal"), KEY("by_key_as_ordinal"); private static final Map index = Arrays .stream(EnumResolutionMethod.values()) .collect(Collectors.toMap(el -> el.optVal, el -> el)); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 8ee3af4386..c16f947f12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -23,4 +23,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new FixedStringColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + + @Override + public Object nullValue() { + return StringColumn.EMPTY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 58908d1e18..3028bd79d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -10,6 +10,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; + private final boolean removeTrailingZerosInStrings; private List elements; @@ -17,6 +18,7 @@ protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor co super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); + this.removeTrailingZerosInStrings = md.isRemoveTrailingZerosInFixedStrings(); } @Override @@ -45,7 +47,9 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - return new String((byte[])tmp, charset); + byte[] bytes = (byte[]) tmp; + int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(bytes) : bytes.length - 1; + return new String(bytes, 0, lastNonZeroIdx + 1, charset); } return tmp; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 52341eaa8a..f3d9a220ae 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -36,7 +36,7 @@ public static Iterable dataForTest() { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", - Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true); + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 551639f2a4..33d6fae551 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -37,6 +37,7 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") .addProperty(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "saturate") .addProperty(ClickhouseConstants.OPTION_ENUM_RESOLUTION, "by_name") + .addProperty(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true") .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java new file mode 100644 index 0000000000..685d2bb744 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class FixedStringTest extends AllTypesBase { + public FixedStringTest() { + super("fixedstring", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); + } + + @Override + public List createBatch() { + String v1 = "val1"; + String v2 = "val2"; + String v3 = "val3"; + String v4 = "val4"; + String v5 = "value5"; + String v6 = "v6"; + String nv = ""; + String mn = ""; + String mx = "123456789123"; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, mn}, new String[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mn, mn}, new String[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mn}, new String[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new String[]{mx, mx}, new String[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mx, null, mx}, new String[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new String[]{mn, mx}, new String[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{mn, null, mx}, new String[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new String[]{}, new String[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{}, new String[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{}, new String[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}}, v2, v3, new String[]{}, new String[][][]{{{}}}, new String[]{null}, new String[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv}, new String[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new String[]{nv, mn, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, mn, null, mx}, new String[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, v1, null, nv, mx, v3}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new String[]{v3, v1, nv, mx, v4}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, v2, null, v3, v2}, new String[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new String[]{v1, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, v4}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new String[]{nv, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{nv, null, nv}, new String[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v3, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v4, nv, nv}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v2, nv, null}, new String[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new String[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new String[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new String[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} From 8aa88a5b2fe1c37a3a6a5eb6244ca674a7dc9972 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 09:14:25 +0300 Subject: [PATCH 130/176] added UInt16/32/64 test Signed-off-by: vladimir --- .../impl/codec/columns/UInt64Column.java | 7 ++ .../codec/columns/UInt64ColumnReader.java | 3 +- .../alltypes/UInt16Test.java | 62 +++++++++++++++++ .../alltypes/UInt32Test.java | 62 +++++++++++++++++ .../alltypes/UInt64Test.java | 69 +++++++++++++++++++ .../alltypes/UInt8Test.java | 4 +- 6 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index d98bc133cb..ec2728757f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -2,10 +2,14 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigInteger; import java.util.List; public class UInt64Column extends ClickhouseColumn { + public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); + public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -21,6 +25,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { } public Object nullValue() { + if (descriptor.isUnsigned()) { + return UINT64_MIN; + } return 0L; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 4d1e641b03..caf229cf07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -2,6 +2,7 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; @@ -32,7 +33,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { long element = ((long[])this.itemsArray)[rowIdx]; if (columnDescriptor.isUnsigned()) { - return unsignedBi(element); + return Numeric.create(unsignedBi(element)); } return element; } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java new file mode 100644 index 0000000000..1d8f4b13ba --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt16Test extends AllTypesBase { + public UInt16Test() { + super("uint16", new MyColumnChecker<>(Integer.class, Tuple::getInteger, Row::getInteger, Tuple::getArrayOfIntegers, Row::getArrayOfIntegers)); + } + + @Override + public List createBatch() { + Integer mx = 65535; + Integer v1 = 10; + Integer v2 = mx / 6; + Integer v3 = mx / 5; + Integer v4 = mx / 4; + Integer v5 = mx / 3; + Integer v6 = mx / 2; + Integer nv = 0; + Integer mn = 0; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, mn}, new Integer[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mn, mn}, new Integer[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mn}, new Integer[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Integer[]{mx, mx}, new Integer[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mx, null, mx}, new Integer[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Integer[]{mn, mx}, new Integer[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{mn, null, mx}, new Integer[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{}, new Integer[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{}, new Integer[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}}, v2, v3, new Integer[]{}, new Integer[][][]{{{}}}, new Integer[]{null}, new Integer[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv}, new Integer[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Integer[]{nv, mn, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, mn, null, mx}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, v1, null, nv, mx, v3}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Integer[]{v3, v1, nv, mx, v4}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, v2, null, v3, v2}, new Integer[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Integer[]{v1, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, v4}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Integer[]{nv, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{nv, null, nv}, new Integer[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v3, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v4, nv, nv}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v2, nv, null}, new Integer[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Integer[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Integer[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Integer[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java new file mode 100644 index 0000000000..0d713e4c54 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt32Test extends AllTypesBase { + public UInt32Test() { + super("uint32", new MyColumnChecker<>(Long.class, Tuple::getLong, Row::getLong, Tuple::getArrayOfLongs, Row::getArrayOfLongs)); + } + + @Override + public List createBatch() { + Long mx = 4294967295L; + Long v1 = 10L; + Long v2 = mx / 6; + Long v3 = mx / 5; + Long v4 = mx / 4; + Long v5 = mx / 3; + Long v6 = mx / 2; + Long nv = 0L; + Long mn = 0L; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, mn}, new Long[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mn, mn}, new Long[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mn}, new Long[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Long[]{mx, mx}, new Long[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mx, null, mx}, new Long[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Long[]{mn, mx}, new Long[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{mn, null, mx}, new Long[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{}, new Long[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{}, new Long[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}}, v2, v3, new Long[]{}, new Long[][][]{{{}}}, new Long[]{null}, new Long[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv}, new Long[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Long[]{nv, mn, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, mn, null, mx}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, v1, null, nv, mx, v3}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Long[]{v3, v1, nv, mx, v4}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, v2, null, v3, v2}, new Long[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Long[]{v1, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, v4}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Long[]{nv, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{nv, null, nv}, new Long[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v3, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v4, nv, nv}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v2, nv, null}, new Long[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Long[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Long[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Long[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java new file mode 100644 index 0000000000..0b843ad06f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -0,0 +1,69 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class UInt64Test extends AllTypesBase { + public UInt64Test() { + super("uint64", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics)); + } + + private BigInteger bi(int src) { + return BigInteger.valueOf(src); + } + + @Override + public List createBatch() { + BigInteger mxBi = new BigInteger("18446744073709551615"); + Numeric mx = Numeric.create(mxBi); + Numeric v1 = Numeric.create(BigInteger.TEN); + Numeric v2 = Numeric.create(mxBi.divide( bi(6))); + Numeric v3 = Numeric.create(mxBi.divide(bi(5))); + Numeric v4 = Numeric.create(mxBi.divide(bi(4))); + Numeric v5 = Numeric.create(mxBi.divide(bi(3))); + Numeric v6 = Numeric.create(mxBi.divide(bi(2))); + Numeric nv = Numeric.create(BigInteger.ZERO); + Numeric mn = Numeric.create(BigInteger.ZERO); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}}, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, v2, null, v3, v2}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, v2, null, v3, v2}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v2, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, nv}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v2, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 8046242ede..3dfb212907 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -42,8 +42,8 @@ public List createBatch() { Tuple.of((byte)12, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{}, new Short[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), Tuple.of((byte)13, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), Tuple.of((byte)14, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{}, new Short[][][]{{{}}} ), - Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), - Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)15, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}}, v2, v3, new Short[]{}, new Short[][][]{{{}}}, new Short[]{null}, new Short[][][]{{{null}}} ), Tuple.of((byte)17, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)18, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), Tuple.of((byte)19, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv, mn, null, mx}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Short[]{nv, mn, mx}, new Short[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{nv}, new Short[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), From 73369b39dc30b65a7101ce19b6955ec56ed04a7b Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 17:03:32 +0300 Subject: [PATCH 131/176] added Decimal32/64 and Float32 tests Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 22 +- .../impl/codec/columns/Decimal128Column.java | 8 +- .../impl/codec/columns/Decimal256Column.java | 9 +- .../codec/columns/Decimal256ColumnReader.java | 41 -- .../impl/codec/columns/Decimal32Column.java | 21 +- .../codec/columns/Decimal32ColumnReader.java | 14 +- .../codec/columns/Decimal32ColumnWriter.java | 36 ++ .../impl/codec/columns/Decimal64Column.java | 22 +- .../codec/columns/Decimal64ColumnReader.java | 14 +- .../codec/columns/Decimal64ColumnWriter.java | 35 ++ .../impl/codec/columns/Float32Column.java | 2 +- .../codec/columns/Float32ColumnReader.java | 5 + ...r.java => GenericDecimalColumnReader.java} | 19 +- .../alltypes/AllTypesBase.java | 1 - .../alltypes/Decimal32Test.java | 82 +++ .../alltypes/Decimal64Test.java | 81 +++ .../alltypes/Float32Test.java | 62 ++ .../alltypes/Float64Test.java | 8 +- .../alltypes/UInt64Test.java | 2 +- .../src/test/python/all_types_table.sql | 84 +-- .../src/test/python/gen_all_types_tables.py | 7 +- .../src/test/resources/init.sql | 586 +++++++++--------- 22 files changed, 707 insertions(+), 454 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/{Decimal128ColumnReader.java => GenericDecimalColumnReader.java} (60%) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 8b0b1fd923..b7c22f5751 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -155,14 +155,14 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un } private static int decimalSize(int precision) { - if (precision <= Decimal32ColumnReader.MAX_PRECISION) { - return Decimal32ColumnReader.ELEMENT_SIZE; - } else if (precision <= Decimal64ColumnReader.MAX_PRECISION) { - return Decimal64ColumnReader.ELEMENT_SIZE; - } else if (precision <= Decimal128ColumnReader.MAX_PRECISION) { - return Decimal128ColumnReader.ELEMENT_SIZE; + if (precision <= Decimal32Column.MAX_PRECISION) { + return Decimal32Column.ELEMENT_SIZE; + } else if (precision <= Decimal64Column.MAX_PRECISION) { + return Decimal64Column.ELEMENT_SIZE; + } else if (precision <= Decimal128Column.MAX_PRECISION) { + return Decimal128Column.ELEMENT_SIZE; } else { - return Decimal256ColumnReader.ELEMENT_SIZE; + return Decimal256Column.ELEMENT_SIZE; } } @@ -218,13 +218,13 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { //TODO smagellan: merge into one statement after introducing column readers - if (descr.getElementSize() == Decimal32ColumnReader.ELEMENT_SIZE) { + if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { return new Decimal32Column(descr); - } else if (descr.getElementSize() == Decimal64ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { return new Decimal64Column(descr); - } else if (descr.getElementSize() == Decimal128ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal128Column.ELEMENT_SIZE) { return new Decimal128Column(descr); - } else if (descr.getElementSize() == Decimal256ColumnReader.ELEMENT_SIZE) { + } else if (descr.getElementSize() == Decimal256Column.ELEMENT_SIZE) { return new Decimal256Column(descr); } } else if (jdbcType == JDBCType.REAL) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 7d4b29df8e..b5bc8ba857 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -3,16 +3,22 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal128Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 16; + public static final int MAX_PRECISION = 38; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal128ColumnReader(nRows, descriptor); + return new GenericDecimalColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 2c60ee025a..b2c435974c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -3,16 +3,23 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; +//Looks like support is experimental at the moment public class Decimal256Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 32; + public static final int MAX_PRECISION = 76; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal256ColumnReader(nRows, descriptor); + return new GenericDecimalColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java deleted file mode 100644 index 54edf0ab6d..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256ColumnReader.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; - -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; - -//Looks like support is experimental at the moment -public class Decimal256ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 32; - public static final int MAX_PRECISION = 76; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - - protected Decimal256ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { - super(nRows, columnDescriptor); - } - - @Override - protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - Numeric[] data = new Numeric[nRows]; - int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - in.readBytes(readBuffer); - BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } -} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 08661ed7c8..091b2d9412 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -2,21 +2,38 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal32Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 4; + public static final int MAX_PRECISION = 9; + public final static MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + public final Numeric zeroValue; + public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal32ColumnReader(nRows, descriptor); + return new Decimal32ColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Decimal32ColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 9a9b0307cd..5ff0bd43cb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -7,28 +7,26 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; public class Decimal32ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 4; - public static final int MAX_PRECISION = 9; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final MathContext mc; - protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mc) { super(nRows, columnDescriptor); + this.mc = mc; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Decimal32Column.ELEMENT_SIZE * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { int item = in.readIntLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Decimal32Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java new file mode 100644 index 0000000000..4989be1f61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -0,0 +1,36 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class Decimal32ColumnWriter extends ClickhouseColumnWriter { + public Decimal32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + //TODO: rework loss of precision checks across all DecimalXX columns + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + BigInteger bi = bd.unscaledValue(); + sink.writeIntLE(bi.intValueExact()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Decimal32Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 6c5d66038d..e727b66ba2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -2,21 +2,39 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.List; public class Decimal64Column extends ClickhouseColumn { + public static final int ELEMENT_SIZE = 8; + public static final int MAX_PRECISION = 18; + public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + + + public final Numeric zeroValue; + public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override public ClickhouseColumnReader reader(int nRows) { - return new Decimal64ColumnReader(nRows, descriptor); + return new Decimal64ColumnReader(nRows, descriptor, MATH_CONTEXT); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new Decimal64ColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 841fd543e2..839e8e63c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -7,28 +7,26 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; public class Decimal64ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 8; - public static final int MAX_PRECISION = 18; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final MathContext mc; - protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); + this.mc = mathContext; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + if (in.readableBytes() >= Decimal64Column.ELEMENT_SIZE * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { long item = in.readLongLE(); - data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(BigInteger.valueOf(item), scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(Decimal64Column.ELEMENT_SIZE); } } return data; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java new file mode 100644 index 0000000000..bbf1c99d61 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -0,0 +1,35 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class Decimal64ColumnWriter extends ClickhouseColumnWriter { + public Decimal64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + BigInteger bi = bd.unscaledValue(); + sink.writeLongLE(bi.longValueExact()); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(Decimal64Column.ELEMENT_SIZE); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 6cbd90a337..df9e957637 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -22,6 +22,6 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return (float) 0; + return 0.0f; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index 41afde279e..a691364c1e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -25,4 +25,9 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] asObjectsArray(Class desired) { + return asObjectsArrayWithGetElement(desired); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java similarity index 60% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java rename to vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 9952606891..784d8c257d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -7,31 +7,30 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.MathContext; -import java.math.RoundingMode; //TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 -public class Decimal128ColumnReader extends ClickhouseColumnReader { - public static final int ELEMENT_SIZE = 16; - public static final int MAX_PRECISION = 38; - public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); +public class GenericDecimalColumnReader extends ClickhouseColumnReader { + private final MathContext mc; - protected Decimal128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected GenericDecimalColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); + this.mc = mathContext; } @Override protected Object readItems(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + int elementSize = columnDescriptor.getElementSize(); + if (in.readableBytes() >= elementSize * nRows) { Numeric[] data = new Numeric[nRows]; int scale = columnDescriptor.getScale(); - byte[] readBuffer = new byte[ELEMENT_SIZE]; + byte[] readBuffer = new byte[elementSize]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { in.readBytes(readBuffer); BigInteger bi = new BigInteger(ColumnUtils.reverse(readBuffer)); - data[i] = Numeric.create(new BigDecimal(bi, scale, MATH_CONTEXT)); + data[i] = Numeric.create(new BigDecimal(bi, scale, mc)); } else { - in.skipBytes(ELEMENT_SIZE); + in.skipBytes(elementSize); } } return data; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index a07b680d5d..a040cbf6aa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -82,7 +82,6 @@ protected void doTest(TestContext ctx, List batch) { ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( ctx.asyncAssertSuccess(res1 -> { - Sleep.sleepOrThrow(); List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java new file mode 100644 index 0000000000..950e549c29 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -0,0 +1,82 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Decimal32Test extends AllTypesBase { + public static final int SCALE = 4; + + public static final MathContext MATH_CONTEXT = new MathContext(Decimal32Column.MAX_PRECISION, RoundingMode.HALF_EVEN); + + public Decimal32Test() { + super("decimal32", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + } + + private Numeric nm(Integer src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, MATH_CONTEXT); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + int mni = Integer.MAX_VALUE / 3; + int mxi = Integer.MIN_VALUE / 3; + + Numeric v1 = nm(mxi / 3); + Numeric v2 = nm(mni / 3); + Numeric v3 = nm(mxi / 4); + Numeric v4 = nm(mni / 4); + Numeric v5 = nm(mxi / 5); + Numeric v6 = nm(mni / 5); + Numeric nv = nm(0); + + Numeric mn = nm(mni); + Numeric mx = nm(mxi); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java new file mode 100644 index 0000000000..90a942a18f --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -0,0 +1,81 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Decimal64Test extends AllTypesBase { + public static final int SCALE = 4; + + public static final MathContext MATH_CONTEXT = new MathContext(Decimal64Column.MAX_PRECISION, RoundingMode.HALF_EVEN); + + public Decimal64Test() { + super("decimal64", new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + } + + private Numeric nm(Long src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, MATH_CONTEXT); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + long mnl = Long.MIN_VALUE / 10; + long mxl = Long.MAX_VALUE / 10; + + Numeric v1 = nm(mxl / 3); + Numeric v2 = nm(mnl / 4); + Numeric v3 = nm(mxl / 5); + Numeric v4 = nm(mnl / 6); + Numeric v5 = nm(mxl / 7); + Numeric v6 = nm(mnl / 7); + Numeric nv = nm(0L); + Numeric mn = nm(mnl); + Numeric mx = nm(mxl); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java new file mode 100644 index 0000000000..ff13539fda --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -0,0 +1,62 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class Float32Test extends AllTypesBase { + public Float32Test() { + super("float32", new MyColumnChecker<>(Float.class, Tuple::getFloat, Row::getFloat, Tuple::getArrayOfFloats, Row::getArrayOfFloats)); + } + + @Override + public List createBatch() { + Float v1 = Float.MAX_VALUE / 2; + Float v2 = Float.MIN_VALUE / 2; + Float v3 = Float.MAX_VALUE / 3; + Float v4 = Float.NaN; + Float v5 = Float.NEGATIVE_INFINITY; + Float v6 = Float.POSITIVE_INFINITY; + Float nv = 0.0f; + Float mn = Float.MIN_VALUE; + Float mx = Float.MAX_VALUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, mn}, new Float[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mn, mn}, new Float[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mn}, new Float[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, mx}, new Float[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Float[]{mx, mx}, new Float[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mx, null, mx}, new Float[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Float[]{mn, mx}, new Float[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{mn, null, mx}, new Float[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{}, new Float[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{}, new Float[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}}, v2, v3, new Float[]{}, new Float[][][]{{{}}}, new Float[]{null}, new Float[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv}, new Float[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Float[]{nv, mn, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, mn, null, mx}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, v1, null, nv, mx, v3}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, v2, null, v3, v2}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, v1, null, nv, mx, v3}, new Float[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Float[]{v3, v1, nv, mx, v4}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, v2, null, v3, v2}, new Float[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Float[]{v1, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Float[]{v1, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v2, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Float[]{nv, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, null, v4}, new Float[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Float[]{nv, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{nv, null, nv}, new Float[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Float[]{v4, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v3, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v4, nv, nv}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v2, nv, null}, new Float[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Float[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Float[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Float[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 4a2897df00..a3a930efd3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -18,10 +18,10 @@ public Float64Test() { public List createBatch() { Double v1 = Double.MAX_VALUE / 2; Double v2 = Double.MIN_VALUE / 2; - Double v3 = 30.0; - Double v4 = -40.0; - Double v5 = 60.0; - Double v6 = -70.0; + Double v3 = Double.MAX_VALUE / 3; + Double v4 = Double.NaN; + Double v5 = Double.NEGATIVE_INFINITY; + Double v6 = Double.POSITIVE_INFINITY; Double nv = 0.0; Double mn = Double.MIN_VALUE; Double mx = Double.MAX_VALUE; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 0b843ad06f..9c1da11c66 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -34,7 +34,7 @@ public List createBatch() { Numeric mn = Numeric.create(BigInteger.ZERO); return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index beedfaa555..ac5b7550bf 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -15,8 +15,7 @@ CREATE TABLE vertx_test_int8 ( array3_lc_t Array(Array(Array(LowCardinality(Int8)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint8; CREATE TABLE vertx_test_uint8 ( id Int8, @@ -32,8 +31,7 @@ CREATE TABLE vertx_test_uint8 ( array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int16; CREATE TABLE vertx_test_int16 ( id Int8, @@ -49,8 +47,7 @@ CREATE TABLE vertx_test_int16 ( array3_lc_t Array(Array(Array(LowCardinality(Int16)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint16; CREATE TABLE vertx_test_uint16 ( id Int8, @@ -66,8 +63,7 @@ CREATE TABLE vertx_test_uint16 ( array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int32; CREATE TABLE vertx_test_int32 ( id Int8, @@ -83,8 +79,7 @@ CREATE TABLE vertx_test_int32 ( array3_lc_t Array(Array(Array(LowCardinality(Int32)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint32; CREATE TABLE vertx_test_uint32 ( id Int8, @@ -100,8 +95,7 @@ CREATE TABLE vertx_test_uint32 ( array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int64; CREATE TABLE vertx_test_int64 ( id Int8, @@ -117,8 +111,7 @@ CREATE TABLE vertx_test_int64 ( array3_lc_t Array(Array(Array(LowCardinality(Int64)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint64; CREATE TABLE vertx_test_uint64 ( id Int8, @@ -134,8 +127,7 @@ CREATE TABLE vertx_test_uint64 ( array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int128; CREATE TABLE vertx_test_int128 ( id Int8, @@ -151,8 +143,7 @@ CREATE TABLE vertx_test_int128 ( array3_lc_t Array(Array(Array(LowCardinality(Int128)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( id Int8, @@ -168,8 +159,7 @@ CREATE TABLE vertx_test_string ( array3_lc_t Array(Array(Array(LowCardinality(String)))), nullable_array_lc_t Array(LowCardinality(Nullable(String))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_fixedstring; CREATE TABLE vertx_test_fixedstring ( id Int8, @@ -185,8 +175,7 @@ CREATE TABLE vertx_test_fixedstring ( array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime; CREATE TABLE vertx_test_datetime ( id Int8, @@ -202,19 +191,17 @@ CREATE TABLE vertx_test_datetime ( array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime64; CREATE TABLE vertx_test_datetime64 ( id Int8, - simple_t DateTime64, - nullable_t Nullable(DateTime64), - array_t Array(DateTime64), - array3_t Array(Array(Array(DateTime64))), - nullable_array_t Array(Nullable(DateTime64)), - nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) -) engine = MergeTree() - ORDER BY (id); + simple_t DateTime64(3), + nullable_t Nullable(DateTime64(3)), + array_t Array(DateTime64(3)), + array3_t Array(Array(Array(DateTime64(3)))), + nullable_array_t Array(Nullable(DateTime64(3))), + nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_date; CREATE TABLE vertx_test_date ( id Int8, @@ -230,8 +217,7 @@ CREATE TABLE vertx_test_date ( array3_lc_t Array(Array(Array(LowCardinality(Date)))), nullable_array_lc_t Array(LowCardinality(Nullable(Date))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uuid; CREATE TABLE vertx_test_uuid ( id Int8, @@ -241,8 +227,7 @@ CREATE TABLE vertx_test_uuid ( array3_t Array(Array(Array(UUID))), nullable_array_t Array(Nullable(UUID)), nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal32; CREATE TABLE vertx_test_decimal32 ( id Int8, @@ -252,8 +237,7 @@ CREATE TABLE vertx_test_decimal32 ( array3_t Array(Array(Array(Decimal32(4)))), nullable_array_t Array(Nullable(Decimal32(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal64; CREATE TABLE vertx_test_decimal64 ( id Int8, @@ -263,8 +247,7 @@ CREATE TABLE vertx_test_decimal64 ( array3_t Array(Array(Array(Decimal64(4)))), nullable_array_t Array(Nullable(Decimal64(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal128; CREATE TABLE vertx_test_decimal128 ( id Int8, @@ -274,8 +257,7 @@ CREATE TABLE vertx_test_decimal128 ( array3_t Array(Array(Array(Decimal128(4)))), nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, @@ -285,8 +267,7 @@ CREATE TABLE vertx_test_enum8 ( array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum16; CREATE TABLE vertx_test_enum16 ( id Int8, @@ -296,8 +277,7 @@ CREATE TABLE vertx_test_enum16 ( array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float32; CREATE TABLE vertx_test_float32 ( id Int8, @@ -313,8 +293,7 @@ CREATE TABLE vertx_test_float32 ( array3_lc_t Array(Array(Array(LowCardinality(Float32)))), nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float64; CREATE TABLE vertx_test_float64 ( id Int8, @@ -330,8 +309,7 @@ CREATE TABLE vertx_test_float64 ( array3_lc_t Array(Array(Array(LowCardinality(Float64)))), nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv6; CREATE TABLE vertx_test_ipv6 ( id Int8, @@ -347,8 +325,7 @@ CREATE TABLE vertx_test_ipv6 ( array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv4; CREATE TABLE vertx_test_ipv4 ( id Int8, @@ -364,5 +341,4 @@ CREATE TABLE vertx_test_ipv4 ( array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index 868832856c..6010fbc4eb 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -2,7 +2,7 @@ ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', {'table': 'FixedString', 'type': 'FixedString(12)'}, - 'DateTime', 'DateTime64', 'Date', 'UUID', + 'DateTime', {'table': 'datetime64', 'type': 'DateTime64(3)'}, 'Date', 'UUID', {'table': 'Decimal32', 'type': 'Decimal32(4)'}, {'table': 'Decimal64', 'type': 'Decimal64(4)'}, {'table': 'Decimal128', 'type': 'Decimal128(4)'}, @@ -21,7 +21,7 @@ print('DROP TABLE IF EXISTS {0};'.format(table_name)); print('CREATE TABLE {0} ('.format(table_name)); columns = ['id Int8']; - low_cardinality = type_name != 'UUID' and type_name != 'DateTime64' \ + low_cardinality = type_name != 'UUID' and not type_name.startswith('DateTime64') \ and not type_name.startswith('Decimal32(') and not type_name.startswith('Decimal64(') \ and not type_name.startswith('Decimal128(') \ and not type_name.startswith('Decimal256(') \ @@ -41,5 +41,4 @@ columns.append('nullable_array_lc_t Array(LowCardinality(Nullable({0})))'.format(type_name)); columns.append('nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable({0})))))'.format(type_name)); print(' ', ',\n '.join(columns)); - print(') engine = MergeTree()'); - print(" ORDER BY (id);"); + print(') engine = Memory();'); diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index 68b2ea09e4..c87bbcdf67 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -141,140 +141,132 @@ set allow_suspicious_low_cardinality_types=true; set allow_experimental_bigint_types=true; DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( - id Int8, - simple_t Int8, - nullable_t Nullable(Int8), - array_t Array(Int8), - array3_t Array(Array(Array(Int8))), - nullable_array_t Array(Nullable(Int8)), - nullable_array3_t Array(Array(Array(Nullable(Int8)))), - simple_lc_t LowCardinality(Int8), - nullable_lc_t LowCardinality(Nullable(Int8)), - array_lc_t Array(LowCardinality(Int8)), - array3_lc_t Array(Array(Array(LowCardinality(Int8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int8, + nullable_t Nullable(Int8), + array_t Array(Int8), + array3_t Array(Array(Array(Int8))), + nullable_array_t Array(Nullable(Int8)), + nullable_array3_t Array(Array(Array(Nullable(Int8)))), + simple_lc_t LowCardinality(Int8), + nullable_lc_t LowCardinality(Nullable(Int8)), + array_lc_t Array(LowCardinality(Int8)), + array3_lc_t Array(Array(Array(LowCardinality(Int8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint8; CREATE TABLE vertx_test_uint8 ( - id Int8, - simple_t UInt8, - nullable_t Nullable(UInt8), - array_t Array(UInt8), - array3_t Array(Array(Array(UInt8))), - nullable_array_t Array(Nullable(UInt8)), - nullable_array3_t Array(Array(Array(Nullable(UInt8)))), - simple_lc_t LowCardinality(UInt8), - nullable_lc_t LowCardinality(Nullable(UInt8)), - array_lc_t Array(LowCardinality(UInt8)), - array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt8, + nullable_t Nullable(UInt8), + array_t Array(UInt8), + array3_t Array(Array(Array(UInt8))), + nullable_array_t Array(Nullable(UInt8)), + nullable_array3_t Array(Array(Array(Nullable(UInt8)))), + simple_lc_t LowCardinality(UInt8), + nullable_lc_t LowCardinality(Nullable(UInt8)), + array_lc_t Array(LowCardinality(UInt8)), + array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int16; CREATE TABLE vertx_test_int16 ( - id Int8, - simple_t Int16, - nullable_t Nullable(Int16), - array_t Array(Int16), - array3_t Array(Array(Array(Int16))), - nullable_array_t Array(Nullable(Int16)), - nullable_array3_t Array(Array(Array(Nullable(Int16)))), - simple_lc_t LowCardinality(Int16), - nullable_lc_t LowCardinality(Nullable(Int16)), - array_lc_t Array(LowCardinality(Int16)), - array3_lc_t Array(Array(Array(LowCardinality(Int16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int16, + nullable_t Nullable(Int16), + array_t Array(Int16), + array3_t Array(Array(Array(Int16))), + nullable_array_t Array(Nullable(Int16)), + nullable_array3_t Array(Array(Array(Nullable(Int16)))), + simple_lc_t LowCardinality(Int16), + nullable_lc_t LowCardinality(Nullable(Int16)), + array_lc_t Array(LowCardinality(Int16)), + array3_lc_t Array(Array(Array(LowCardinality(Int16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint16; CREATE TABLE vertx_test_uint16 ( - id Int8, - simple_t UInt16, - nullable_t Nullable(UInt16), - array_t Array(UInt16), - array3_t Array(Array(Array(UInt16))), - nullable_array_t Array(Nullable(UInt16)), - nullable_array3_t Array(Array(Array(Nullable(UInt16)))), - simple_lc_t LowCardinality(UInt16), - nullable_lc_t LowCardinality(Nullable(UInt16)), - array_lc_t Array(LowCardinality(UInt16)), - array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt16, + nullable_t Nullable(UInt16), + array_t Array(UInt16), + array3_t Array(Array(Array(UInt16))), + nullable_array_t Array(Nullable(UInt16)), + nullable_array3_t Array(Array(Array(Nullable(UInt16)))), + simple_lc_t LowCardinality(UInt16), + nullable_lc_t LowCardinality(Nullable(UInt16)), + array_lc_t Array(LowCardinality(UInt16)), + array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int32; CREATE TABLE vertx_test_int32 ( - id Int8, - simple_t Int32, - nullable_t Nullable(Int32), - array_t Array(Int32), - array3_t Array(Array(Array(Int32))), - nullable_array_t Array(Nullable(Int32)), - nullable_array3_t Array(Array(Array(Nullable(Int32)))), - simple_lc_t LowCardinality(Int32), - nullable_lc_t LowCardinality(Nullable(Int32)), - array_lc_t Array(LowCardinality(Int32)), - array3_lc_t Array(Array(Array(LowCardinality(Int32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int32, + nullable_t Nullable(Int32), + array_t Array(Int32), + array3_t Array(Array(Array(Int32))), + nullable_array_t Array(Nullable(Int32)), + nullable_array3_t Array(Array(Array(Nullable(Int32)))), + simple_lc_t LowCardinality(Int32), + nullable_lc_t LowCardinality(Nullable(Int32)), + array_lc_t Array(LowCardinality(Int32)), + array3_lc_t Array(Array(Array(LowCardinality(Int32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint32; CREATE TABLE vertx_test_uint32 ( - id Int8, - simple_t UInt32, - nullable_t Nullable(UInt32), - array_t Array(UInt32), - array3_t Array(Array(Array(UInt32))), - nullable_array_t Array(Nullable(UInt32)), - nullable_array3_t Array(Array(Array(Nullable(UInt32)))), - simple_lc_t LowCardinality(UInt32), - nullable_lc_t LowCardinality(Nullable(UInt32)), - array_lc_t Array(LowCardinality(UInt32)), - array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt32, + nullable_t Nullable(UInt32), + array_t Array(UInt32), + array3_t Array(Array(Array(UInt32))), + nullable_array_t Array(Nullable(UInt32)), + nullable_array3_t Array(Array(Array(Nullable(UInt32)))), + simple_lc_t LowCardinality(UInt32), + nullable_lc_t LowCardinality(Nullable(UInt32)), + array_lc_t Array(LowCardinality(UInt32)), + array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int64; CREATE TABLE vertx_test_int64 ( - id Int8, - simple_t Int64, - nullable_t Nullable(Int64), - array_t Array(Int64), - array3_t Array(Array(Array(Int64))), - nullable_array_t Array(Nullable(Int64)), - nullable_array3_t Array(Array(Array(Nullable(Int64)))), - simple_lc_t LowCardinality(Int64), - nullable_lc_t LowCardinality(Nullable(Int64)), - array_lc_t Array(LowCardinality(Int64)), - array3_lc_t Array(Array(Array(LowCardinality(Int64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Int64, + nullable_t Nullable(Int64), + array_t Array(Int64), + array3_t Array(Array(Array(Int64))), + nullable_array_t Array(Nullable(Int64)), + nullable_array3_t Array(Array(Array(Nullable(Int64)))), + simple_lc_t LowCardinality(Int64), + nullable_lc_t LowCardinality(Nullable(Int64)), + array_lc_t Array(LowCardinality(Int64)), + array3_lc_t Array(Array(Array(LowCardinality(Int64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uint64; CREATE TABLE vertx_test_uint64 ( - id Int8, - simple_t UInt64, - nullable_t Nullable(UInt64), - array_t Array(UInt64), - array3_t Array(Array(Array(UInt64))), - nullable_array_t Array(Nullable(UInt64)), - nullable_array3_t Array(Array(Array(Nullable(UInt64)))), - simple_lc_t LowCardinality(UInt64), - nullable_lc_t LowCardinality(Nullable(UInt64)), - array_lc_t Array(LowCardinality(UInt64)), - array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UInt64, + nullable_t Nullable(UInt64), + array_t Array(UInt64), + array3_t Array(Array(Array(UInt64))), + nullable_array_t Array(Nullable(UInt64)), + nullable_array3_t Array(Array(Array(Nullable(UInt64)))), + simple_lc_t LowCardinality(UInt64), + nullable_lc_t LowCardinality(Nullable(UInt64)), + array_lc_t Array(LowCardinality(UInt64)), + array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int128; CREATE TABLE vertx_test_int128 ( id Int8, @@ -290,218 +282,202 @@ CREATE TABLE vertx_test_int128 ( array3_lc_t Array(Array(Array(LowCardinality(Int128)))), nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_string; CREATE TABLE vertx_test_string ( - id Int8, - simple_t String, - nullable_t Nullable(String), - array_t Array(String), - array3_t Array(Array(Array(String))), - nullable_array_t Array(Nullable(String)), - nullable_array3_t Array(Array(Array(Nullable(String)))), - simple_lc_t LowCardinality(String), - nullable_lc_t LowCardinality(Nullable(String)), - array_lc_t Array(LowCardinality(String)), - array3_lc_t Array(Array(Array(LowCardinality(String)))), - nullable_array_lc_t Array(LowCardinality(Nullable(String))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t String, + nullable_t Nullable(String), + array_t Array(String), + array3_t Array(Array(Array(String))), + nullable_array_t Array(Nullable(String)), + nullable_array3_t Array(Array(Array(Nullable(String)))), + simple_lc_t LowCardinality(String), + nullable_lc_t LowCardinality(Nullable(String)), + array_lc_t Array(LowCardinality(String)), + array3_lc_t Array(Array(Array(LowCardinality(String)))), + nullable_array_lc_t Array(LowCardinality(Nullable(String))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_fixedstring; CREATE TABLE vertx_test_fixedstring ( - id Int8, - simple_t FixedString(12), - nullable_t Nullable(FixedString(12)), - array_t Array(FixedString(12)), - array3_t Array(Array(Array(FixedString(12)))), - nullable_array_t Array(Nullable(FixedString(12))), - nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), - simple_lc_t LowCardinality(FixedString(12)), - nullable_lc_t LowCardinality(Nullable(FixedString(12))), - array_lc_t Array(LowCardinality(FixedString(12))), - array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), - nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t FixedString(12), + nullable_t Nullable(FixedString(12)), + array_t Array(FixedString(12)), + array3_t Array(Array(Array(FixedString(12)))), + nullable_array_t Array(Nullable(FixedString(12))), + nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), + simple_lc_t LowCardinality(FixedString(12)), + nullable_lc_t LowCardinality(Nullable(FixedString(12))), + array_lc_t Array(LowCardinality(FixedString(12))), + array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), + nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime; CREATE TABLE vertx_test_datetime ( - id Int8, - simple_t DateTime, - nullable_t Nullable(DateTime), - array_t Array(DateTime), - array3_t Array(Array(Array(DateTime))), - nullable_array_t Array(Nullable(DateTime)), - nullable_array3_t Array(Array(Array(Nullable(DateTime)))), - simple_lc_t LowCardinality(DateTime), - nullable_lc_t LowCardinality(Nullable(DateTime)), - array_lc_t Array(LowCardinality(DateTime)), - array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), - nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t DateTime, + nullable_t Nullable(DateTime), + array_t Array(DateTime), + array3_t Array(Array(Array(DateTime))), + nullable_array_t Array(Nullable(DateTime)), + nullable_array3_t Array(Array(Array(Nullable(DateTime)))), + simple_lc_t LowCardinality(DateTime), + nullable_lc_t LowCardinality(Nullable(DateTime)), + array_lc_t Array(LowCardinality(DateTime)), + array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), + nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_datetime64; CREATE TABLE vertx_test_datetime64 ( - id Int8, - simple_t DateTime64, - nullable_t Nullable(DateTime64), - array_t Array(DateTime64), - array3_t Array(Array(Array(DateTime64))), - nullable_array_t Array(Nullable(DateTime64)), - nullable_array3_t Array(Array(Array(Nullable(DateTime64)))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t DateTime64(3), + nullable_t Nullable(DateTime64(3)), + array_t Array(DateTime64(3)), + array3_t Array(Array(Array(DateTime64(3)))), + nullable_array_t Array(Nullable(DateTime64(3))), + nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_date; CREATE TABLE vertx_test_date ( - id Int8, - simple_t Date, - nullable_t Nullable(Date), - array_t Array(Date), - array3_t Array(Array(Array(Date))), - nullable_array_t Array(Nullable(Date)), - nullable_array3_t Array(Array(Array(Nullable(Date)))), - simple_lc_t LowCardinality(Date), - nullable_lc_t LowCardinality(Nullable(Date)), - array_lc_t Array(LowCardinality(Date)), - array3_lc_t Array(Array(Array(LowCardinality(Date)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Date))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Date, + nullable_t Nullable(Date), + array_t Array(Date), + array3_t Array(Array(Array(Date))), + nullable_array_t Array(Nullable(Date)), + nullable_array3_t Array(Array(Array(Nullable(Date)))), + simple_lc_t LowCardinality(Date), + nullable_lc_t LowCardinality(Nullable(Date)), + array_lc_t Array(LowCardinality(Date)), + array3_lc_t Array(Array(Array(LowCardinality(Date)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Date))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_uuid; CREATE TABLE vertx_test_uuid ( - id Int8, - simple_t UUID, - nullable_t Nullable(UUID), - array_t Array(UUID), - array3_t Array(Array(Array(UUID))), - nullable_array_t Array(Nullable(UUID)), - nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t UUID, + nullable_t Nullable(UUID), + array_t Array(UUID), + array3_t Array(Array(Array(UUID))), + nullable_array_t Array(Nullable(UUID)), + nullable_array3_t Array(Array(Array(Nullable(UUID)))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal32; CREATE TABLE vertx_test_decimal32 ( - id Int8, - simple_t Decimal32(4), - nullable_t Nullable(Decimal32(4)), - array_t Array(Decimal32(4)), - array3_t Array(Array(Array(Decimal32(4)))), - nullable_array_t Array(Nullable(Decimal32(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal32(4), + nullable_t Nullable(Decimal32(4)), + array_t Array(Decimal32(4)), + array3_t Array(Array(Array(Decimal32(4)))), + nullable_array_t Array(Nullable(Decimal32(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal64; CREATE TABLE vertx_test_decimal64 ( - id Int8, - simple_t Decimal64(4), - nullable_t Nullable(Decimal64(4)), - array_t Array(Decimal64(4)), - array3_t Array(Array(Array(Decimal64(4)))), - nullable_array_t Array(Nullable(Decimal64(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal64(4), + nullable_t Nullable(Decimal64(4)), + array_t Array(Decimal64(4)), + array3_t Array(Array(Array(Decimal64(4)))), + nullable_array_t Array(Nullable(Decimal64(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_decimal128; CREATE TABLE vertx_test_decimal128 ( - id Int8, - simple_t Decimal128(4), - nullable_t Nullable(Decimal128(4)), - array_t Array(Decimal128(4)), - array3_t Array(Array(Array(Decimal128(4)))), - nullable_array_t Array(Nullable(Decimal128(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Decimal128(4), + nullable_t Nullable(Decimal128(4)), + array_t Array(Decimal128(4)), + array3_t Array(Array(Array(Decimal128(4)))), + nullable_array_t Array(Nullable(Decimal128(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( - id Int8, - simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), - nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), - nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), - nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), + nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), + array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), + nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), + nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum16; CREATE TABLE vertx_test_enum16 ( - id Int8, - simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), - nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), - nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), - nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), + nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), + array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), + nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), + nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float32; CREATE TABLE vertx_test_float32 ( - id Int8, - simple_t Float32, - nullable_t Nullable(Float32), - array_t Array(Float32), - array3_t Array(Array(Array(Float32))), - nullable_array_t Array(Nullable(Float32)), - nullable_array3_t Array(Array(Array(Nullable(Float32)))), - simple_lc_t LowCardinality(Float32), - nullable_lc_t LowCardinality(Nullable(Float32)), - array_lc_t Array(LowCardinality(Float32)), - array3_lc_t Array(Array(Array(LowCardinality(Float32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Float32, + nullable_t Nullable(Float32), + array_t Array(Float32), + array3_t Array(Array(Array(Float32))), + nullable_array_t Array(Nullable(Float32)), + nullable_array3_t Array(Array(Array(Nullable(Float32)))), + simple_lc_t LowCardinality(Float32), + nullable_lc_t LowCardinality(Nullable(Float32)), + array_lc_t Array(LowCardinality(Float32)), + array3_lc_t Array(Array(Array(LowCardinality(Float32)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_float64; CREATE TABLE vertx_test_float64 ( - id Int8, - simple_t Float64, - nullable_t Nullable(Float64), - array_t Array(Float64), - array3_t Array(Array(Array(Float64))), - nullable_array_t Array(Nullable(Float64)), - nullable_array3_t Array(Array(Array(Nullable(Float64)))), - simple_lc_t LowCardinality(Float64), - nullable_lc_t LowCardinality(Nullable(Float64)), - array_lc_t Array(LowCardinality(Float64)), - array3_lc_t Array(Array(Array(LowCardinality(Float64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t Float64, + nullable_t Nullable(Float64), + array_t Array(Float64), + array3_t Array(Array(Array(Float64))), + nullable_array_t Array(Nullable(Float64)), + nullable_array3_t Array(Array(Array(Nullable(Float64)))), + simple_lc_t LowCardinality(Float64), + nullable_lc_t LowCardinality(Nullable(Float64)), + array_lc_t Array(LowCardinality(Float64)), + array3_lc_t Array(Array(Array(LowCardinality(Float64)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv6; CREATE TABLE vertx_test_ipv6 ( - id Int8, - simple_t IPv6, - nullable_t Nullable(IPv6), - array_t Array(IPv6), - array3_t Array(Array(Array(IPv6))), - nullable_array_t Array(Nullable(IPv6)), - nullable_array3_t Array(Array(Array(Nullable(IPv6)))), - simple_lc_t LowCardinality(IPv6), - nullable_lc_t LowCardinality(Nullable(IPv6)), - array_lc_t Array(LowCardinality(IPv6)), - array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t IPv6, + nullable_t Nullable(IPv6), + array_t Array(IPv6), + array3_t Array(Array(Array(IPv6))), + nullable_array_t Array(Nullable(IPv6)), + nullable_array3_t Array(Array(Array(Nullable(IPv6)))), + simple_lc_t LowCardinality(IPv6), + nullable_lc_t LowCardinality(Nullable(IPv6)), + array_lc_t Array(LowCardinality(IPv6)), + array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_ipv4; CREATE TABLE vertx_test_ipv4 ( - id Int8, - simple_t IPv4, - nullable_t Nullable(IPv4), - array_t Array(IPv4), - array3_t Array(Array(Array(IPv4))), - nullable_array_t Array(Nullable(IPv4)), - nullable_array3_t Array(Array(Array(Nullable(IPv4)))), - simple_lc_t LowCardinality(IPv4), - nullable_lc_t LowCardinality(Nullable(IPv4)), - array_lc_t Array(LowCardinality(IPv4)), - array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = MergeTree() - ORDER BY (id); + id Int8, + simple_t IPv4, + nullable_t Nullable(IPv4), + array_t Array(IPv4), + array3_t Array(Array(Array(IPv4))), + nullable_array_t Array(Nullable(IPv4)), + nullable_array3_t Array(Array(Array(Nullable(IPv4)))), + simple_lc_t LowCardinality(IPv4), + nullable_lc_t LowCardinality(Nullable(IPv4)), + array_lc_t Array(LowCardinality(IPv4)), + array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), + nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) +) engine = Memory(); From 08be2bfe3c9f8978eb0d6f949f19b80dff75575c Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 6 Apr 2021 22:25:12 +0300 Subject: [PATCH 132/176] added Decimal128/256 tests Signed-off-by: vladimir --- .../impl/codec/ClickhouseStreamDataSink.java | 1 + .../codec/Lz4ClickhouseStreamDataSink.java | 5 ++ .../codec/RawClickhouseStreamDataSink.java | 5 ++ .../impl/codec/columns/ArrayColumn.java | 5 ++ .../impl/codec/columns/ClickhouseColumn.java | 4 +- .../impl/codec/columns/ColumnUtils.java | 14 ++++ .../impl/codec/columns/Decimal128Column.java | 12 ++- .../impl/codec/columns/Decimal256Column.java | 12 ++- .../impl/codec/columns/Decimal32Column.java | 2 +- .../codec/columns/Decimal32ColumnWriter.java | 5 +- .../impl/codec/columns/Decimal64Column.java | 4 +- .../codec/columns/Decimal64ColumnWriter.java | 4 +- .../columns/GenericDecimalColumnWriter.java | 75 +++++++++++++++++ .../alltypes/Decimal128Test.java | 15 ++++ .../alltypes/Decimal256Test.java | 15 ++++ .../alltypes/HugeDecimalTest.java | 80 +++++++++++++++++++ .../src/test/python/all_types_table.sql | 10 +++ .../src/test/python/gen_all_types_tables.py | 2 +- .../src/test/resources/init.sql | 10 +++ 19 files changed, 263 insertions(+), 17 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index b7276845de..762fa4724a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -9,6 +9,7 @@ public interface ClickhouseStreamDataSink { void writeFloatLE(float value); void writeDoubleLE(double value); void writeBytes(byte[] value); + void writeBytes(byte[] value, int index, int length); void writeBoolean(boolean value); void writeZero(int length); void writePascalString(String value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 187a2f1af8..b700d4dd44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -67,6 +67,11 @@ public void writeBytes(byte[] value) { tmpStorage.writeBytes(value); } + @Override + public void writeBytes(byte[] value, int index, int length) { + tmpStorage.writeBytes(value, index, length); + } + @Override public void writeBoolean(boolean value) { tmpStorage.writeBoolean(value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index c8e224bace..93297777ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -49,6 +49,11 @@ public void writeBytes(byte[] value) { sink.writeBytes(value); } + @Override + public void writeBytes(byte[] value, int index, int length) { + sink.writeBytes(value, index, length); + } + @Override public void writeBoolean(boolean value) { sink.writeBoolean(value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 4a4a3acf83..a63f3047c6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -33,4 +33,9 @@ public ClickhouseColumnReader reader(int nRows) { public ClickhouseColumnWriter writer(List data, int columnIndex) { return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); } + + @Override + public Object nullValue() { + throw new IllegalArgumentException("arrays are not nullable"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index b40a949c40..55089b7591 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -16,7 +16,5 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); - public Object nullValue() { - throw new IllegalStateException("not implemented for " + this.getClass()); - } + public abstract Object nullValue(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 8b58317ad6..7f092af502 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,5 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; + +import java.math.BigDecimal; + public class ColumnUtils { public static byte[] reverse(byte[] src) { for (int i = 0, j = src.length - 1; i < j; ++i, --j) { @@ -16,4 +20,14 @@ public static int getLastNonZeroPos(byte[] bytes) { } return lastNonZeroPos; } + + //TODO: rework checks + public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { + if (columnDescriptor.getScale() < bd.scale()) { + throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); + } + if (columnDescriptor.getPrecision() < bd.precision()) { + throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getPrecision() + ", got " + bd.precision()); + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index b5bc8ba857..266af50f42 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -2,7 +2,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; import java.math.MathContext; import java.math.RoundingMode; import java.util.List; @@ -11,9 +14,11 @@ public class Decimal128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final Numeric zeroValue; public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override @@ -23,6 +28,11 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new GenericDecimalColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index b2c435974c..9f01dac6aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -2,7 +2,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import java.math.BigDecimal; +import java.math.BigInteger; import java.math.MathContext; import java.math.RoundingMode; import java.util.List; @@ -13,8 +16,11 @@ public class Decimal256Column extends ClickhouseColumn { public static final int MAX_PRECISION = 76; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); + private final Numeric zeroValue; + public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); + zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } @Override @@ -24,6 +30,10 @@ public ClickhouseColumnReader reader(int nRows) { @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - throw new IllegalArgumentException("not implemented"); + return new GenericDecimalColumnWriter(data, descriptor, columnIndex); + } + + public Object nullValue() { + return zeroValue; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 091b2d9412..bf8a91b863 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -15,7 +15,7 @@ public class Decimal32Column extends ClickhouseColumn { public static final int MAX_PRECISION = 9; public final static MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - public final Numeric zeroValue; + private final Numeric zeroValue; public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index 4989be1f61..4136f7beec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -21,10 +21,7 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { serializeDataNull(sink); return; } - //TODO: rework loss of precision checks across all DecimalXX columns - if (columnDescriptor.getScale() < bd.scale()) { - throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); - } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); BigInteger bi = bd.unscaledValue(); sink.writeIntLE(bi.intValueExact()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index e727b66ba2..53f57bc9c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -14,9 +14,7 @@ public class Decimal64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; public static final int MAX_PRECISION = 18; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); - - - public final Numeric zeroValue; + private final Numeric zeroValue; public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index bbf1c99d61..e2c7aa71a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -21,9 +21,7 @@ protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { serializeDataNull(sink); return; } - if (columnDescriptor.getScale() < bd.scale()) { - throw new IllegalArgumentException("possible loss of precision: max " + columnDescriptor.getScale() + ", got " + bd.scale()); - } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); BigInteger bi = bd.unscaledValue(); sink.writeLongLE(bi.longValueExact()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java new file mode 100644 index 0000000000..f95def64cd --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -0,0 +1,75 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +public class GenericDecimalColumnWriter extends ClickhouseColumnWriter { + private final BigInteger negAddon; + + public GenericDecimalColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, int columnIndex) { + super(data, descriptor, columnIndex); + this.negAddon = BigInteger.ONE.shiftLeft(columnDescriptor.getElementSize() * 8); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + BigDecimal bd = ((Numeric) val).bigDecimalValue(); + if (bd == null) { + serializeDataNull(sink); + return; + } + ColumnUtils.bigDecimalFitsOrThrow(bd, columnDescriptor); + BigInteger bi = bd.unscaledValue(); + boolean negative = bi.signum() == -1; + if (negative) { + bi = bi.add(negAddon); + } + byte[] bytes = ColumnUtils.reverse(bi.toByteArray()); + sink.writeBytes(bytes, 0, negative ? bytes.length - 1 : bytes.length); + int extraZeros = negative ? 0 : columnDescriptor.getElementSize() - bytes.length; + sink.writeZero(extraZeros); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(columnDescriptor.getElementSize()); + } + + private static void traceBytes(byte[] bytes) { + for (byte b : bytes) { + System.err.print(Integer.toHexString(Byte.toUnsignedInt(b))); + System.err.print(","); + } + System.err.println(); + } + + public static BigInteger parseBigIntegerPositive(String num, int bitlen) { + BigInteger b = new BigInteger(num); + if (b.compareTo(BigInteger.ZERO) < 0) + b = b.add(BigInteger.ONE.shiftLeft(bitlen)); + return b; + } + + public static void main(String[] args) { + BigInteger bi = parseBigIntegerPositive("-2", 16); + System.err.println(bi); + System.err.println("bytes1:"); + traceBytes(bi.toByteArray()); + System.err.println("bytes2:"); + traceBytes(BigInteger.valueOf(65534).toByteArray()); + + BigInteger bi2 = parseBigIntegerPositive("-1", 16); + System.err.println("bytes3_1"); + traceBytes(bi2.toByteArray()); + + bi2 = parseBigIntegerPositive("-1", 15); + System.err.println("bytes3_2"); + traceBytes(bi2.toByteArray()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java new file mode 100644 index 0000000000..1aad85076a --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -0,0 +1,15 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +import java.math.MathContext; +import java.math.RoundingMode; + +@RunWith(VertxUnitRunner.class) +public class Decimal128Test extends HugeDecimalTest { + public Decimal128Test() { + super("decimal128", new MathContext(Decimal128Column.MAX_PRECISION, RoundingMode.HALF_EVEN)); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java new file mode 100644 index 0000000000..af927fd2ec --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -0,0 +1,15 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import org.junit.runner.RunWith; + +import java.math.MathContext; +import java.math.RoundingMode; + +@RunWith(VertxUnitRunner.class) +public class Decimal256Test extends HugeDecimalTest { + public Decimal256Test() { + super("decimal256", new MathContext(Decimal256Column.MAX_PRECISION, RoundingMode.HALF_EVEN)); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java new file mode 100644 index 0000000000..c644d4503c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -0,0 +1,80 @@ +package io.vertx.clickhousenativeclient.alltypes; + + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; +import org.junit.runner.RunWith; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public abstract class HugeDecimalTest extends AllTypesBase { + public static final int SCALE = 4; + public final MathContext mc; + + public HugeDecimalTest(String tableSuffix, MathContext mc) { + super(tableSuffix, new MyColumnChecker<>(Numeric.class, Tuple::getNumeric, Row::getNumeric, Tuple::getArrayOfNumerics, Row::getArrayOfNumerics), false); + this.mc = mc; + } + + private Numeric nm(Long src) { + BigInteger bi = BigInteger.valueOf(src); + BigDecimal bd = new BigDecimal(bi, SCALE, mc); + return Numeric.create(bd); + } + + @Override + public List createBatch() { + long mnl = Long.MIN_VALUE; + long mxl = Long.MAX_VALUE; + + Numeric v1 = nm(mxl / 3); + Numeric v2 = nm(mnl / 4); + Numeric v3 = nm(mxl / 5); + Numeric v4 = nm(mnl / 6); + Numeric v5 = nm(mxl / 7); + Numeric v6 = nm(mnl / 7); + Numeric nv = nm(0L); + Numeric mn = nm(mnl); + Numeric mx = nm(mxl); + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t + Tuple.of((byte)1, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Numeric[]{mn, mn}, new Numeric[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mn}, new Numeric[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Numeric[]{mx, mx}, new Numeric[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mx, null, mx}, new Numeric[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Numeric[]{mn, mx}, new Numeric[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{mn, null, mx}, new Numeric[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{}, new Numeric[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{}, new Numeric[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Numeric[]{}, new Numeric[][][]{{{}}}, new Numeric[]{null}, new Numeric[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv}, new Numeric[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Numeric[]{nv, mn, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, mn, null, mx}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Numeric[]{v3, v1, nv, mx, v4}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, v1, null, nv, mx, v3}, new Numeric[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Numeric[]{v1, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Numeric[]{nv, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{nv, null, v4}, new Numeric[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Numeric[]{v4, nv, nv}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v3, nv, null}, new Numeric[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Numeric[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Numeric[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Numeric[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } +} diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql index ac5b7550bf..c92839a52f 100644 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql @@ -258,6 +258,16 @@ CREATE TABLE vertx_test_decimal128 ( nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) ) engine = Memory(); +DROP TABLE IF EXISTS vertx_test_decimal256; +CREATE TABLE vertx_test_decimal256 ( + id Int8, + simple_t Decimal256(4), + nullable_t Nullable(Decimal256(4)), + array_t Array(Decimal256(4)), + array3_t Array(Array(Array(Decimal256(4)))), + nullable_array_t Array(Nullable(Decimal256(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py index 6010fbc4eb..8326f78aab 100755 --- a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py @@ -6,7 +6,7 @@ {'table': 'Decimal32', 'type': 'Decimal32(4)'}, {'table': 'Decimal64', 'type': 'Decimal64(4)'}, {'table': 'Decimal128', 'type': 'Decimal128(4)'}, - #{'table': 'Decimal256', 'type': 'Decimal256(4)'}, + {'table': 'Decimal256', 'type': 'Decimal256(4)'}, {'table': 'Enum8', 'type': 'Enum8(\'v0\' = -128, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 127)'}, {'table': 'Enum16', 'type': 'Enum16(\'v0\' = -32768, \'v1\' = -2,\'v2\' = -1, \'v3\' = 0,\'v4\' = 1, \'v5\' = 2, \'v6\' = 32767)'}, 'Float32', 'Float64', 'IPv6', 'IPv4']; diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-native-client/src/test/resources/init.sql index c87bbcdf67..ac72d61c21 100644 --- a/vertx-clickhouse-native-client/src/test/resources/init.sql +++ b/vertx-clickhouse-native-client/src/test/resources/init.sql @@ -397,6 +397,16 @@ CREATE TABLE vertx_test_decimal128 ( nullable_array_t Array(Nullable(Decimal128(4))), nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) ) engine = Memory(); +DROP TABLE IF EXISTS vertx_test_decimal256; +CREATE TABLE vertx_test_decimal256 ( + id Int8, + simple_t Decimal256(4), + nullable_t Nullable(Decimal256(4)), + array_t Array(Decimal256(4)), + array3_t Array(Array(Array(Decimal256(4)))), + nullable_array_t Array(Nullable(Decimal256(4))), + nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_enum8; CREATE TABLE vertx_test_enum8 ( id Int8, From 14ae1c640b47ef7963584cbaa26d463c2ca083b4 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 08:15:06 +0300 Subject: [PATCH 133/176] fixed TODO: reuse cached key columns for LowCardinality reader Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 1 - ...ickhouseNativeConnectOptionsConverter.java | 3 --- .../ClickhouseNativeConnectOptions.java | 6 ----- .../ClickhouseNativeConnectionFactory.java | 8 ++----- .../ClickhouseNativeSocketConnection.java | 3 +-- .../impl/RowOrientedBlock.java | 2 +- .../impl/codec/ExtendedQueryCommandCodec.java | 1 - .../impl/codec/columns/ArrayColumnReader.java | 5 ++++- .../impl/codec/columns/ClickhouseColumns.java | 9 ++++++-- .../columns/GenericDecimalColumnReader.java | 1 - .../columns/LowCardinalityColumnReader.java | 22 +++++++++++-------- .../columns/LowCardinalityColumnWriter.java | 2 +- 12 files changed, 29 insertions(+), 34 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 1fc77e8634..dffb133d29 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -74,7 +74,6 @@ test - com.fasterxml.jackson.dataformat jackson-dataformat-yaml diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 1c910b6ffd..b9db59e66f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -16,8 +16,6 @@ public class ClickhouseNativeConnectOptionsConverter { public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { for (java.util.Map.Entry member : json) { switch (member.getKey()) { - case "pipeliningLimit": - break; } } } @@ -27,6 +25,5 @@ public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { } public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { - json.put("pipeliningLimit", obj.getPipeliningLimit()); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 716487ccd7..0de9f4fb3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -7,9 +7,6 @@ @DataObject(generateConverter = true) public class ClickhouseNativeConnectOptions extends SqlConnectOptions { - public static final int DEFAULT_PIPELINING_LIMIT = 256; - - private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT; public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); @@ -33,7 +30,4 @@ public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { super(other); } - public int getPipeliningLimit() { - return pipeliningLimit; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index c4a0d6d828..ae1bcfaf0b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -19,7 +19,6 @@ public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); - private int pipeliningLimit; private final LZ4Factory lz4Factory; ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { @@ -47,8 +46,6 @@ private LZ4Factory lz4FactoryForName(String name) { @Override protected void initializeConfiguration(SqlConnectOptions connectOptions) { - ClickhouseNativeConnectOptions options = (ClickhouseNativeConnectOptions) connectOptions; - this.pipeliningLimit = options.getPipeliningLimit(); } @Override @@ -74,12 +71,11 @@ private Future doConnect() { // Client is closed return context.failedFuture(e); } - Future connFut = soFut.map(so -> newSocketConnection((NetSocketInternal) so)); - return connFut; + return soFut.map(so -> newSocketConnection((NetSocketInternal) so)); } private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, pipeliningLimit, context, lz4Factory); + preparedStatementCacheSqlFilter, context, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 48f95b1d8e..8924104464 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -27,10 +27,9 @@ public ClickhouseNativeSocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, int preparedStatementCacheSize, Predicate preparedStatementCacheSqlFilter, - int pipeliningLimit, EventLoopContext context, LZ4Factory lz4Factory) { - super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context); + super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, 1, context); this.lz4Factory = lz4Factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 58472bcc18..0e5d622f44 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -45,7 +45,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //n_rows int nRows = toRow - fromRow; sink.writeULeb128(nRows); - //TODO smagellan + //TODO smagellan: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index e6e414700f..9c22429196 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -40,7 +40,6 @@ protected String sql() { void encode(ClickhouseNativeEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); - //TODO smagellan: introduce lock() method if (ourCursorId != null) { conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 9930fed124..3f4411a1f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -109,7 +109,10 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //reslicing for every row can be slow (for BLOBS and Enums if recoding requested), maybe store resliced array into Phantom/Weak reference + //TODO smagellan: + //reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe + // 1) store resliced array into Phantom/Weak reference or + // 2) split master-splice into nRows splices (1 per row) reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } return reslicedRet[rowIdx]; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index b7c22f5751..384539106f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -53,7 +53,8 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un if (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); //TODO smagellan: get rid of recursion - //TODO smagellan: introduce arrays dimensions size + //TODO smagellan: introduce arrays depth size into ClickhouseNativeColumnDescriptor + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, nested); @@ -166,6 +167,11 @@ private static int decimalSize(int precision) { } } + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); + return columnForSpec(descr, md); + } + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { if (descr.isArray()) { return new ArrayColumn(descr, md); @@ -217,7 +223,6 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } return precision == null ? new DateTimeColumn(descr, zoneId) : new DateTime64Column(descr, precision, md.isSaturateExtraNanos(), zoneId); } else if (jdbcType == JDBCType.DECIMAL) { - //TODO smagellan: merge into one statement after introducing column readers if (descr.getElementSize() == Decimal32Column.ELEMENT_SIZE) { return new Decimal32Column(descr); } else if (descr.getElementSize() == Decimal64Column.ELEMENT_SIZE) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 784d8c257d..24d25ae02b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -8,7 +8,6 @@ import java.math.BigInteger; import java.math.MathContext; -//TODO smagellan: maybe introduce separate universal reader/column for Decimal128 and Decimal256 public class GenericDecimalColumnReader extends ClickhouseColumnReader { private final MathContext mc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 4a1e0faf79..b6306e1ab0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -8,6 +8,11 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { public static final long SUPPORTED_SERIALIZATION_VERSION = 1; + public static final ClickhouseColumn UINT8_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null); + public static final ClickhouseColumn UINT16_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null); + public static final ClickhouseColumn UINT32_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null); + public static final ClickhouseColumn UINT64_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null); + private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; private ClickhouseColumnReader indexColumn; @@ -74,7 +79,7 @@ protected void readData(ClickhouseStreamDataSource in) { } int keyType = (int)(serType & 0xf); if (keysColumn == null) { - keysColumn = uintColumn(columnDescriptor.name(), keyType).reader(nRows); + keysColumn = uintColumn(keyType).reader(nRows); } keysColumn.readColumn(in); } @@ -107,20 +112,19 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } - static ClickhouseColumn uintColumn(String name, int code) { - ClickhouseNativeColumnDescriptor tmp; - //TODO smagellan: introduce immutable column descriptors for (U)Ints, reuse cached instances + static ClickhouseColumn uintColumn(int code) { + ClickhouseColumn tmp; if (code == 0) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt8", name); + tmp = UINT8_KEY_COLUMN; } else if (code == 1) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt16", name); + tmp = UINT16_KEY_COLUMN; } else if (code == 2) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt32", name); + tmp = UINT32_KEY_COLUMN; } else if (code == 3) { - tmp = ClickhouseColumns.columnDescriptorForSpec("UInt64", name); + tmp = UINT64_KEY_COLUMN; } else { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return ClickhouseColumns.columnForSpec(tmp, null); + return tmp; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 85c9fac8fe..78f7ae9e24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -48,7 +48,7 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, return; } int intType = (int) (log2(dictionarySize) / 8); - ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(columnDescriptor.name(), intType); + ClickhouseColumn valuesColumn = LowCardinalityColumnReader.uintColumn(intType); int serializationType = SERIALIZATION_TYPE | intType; sink.writeLongLE(serializationType); From 7c92fbe0dd01536b969473f73156c6e9159d96cc Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 09:29:20 +0300 Subject: [PATCH 134/176] fixed TODO: do not store array descriptor as lined list of nested types Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 21 ++++++--- .../impl/codec/columns/ArrayColumn.java | 6 +-- .../impl/codec/columns/ArrayColumnReader.java | 20 ++++----- .../impl/codec/columns/ArrayColumnWriter.java | 44 +++++++++---------- .../impl/codec/columns/ClickhouseColumns.java | 9 ++-- .../alltypes/Int16Test.java | 2 +- 6 files changed, 52 insertions(+), 50 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 29a5a27f3d..fd87419f8c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -23,6 +23,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; + private final int arrayDepth; private final ClickhouseNativeColumnDescriptor nested; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -30,16 +31,16 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, null); + minValue, maxValue, null, null, -1, null); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - ClickhouseNativeColumnDescriptor nested) { + int arrayDepth, ClickhouseNativeColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, nested); + minValue, maxValue, null, null, arrayDepth, nested); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -48,14 +49,15 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, precision, scale, null); + minValue, maxValue, precision, scale, -1, null); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - Integer precision, Integer scale, ClickhouseNativeColumnDescriptor nested) { + Integer precision, Integer scale, + int arrayDepth, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -69,6 +71,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; + this.arrayDepth = arrayDepth; this.nested = nested; } @@ -89,6 +92,10 @@ public boolean isArray() { return isArray; } + public int arrayDepth() { + return arrayDepth; + } + @Override public JDBCType jdbcType() { return jdbcType; @@ -140,7 +147,7 @@ public Integer getScale() { public ClickhouseNativeColumnDescriptor copyAsNestedArray() { return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, this); + JDBCType.ARRAY, false, false, false, null, null, arrayDepth + 1, nested); } public ClickhouseNativeColumnDescriptor copyAsNonArray() { @@ -149,7 +156,7 @@ public ClickhouseNativeColumnDescriptor copyAsNonArray() { public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, nested); + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); } public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index a63f3047c6..b7b98f033b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -8,12 +8,10 @@ public class ArrayColumn extends ClickhouseColumn { private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementaryDescr; public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; - this.elementaryDescr = elementaryDescr(descriptor); } private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { @@ -26,12 +24,12 @@ private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNative @Override public ClickhouseColumnReader reader(int nRows) { - return new ArrayColumnReader(nRows, descriptor, elementaryDescr, md); + return new ArrayColumnReader(nRows, descriptor, md); } @Override public ClickhouseColumnWriter writer(List data, int columnIndex) { - return new ArrayColumnWriter(data, descriptor, elementaryDescr, md, columnIndex); + return new ArrayColumnWriter(data, descriptor, md, columnIndex); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 3f4411a1f3..fb4a73e17a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,7 +19,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private List> slicesSeries; - private ClickhouseNativeColumnDescriptor curNestedColumnDescr; + private Integer curNestedColumnDepth; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; private Class elementClass; @@ -30,10 +30,10 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; private List curLevelSlice; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr.copyAsNestedArray()); this.md = md; - this.elementTypeDescr = elementTypeDescr; + this.elementTypeDescr = descr.getNestedDescr(); } @Override @@ -49,21 +49,21 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDescr = columnDescriptor.getNestedDescr(); + curNestedColumnDepth = 1; nItems = 0; } if (statePrefix == null) { return null; } - if (curNestedColumnDescr.isArray()) { + if (curNestedColumnDepth < columnDescriptor.arrayDepth()) { readSlices(in); } if (nestedColumnReader == null) { - nestedColumn = ClickhouseColumns.columnForSpec(curNestedColumnDescr, md); + nestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); nestedColumnReader = nestedColumn.reader(nItems); elementClass = nestedColumn.nullValue().getClass(); } - if (curNestedColumnDescr.isNullable()) { + if (elementTypeDescr.isNullable()) { nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); } if (nItems > 0) { @@ -184,12 +184,12 @@ private void readSlices(ClickhouseStreamDataSource in) { curLevelSliceSize = nRows; } if (nRows == 0) { - curNestedColumnDescr = elementTypeDescr; + curNestedColumnDepth = columnDescriptor.arrayDepth(); return; } long lastSliceSize = 0; - while (curNestedColumnDescr.isArray()) { + while (curNestedColumnDepth < columnDescriptor.arrayDepth()) { if (curLevelSlice == null) { curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); curLevelSlice.add(0); @@ -207,7 +207,7 @@ private void readSlices(ClickhouseStreamDataSource in) { slicesSeries.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curNestedColumnDescr = curNestedColumnDescr.getNestedDescr(); + curNestedColumnDepth += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 1cf50ea9fc..4091005e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -16,51 +16,51 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeColumnDescriptor elementTypeDescr, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { super(data, descriptor.copyAsNestedArray(), columnIndex); this.md = md; - this.elementTypeDescr = elementTypeDescr; + this.elementTypeDescr = descriptor.getNestedDescr(); this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); } @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { writeSizes(sink, false, fromRow, toRow); - writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); - writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeNullsInfo(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); } private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } - ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); - if (localNested.isArray()) { + + if (localDepth < descr.arrayDepth()) { localData = flattenArrays(localData, fromRow, toRow, colIndex); colIndex = 0; fromRow = 0; toRow = localData.size(); } - ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(localNested, md); - ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); - if (localWriter.getClass() == ArrayColumnWriter.class) { - ArrayColumnWriter localArrayWriter = (ArrayColumnWriter)localWriter; - localArrayWriter.writeElementData(sink, localDepth + 1, localNested, localData, fromRow, toRow, colIndex); + + if (localDepth < descr.arrayDepth()) { + this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); } else { + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); localWriter.serializeDataInternal(sink, fromRow, toRow); } } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } - ClickhouseNativeColumnDescriptor localNested = descr.getNestedDescr(); - if (localNested.isArray()) { + + if (localDepth < descr.arrayDepth()) { List flattened = flattenArrays(localData, fromRow, toRow, colIndex); - writeNullsInfo(sink, localDepth + 1, localNested, flattened, 0, flattened.size(), 0); + writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); } else { - if (localNested.isNullable()) { + if (elementTypeDescr.isNullable()) { elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); } } @@ -85,7 +85,6 @@ private static List flattenArrays(List data, int fromRow, int toRo private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, int fromRow, int toRow) { int nRows = toRow - fromRow; - ClickhouseNativeColumnDescriptor column = columnDescriptor; List sizes = new ArrayList<>(); if (writeTotalSize) { sizes.add(nRows); @@ -93,20 +92,21 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; - ClickhouseNativeColumnDescriptor nestedColumn; - while ((nestedColumn = column.getNestedDescr()).isArray()) { + int localDepth = 1; + while (localDepth < columnDescriptor.arrayDepth()) { int offset = 0; List newValue = new ArrayList<>(); for (int i = fromRow; i < toRow; ++i) { Object valObj = values.get(i); - Object[] val = (Object[]) maybeUnwrapTuple(valObj, localColumnIndex); + Object tmp = maybeUnwrapTuple(valObj, localColumnIndex); + Object[] val = (Object[]) tmp; offset += val.length; sizes.add(offset); List newTuples = Arrays.asList(val); newValue.addAll(newTuples); } values = newValue; - column = nestedColumn; + ++localDepth; localColumnIndex = 0; fromRow = 0; toRow = newValue.size(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 384539106f..aac86509de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -51,13 +51,10 @@ private static Map buildConstDurationMultipliers() { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; if (spec.startsWith(ARRAY_PREFIX)) { - spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); - //TODO smagellan: get rid of recursion - //TODO smagellan: introduce arrays depth size into ClickhouseNativeColumnDescriptor - - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(spec, name); + Map.Entry arrayDepthInfo = unwrapArrayModifiers(spec); + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDepthInfo.getValue(), name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, nested); + JDBCType.ARRAY, false, false, false, null, null, arrayDepthInfo.getKey(), nested); } boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index 8a53198a18..49cbdd84eb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -27,7 +27,7 @@ public List createBatch() { Short mx = Short.MAX_VALUE; return Arrays.asList( - // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t Tuple.of((byte)1, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)2, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, mn}, new Short[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), Tuple.of((byte)3, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Short[]{mn, mn}, new Short[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Short[]{mn, null, mn}, new Short[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), From 930a424a1cd6c7ccca1150cd037b1c56d9f63092 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 09:46:45 +0300 Subject: [PATCH 135/176] do not do extra nested array copy Signed-off-by: vladimir --- .../codec/ClickhouseNativeColumnDescriptor.java | 9 --------- .../impl/codec/PrepareStatementCodec.java | 1 - .../impl/codec/columns/ArrayColumnReader.java | 9 ++++----- .../impl/codec/columns/ArrayColumnWriter.java | 14 ++++++++------ .../impl/codec/columns/ColumnUtils.java | 2 +- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index fd87419f8c..826201ec1d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -145,15 +145,6 @@ public Integer getScale() { return scale; } - public ClickhouseNativeColumnDescriptor copyAsNestedArray() { - return new ClickhouseNativeColumnDescriptor(name, "Array(" + unparsedNativeType + ")", unparsedNativeType, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, arrayDepth + 1, nested); - } - - public ClickhouseNativeColumnDescriptor copyAsNonArray() { - return copyWithModifiers(false, lowCardinality, nullable); - } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 113624e91e..29f5e8c3f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -34,7 +34,6 @@ void encode(ClickhouseNativeEncoder encoder) { boolean endsWithValues = sql.toLowerCase().endsWith("values"); boolean realInsertBatch = isInsert && (endsWithValues || (valuesIndex = valuesPos(sql, queryType.getValue())) != -1); if (realInsertBatch) { - //TODO smagellan: lock connection with prepared statement id encoder.getConn().lockPsOrThrow(psId); String truncatedSql = endsWithValues ? sql : sql.substring(0, valuesIndex + "values".length()); ByteBuf buf = allocateBuffer(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index fb4a73e17a..540bb9b74d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -31,7 +31,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private List curLevelSlice; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(nRows, descr.copyAsNestedArray()); + super(nRows, descr); this.md = md; this.elementTypeDescr = descr.getNestedDescr(); } @@ -49,7 +49,7 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDepth = 1; + curNestedColumnDepth = 0; nItems = 0; } if (statePrefix == null) { @@ -109,9 +109,8 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //TODO smagellan: - //reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe - // 1) store resliced array into Phantom/Weak reference or + //TODO smagellan: reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe + // 1) store resliced master-array into Phantom/Weak reference or // 2) split master-splice into nRows splices (1 per row) reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 4091005e20..f9ce6c3dbc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -17,7 +17,7 @@ public class ArrayColumnWriter extends ClickhouseColumnWriter { private final ClickhouseColumn elementTypeColumn; public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { - super(data, descriptor.copyAsNestedArray(), columnIndex); + super(data, descriptor, columnIndex); this.md = md; this.elementTypeDescr = descriptor.getNestedDescr(); this.elementTypeColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -26,12 +26,12 @@ public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor desc @Override protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { writeSizes(sink, false, fromRow, toRow); - writeNullsInfo(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); - writeElementData(sink, 1, columnDescriptor, data, fromRow, toRow, columnIndex); + writeNullsInfo(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); + writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); } private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } @@ -43,6 +43,7 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli } if (localDepth < descr.arrayDepth()) { + //TODO: maybe get rid of recursion this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); } else { ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -52,12 +53,13 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { - if (localDepth != 1 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { + if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } if (localDepth < descr.arrayDepth()) { List flattened = flattenArrays(localData, fromRow, toRow, colIndex); + //TODO: maybe get rid of recursion writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); } else { if (elementTypeDescr.isNullable()) { @@ -92,7 +94,7 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; - int localDepth = 1; + int localDepth = 0; while (localDepth < columnDescriptor.arrayDepth()) { int offset = 0; List newValue = new ArrayList<>(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 7f092af502..3f02c14908 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -21,7 +21,7 @@ public static int getLastNonZeroPos(byte[] bytes) { return lastNonZeroPos; } - //TODO: rework checks + //TODO: maybe rework checks public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { if (columnDescriptor.getScale() < bd.scale()) { throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); From 3851d061e1ad1d59ed5f8643a05b8ac9032c7579 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 7 Apr 2021 10:50:31 +0300 Subject: [PATCH 136/176] removed recursion from ArrayColumnWriter Signed-off-by: vladimir --- .../ClickhouseNativeColumnDescriptor.java | 16 ++++----- .../impl/codec/columns/ArrayColumnReader.java | 12 +++---- .../impl/codec/columns/ArrayColumnWriter.java | 34 ++++++++----------- .../impl/codec/columns/ClickhouseColumns.java | 10 +++--- 4 files changed, 34 insertions(+), 38 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 826201ec1d..92f9abb822 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -23,7 +23,7 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer precision; private final Integer scale; - private final int arrayDepth; + private final int arrayDimensionsCount; private final ClickhouseNativeColumnDescriptor nested; public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -38,9 +38,9 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - int arrayDepth, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, - minValue, maxValue, null, null, arrayDepth, nested); + minValue, maxValue, null, null, arrayDimensionsCount, nested); } public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, @@ -57,7 +57,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale, - int arrayDepth, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -71,7 +71,7 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, this.maxValue = bi(maxValue); this.precision = precision; this.scale = scale; - this.arrayDepth = arrayDepth; + this.arrayDimensionsCount = arrayDimensionsCount; this.nested = nested; } @@ -92,8 +92,8 @@ public boolean isArray() { return isArray; } - public int arrayDepth() { - return arrayDepth; + public int arrayDimensionsCount() { + return arrayDimensionsCount; } @Override @@ -147,7 +147,7 @@ public Integer getScale() { public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, - newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDepth, nested); + newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDimensionsCount, nested); } public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 540bb9b74d..024c11f33c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,7 +19,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeColumnDescriptor elementTypeDescr; private List> slicesSeries; - private Integer curNestedColumnDepth; + private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; private Class elementClass; @@ -49,13 +49,13 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { slicesSeries = new ArrayList<>(); - curNestedColumnDepth = 0; + curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } - if (curNestedColumnDepth < columnDescriptor.arrayDepth()) { + if (curDimension < columnDescriptor.arrayDimensionsCount()) { readSlices(in); } if (nestedColumnReader == null) { @@ -183,12 +183,12 @@ private void readSlices(ClickhouseStreamDataSource in) { curLevelSliceSize = nRows; } if (nRows == 0) { - curNestedColumnDepth = columnDescriptor.arrayDepth(); + curDimension = columnDescriptor.arrayDimensionsCount(); return; } long lastSliceSize = 0; - while (curNestedColumnDepth < columnDescriptor.arrayDepth()) { + while (curDimension < columnDescriptor.arrayDimensionsCount()) { if (curLevelSlice == null) { curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); curLevelSlice.add(0); @@ -206,7 +206,7 @@ private void readSlices(ClickhouseStreamDataSource in) { slicesSeries.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curNestedColumnDepth += 1; + curDimension += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index f9ce6c3dbc..5a3555c6f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -35,21 +35,16 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli localData = Collections.emptyList(); } - if (localDepth < descr.arrayDepth()) { + while (localDepth < descr.arrayDimensionsCount()) { localData = flattenArrays(localData, fromRow, toRow, colIndex); colIndex = 0; fromRow = 0; toRow = localData.size(); + localDepth += 1; } - - if (localDepth < descr.arrayDepth()) { - //TODO: maybe get rid of recursion - this.writeElementData(sink, localDepth + 1, descr, localData, fromRow, toRow, colIndex); - } else { - ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); - ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); - localWriter.serializeDataInternal(sink, fromRow, toRow); - } + ClickhouseColumn localNestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); + ClickhouseColumnWriter localWriter = localNestedColumn.writer(localData, colIndex); + localWriter.serializeDataInternal(sink, fromRow, toRow); } private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { @@ -57,14 +52,15 @@ private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, Click localData = Collections.emptyList(); } - if (localDepth < descr.arrayDepth()) { - List flattened = flattenArrays(localData, fromRow, toRow, colIndex); - //TODO: maybe get rid of recursion - writeNullsInfo(sink, localDepth + 1, descr, flattened, 0, flattened.size(), 0); - } else { - if (elementTypeDescr.isNullable()) { - elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); - } + while (localDepth < descr.arrayDimensionsCount()) { + localData = flattenArrays(localData, fromRow, toRow, colIndex); + colIndex = 0; + fromRow = 0; + toRow = localData.size(); + localDepth += 1; + } + if (elementTypeDescr.isNullable()) { + elementTypeColumn.writer(localData, colIndex).serializeNullsMap(sink, fromRow, toRow); } } @@ -95,7 +91,7 @@ private void writeSizes(ClickhouseStreamDataSink sink, boolean writeTotalSize, i List values = data; int localColumnIndex = columnIndex; int localDepth = 0; - while (localDepth < columnDescriptor.arrayDepth()) { + while (localDepth < columnDescriptor.arrayDimensionsCount()) { int offset = 0; List newValue = new ArrayList<>(); for (int i = fromRow; i < toRow; ++i) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index aac86509de..5d2caea968 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -50,11 +50,11 @@ private static Map buildConstDurationMultipliers() { public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; - if (spec.startsWith(ARRAY_PREFIX)) { - Map.Entry arrayDepthInfo = unwrapArrayModifiers(spec); - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDepthInfo.getValue(), name); + Map.Entry arrayDimensionsInfo = maybeUnwrapArrayDimensions(spec); + if (arrayDimensionsInfo.getKey() > 0) { + ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, - JDBCType.ARRAY, false, false, false, null, null, arrayDepthInfo.getKey(), nested); + JDBCType.ARRAY, false, false, false, null, null, arrayDimensionsInfo.getKey(), nested); } boolean isLowCardinality = false; if (spec.startsWith(LOW_CARDINALITY_PREFIX)) { @@ -69,7 +69,7 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un return columnDescriptorForSpec(unparsedSpec, spec, name, nullable, false, isLowCardinality); } - private static Map.Entry unwrapArrayModifiers(String spec) { + private static Map.Entry maybeUnwrapArrayDimensions(String spec) { int arrayDepth = 0; while (spec.startsWith(ARRAY_PREFIX)) { spec = spec.substring(ARRAY_PREFIX_LENGTH, spec.length() - 1); From 73113d8fc1d530c0600017b210070ea249c65311 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 14:15:59 +0300 Subject: [PATCH 137/176] do not reslice every row if recoding is required Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 107 ++++++++++++++---- .../columns/LowCardinalityColumnReader.java | 27 ++--- .../ArraySerDesTest.java | 19 +++- 3 files changed, 111 insertions(+), 42 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 024c11f33c..e47d6590e7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -3,22 +3,28 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.lang.reflect.Array; import java.nio.charset.Charset; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private List> slicesSeries; + private List> masterSlice; + private List>> perRowsSlice; + private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; private ClickhouseColumn nestedColumn; @@ -48,15 +54,26 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - slicesSeries = new ArrayList<>(); + masterSlice = new ArrayList<>(); curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } + boolean maybeRequiresExtraEncoding = elementTypeDescr.jdbcType() == JDBCType.VARCHAR + || elementTypeDescr.getNestedType().startsWith("Enum"); if (curDimension < columnDescriptor.arrayDimensionsCount()) { - readSlices(in); + if (maybeRequiresExtraEncoding) { + readAsPerRowSlices(in); + LOG.info("per row slices: " + perRowsSlice); + } else { + readAsMasterSlice(in); + LOG.info("master slice: " + masterSlice); + } + if (curDimension < columnDescriptor.arrayDimensionsCount()) { + return null; + } } if (nestedColumnReader == null) { nestedColumn = ClickhouseColumns.columnForSpec(elementTypeDescr, md); @@ -69,7 +86,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (nItems > 0) { assert nItems == nestedColumnReader.nRows; if (nestedColumnReader.getClass() == LowCardinalityColumnReader.class) { - ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = LowCardinalityColumnReader.SUPPORTED_SERIALIZATION_VERSION; + ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = (Long) statePrefix; } if (nestedColumnReader.isPartial()) { nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); @@ -77,22 +94,19 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } } - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || nestedColumnReader.getClass() == Enum8ColumnReader.class - || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + if (maybeRequiresExtraEncoding) { return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, elementClass); + return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, masterSlice, elementClass); } + Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || nestedColumnReader.getClass() == Enum8ColumnReader.class - || nestedColumnReader.getClass() == Enum16ColumnReader.class) { + if (maybeRequiresExtraEncoding) { return emptyData; } resliced = true; - return resliceIntoArray(emptyData, elementClass); + return resliceIntoArray(emptyData, masterSlice, elementClass); } @Override @@ -101,6 +115,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { Object[] reslicedRet; if (resliced) { reslicedRet = objectsArray; + return reslicedRet[rowIdx]; } else { desired = maybeUnwrapArrayElementType(desired); Triplet> maybeRecoded = asDesiredType(objectsArray, desired); @@ -109,12 +124,9 @@ protected Object getElementInternal(int rowIdx, Class desired) { } else { desired = elementClass; } - //TODO smagellan: reslicing for every row with master-slice can be slow (for BLOBS and Enums if recoding requested), maybe - // 1) store resliced master-array into Phantom/Weak reference or - // 2) split master-splice into nRows splices (1 per row) - reslicedRet = resliceIntoArray(maybeRecoded.middle(), desired); + reslicedRet = resliceIntoArray(maybeRecoded.middle(), perRowsSlice.get(rowIdx), desired); + return reslicedRet; } - return reslicedRet[rowIdx]; } private Class maybeUnwrapArrayElementType(Class desired) { @@ -157,10 +169,10 @@ private Object[] stringifyByteArrays(Object[] src, Charset charset) { return ret; } - private Object[] resliceIntoArray(Object[] data, Class elementClass) { + private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { Object[] intermData = data; - for (int i = slicesSeries.size() - 1; i >= 0; --i) { - List slices = slicesSeries.get(i); + for (int i = sliceToUse.size() - 1; i >= 0; --i) { + List slices = sliceToUse.get(i); Iterator> paired = PairedIterator.of(slices); Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); int tmpSliceIdx = 0; @@ -177,12 +189,59 @@ private Object[] resliceIntoArray(Object[] data, Class elementClass) { return (Object[]) intermData[0]; } - private void readSlices(ClickhouseStreamDataSource in) { - if (slicesSeries.isEmpty()) { - slicesSeries.add(Arrays.asList(0, nRows)); + private void readAsPerRowSlices(ClickhouseStreamDataSource in) { + if (nRows == 0) { + masterSlice = Collections.emptyList(); + perRowsSlice = Collections.emptyList(); + curDimension = columnDescriptor.arrayDimensionsCount(); + return; + } + + perRowsSlice = new ArrayList<>(nRows); + for (int i = 0; i < nRows; ++i) { + perRowsSlice.add(new ArrayList<>()); + } + curLevelSliceSize = nRows; + while (curDimension < columnDescriptor.arrayDimensionsCount()) { + if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { + return; + } + long prevSliceElement = 0; + for (int rowIdx = 0; rowIdx < nRows; ++rowIdx) { + int rowSliceElementsToReadAtDimension; + if (curDimension == 0) { + rowSliceElementsToReadAtDimension = 1; + } else { + List rowSliceAtPrevDimension = perRowsSlice.get(rowIdx).get(curDimension - 1); + rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension.get(rowSliceAtPrevDimension.size() - 1) - rowSliceAtPrevDimension.get(0); + } + List rowSliceAtDimension = new ArrayList<>(rowSliceElementsToReadAtDimension + 1); + //offsets at last dimension are absolute + boolean lastDimension = curDimension == columnDescriptor.arrayDimensionsCount() - 1; + int firstElementInSlice = (int) prevSliceElement; + rowSliceAtDimension.add(firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); + for (int i = 0; i < rowSliceElementsToReadAtDimension; ++i) { + prevSliceElement = in.readLongLE(); + if (prevSliceElement > Integer.MAX_VALUE) { + throw new IllegalStateException("nested size is too big (" + prevSliceElement + "), max " + Integer.MAX_VALUE); + } + rowSliceAtDimension.add((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); + } + perRowsSlice.get(rowIdx).add(rowSliceAtDimension); + } + ++curDimension; + curLevelSliceSize = (int)prevSliceElement; + } + nItems = curLevelSliceSize; + } + + private void readAsMasterSlice(ClickhouseStreamDataSource in) { + if (masterSlice.isEmpty()) { + masterSlice.add(Arrays.asList(0, nRows)); curLevelSliceSize = nRows; } if (nRows == 0) { + perRowsSlice = Collections.emptyList(); curDimension = columnDescriptor.arrayDimensionsCount(); return; } @@ -203,7 +262,7 @@ private void readSlices(ClickhouseStreamDataSource in) { } curLevelSlice.add((int) lastSliceSize); } - slicesSeries.add(curLevelSlice); + masterSlice.add(curLevelSlice); curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; curDimension += 1; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index b6306e1ab0..aafcf93df2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -8,10 +8,13 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { public static final long SUPPORTED_SERIALIZATION_VERSION = 1; - public static final ClickhouseColumn UINT8_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null); - public static final ClickhouseColumn UINT16_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null); - public static final ClickhouseColumn UINT32_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null); - public static final ClickhouseColumn UINT64_KEY_COLUMN = ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null); + + private static final ClickhouseColumn[] KEY_COLUMNS = new ClickhouseColumn[] { + ClickhouseColumns.columnForSpec("UInt8", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt16", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null), + ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null) + }; private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; @@ -105,26 +108,18 @@ public boolean isPartial() { @Override public Object getElement(int rowIdx, Class desired) { - int key = ((Number)keysColumn.getElement(rowIdx, desired)).intValue(); + int key = ((Number)keysColumn.getElement(rowIdx, Number.class)).intValue(); if (columnDescriptor.isNullable() && key == 0) { return null; } + //TODO: maybe introduce cache here if String encoding was requested (for VARCHAR where desired == String.class || desired == Object.class) return indexColumn.getElementInternal(key, desired); } static ClickhouseColumn uintColumn(int code) { - ClickhouseColumn tmp; - if (code == 0) { - tmp = UINT8_KEY_COLUMN; - } else if (code == 1) { - tmp = UINT16_KEY_COLUMN; - } else if (code == 2) { - tmp = UINT32_KEY_COLUMN; - } else if (code == 3) { - tmp = UINT64_KEY_COLUMN; - } else { + if (code < 0 || code >= KEY_COLUMNS.length) { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); } - return tmp; + return KEY_COLUMNS[code]; } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index f3d9a220ae..19b61560d6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -9,6 +9,8 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; import org.junit.Assert; import org.junit.Test; @@ -23,6 +25,8 @@ @RunWith(Parameterized.class) public class ArraySerDesTest { + private static final Logger LOG = LoggerFactory.getLogger(ArraySerDesTest.class); + private final ClickhouseColumn col; private final List data; @@ -38,12 +42,22 @@ public static Iterable dataForTest() { 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); - List data = Arrays.asList(Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + List data = Arrays.asList( + //row slice: [[0, 2], [0, 1, 2], [0, 0, 0]] (master slice for 2 similar rows: [0,2],[0,2,4],[0,1,2,3,4],[0,0,0,0,0]) + Tuple.of(new String[][][]{ {{}}, {{}} } ), + //row slice: [[0, 1], [0, 3], [0, 0, 1, 3]] + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), Tuple.of(new String[][][]{ {{}}, {{}} } ), Tuple.of(new String[][][]{ {{}}, {{}} } ), Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ), - Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ) + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}}} ), + //master slice for 2 rows: [[0, 2], [0, 1, 3], [0, 3, 5, 6], [0, 0, 1, 3, 6, 7, 7]] + //per row slices: [[[0, 1], [0, 3], [0, 0, 1, 3]], [[0, 2], [0, 2, 3], [0, 3, 4, 4]]] + //[0, 1], [0, 3], [0, 0, 1, 3] + Tuple.of(new String[][][]{ {{}, {"1"}, {"2", "3"}} }), + //[0, 2], [0, 2, 3], [0, 3, 4, 4] + Tuple.of( new String[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{}} } ) ); return Arrays.asList(new Object[][]{ @@ -65,6 +79,7 @@ public void doSerDes() { ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); reader.readColumn(ds); for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { + LOG.info("rowIdx: " + rowIdx); Object actual = reader.getElement(rowIdx, String.class); Object expected = data.get(rowIdx).getValue(0); Assert.assertArrayEquals((Object[])expected, (Object[])actual); From 32ddad9238e4f2770d97ed9e0c341607e9458d62 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 20:16:09 +0300 Subject: [PATCH 138/176] added StringCache for LowCardinality columns Signed-off-by: vladimir --- .../impl/codec/columns/ClickhouseColumns.java | 14 ++++++-- .../impl/codec/columns/FixedStringColumn.java | 6 ++-- .../columns/FixedStringColumnReader.java | 15 ++++++--- .../impl/codec/columns/IPv6Column.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../columns/LowCardinalityColumnReader.java | 5 +-- .../columns/LowCardinalityColumnWriter.java | 1 + .../impl/codec/columns/StringCache.java | 32 +++++++++++++++++++ .../impl/codec/columns/StringColumn.java | 6 ++-- .../codec/columns/StringColumnReader.java | 8 +++-- 10 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 5d2caea968..a4ec839424 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -165,11 +165,19 @@ private static int decimalSize(int precision) { } public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + return columnForSpec(spec, name, md, false); + } + + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); - return columnForSpec(descr, md); + return columnForSpec(descr, md, enableStringCache); } public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + return columnForSpec(descr, md, false); + } + + public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { if (descr.isArray()) { return new ArrayColumn(descr, md); } @@ -191,9 +199,9 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de } } else if (jdbcType == JDBCType.VARCHAR) { if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { - return new StringColumn(descr, md); + return new StringColumn(descr, md, enableStringCache); } else { - return new FixedStringColumn(descr, md); + return new FixedStringColumn(descr, md, enableStringCache); } } else if (jdbcType == JDBCType.TIMESTAMP || jdbcType == JDBCType.TIMESTAMP_WITH_TIMEZONE) { ZoneId zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index c16f947f12..7f692bb474 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -8,15 +8,17 @@ public class FixedStringColumn extends ClickhouseColumn { protected final ClickhouseNativeDatabaseMetadata md; + private final boolean enableStringCache; - public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; + this.enableStringCache = enableStringCache; } @Override public ClickhouseColumnReader reader(int nRows) { - return new FixedStringColumnReader(nRows, descriptor, md); + return new FixedStringColumnReader(nRows, descriptor, enableStringCache, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 3028bd79d4..4bdb6014d5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -11,14 +11,18 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private final Charset charset; private final boolean removeTrailingZerosInStrings; + private final boolean enableStringCache; + private final StringCache cache; private List elements; - protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); this.removeTrailingZerosInStrings = md.isRemoveTrailingZerosInFixedStrings(); + this.enableStringCache = enableStringCache; + this.cache = enableStringCache ? new StringCache(nRows) : null; } @Override @@ -47,10 +51,13 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - byte[] bytes = (byte[]) tmp; - int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(bytes) : bytes.length - 1; - return new String(bytes, 0, lastNonZeroIdx + 1, charset); + return enableStringCache ? cache.get(rowIdx, () -> buildStringFromElement((byte[]) tmp)) : buildStringFromElement((byte[]) tmp); } return tmp; } + + private String buildStringFromElement(byte[] tmp) { + int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(tmp) : tmp.length - 1; + return new String(tmp, 0, lastNonZeroIdx + 1, charset); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 6beeba5fe0..8238e472cc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -33,7 +33,7 @@ private static Inet6Address ipv6(byte[] src) { } public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { - super(descr, md); + super(descr, md, false); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 4afefc7d27..294158f43a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -10,7 +10,7 @@ public class IPv6ColumnReader extends FixedStringColumnReader { protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { - super(nRows, columnDescriptor, md); + super(nRows, columnDescriptor, false, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index aafcf93df2..60e68491c1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -66,7 +66,8 @@ protected void readData(ClickhouseStreamDataSource in) { throw new IllegalArgumentException("low cardinality index is too big (" + indexSize + "), max " + Integer.MAX_VALUE); } if (indexColumn == null) { - indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md).reader(indexSize.intValue()); + int sz = indexSize.intValue(); + indexColumn = ClickhouseColumns.columnForSpec(indexDescr, md, true).reader(sz); } if (indexColumn.isPartial()) { indexColumn.readColumn(in); @@ -112,7 +113,7 @@ public Object getElement(int rowIdx, Class desired) { if (columnDescriptor.isNullable() && key == 0) { return null; } - //TODO: maybe introduce cache here if String encoding was requested (for VARCHAR where desired == String.class || desired == Object.class) + //caveat: caller may change index contents for byte[] elements return indexColumn.getElementInternal(key, desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 78f7ae9e24..7ffafb87dc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -78,6 +78,7 @@ private Object maybeWrapArray(Object val) { if (val.getClass() == byte[].class) { val = new ArrayWrapper((byte[]) val); } else if (val.getClass() == String.class) { + //TODO: maybe introduce cache with already observed Strings to skip getBytes() or mimic String.hashCode for byte[] val = new ArrayWrapper(((String) val).getBytes(md.getStringCharset())); } return val; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java new file mode 100644 index 0000000000..d9fc77c7f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -0,0 +1,32 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.lang.ref.SoftReference; +import java.util.function.Supplier; + +public class StringCache { + private final int nElements; + private SoftReference stringCache; + + public StringCache(int nElements) { + this.nElements = nElements; + this.stringCache = new SoftReference<>(new String[nElements]); + } + + public String get(int rowIdx, Supplier supplier) { + String[] cache = stringCache.get(); + String ret; + if (cache == null) { + cache = new String[nElements]; + stringCache = new SoftReference<>(cache); + ret = supplier.get(); + cache[rowIdx] = ret; + } else { + ret = cache[rowIdx]; + if (ret == null) { + ret = supplier.get(); + cache[rowIdx] = ret; + } + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index ccf1045879..a189e13bcc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -8,16 +8,18 @@ public class StringColumn extends ClickhouseColumn { public static final byte[] EMPTY = new byte[0]; + private final boolean enableStringCache; private final ClickhouseNativeDatabaseMetadata md; - public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; + this.enableStringCache = enableStringCache; } @Override public ClickhouseColumnReader reader(int nRows) { - return new StringColumnReader(nRows, descriptor, md); + return new StringColumnReader(nRows, descriptor, enableStringCache, md); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index cd87d42375..a118062139 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -12,11 +12,15 @@ public class StringColumnReader extends ClickhouseColumnReader { private Integer curStrLength; private List elements; private final Charset charset; + private final boolean enableStringCache; + private final StringCache cache; - protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); + this.enableStringCache = enableStringCache; + this.cache = enableStringCache ? new StringCache(nRows) : null; } @Override @@ -52,7 +56,7 @@ protected Object[] readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { Object tmp = getObjectsArrayElement(rowIdx); if ((desired == String.class || desired == Object.class) && tmp != null) { - return new String((byte[])tmp, charset); + return enableStringCache ? cache.get(rowIdx, () -> new String((byte[])tmp, charset)) : new String((byte[])tmp, charset); } return tmp; } From a2f099e41c0c916c92ed4e892dab48030919abea Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 21:34:10 +0300 Subject: [PATCH 139/176] added IntervalArray tests Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 1 - .../SpecialTypesTest.java | 20 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 9994619827..65c1354811 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -73,7 +73,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } - //TODO smagellan: handle parse Exceptions, if any Object packet = packetReader.receivePacket(ctx.alloc(), in); if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index c7b72070dd..6ddc86d390 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -45,16 +45,34 @@ public void testIntervalYear(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 YEAR", Duration.class, Optional.of(Duration.ofDays(365 * 4))); } + @Test + public void testIntervalYearArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalYear(4), toIntervalYear(1), toIntervalYear(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 365), Duration.ofDays(365), Duration.ofDays(0)})); + } + @Test public void testIntervalQuarter(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 QUARTER", Duration.class, Optional.of(Duration.ofDays(120 * 4))); } + @Test + public void testIntervalQuarterArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalQuarter(4), toIntervalQuarter(1), toIntervalQuarter(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 120), Duration.ofDays(120), Duration.ofDays(0)})); + } + @Test public void testIntervalMonth(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 MONTH", Duration.class, Optional.of(Duration.ofDays(30 * 4))); } + @Test + public void testIntervalMonthArray(TestContext ctx) { + runQuery(ctx, "SELECT array(toIntervalMonth(4), toIntervalMonth(1), toIntervalMonth(0))", Duration[].class, + Optional.of(new Duration[]{Duration.ofDays(4 * 30), Duration.ofDays(30), Duration.ofDays(0)})); + } + @Test public void testIntervalWeek(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 WEEK", Duration.class, Optional.of(Duration.ofDays(7 * 4))); @@ -66,8 +84,6 @@ public void testIntervalWeekArray(TestContext ctx) { Optional.of(new Duration[]{Duration.ofDays(4 * 7), Duration.ofDays(7), Duration.ofDays(0)})); } - @Test - //TODO smagellan: all other types from query "select * from system.data_type_families where name like 'Interval%';" public void testIntervalDay(TestContext ctx) { runQuery(ctx, "SELECT INTERVAL 4 DAY", Duration.class, Optional.of(Duration.ofDays(4))); } From 85699660418bf73f86d72144044f8e404dca36aa Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 22:47:11 +0300 Subject: [PATCH 140/176] added array deduplication test Signed-off-by: vladimir --- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/PacketReader.java | 4 +++- .../impl/codec/columns/ArrayColumnReader.java | 6 ++++- .../impl/codec/columns/StringCache.java | 9 ++++++++ .../alltypes/AllTypesBase.java | 10 +++++--- .../alltypes/StringTest.java | 23 +++++++++++++++++++ 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 1c7178089e..de4c92d39c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -91,7 +91,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { - LOG.info("reading column " + colName + " of type " + colType); + LOG.info("reading column " + colName + "[" + nRows + "] of type " + colType); columnData.readColumn(in); if (columnData.isPartial()) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 5f211ff479..5d489e331f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -12,6 +12,7 @@ import net.jpountz.lz4.LZ4Factory; import java.sql.JDBCType; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -214,7 +215,8 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo ds.moreData(in, alloc); ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "]"); + List colNames = new ArrayList<>(block.getColumnsWithTypes().keySet()); + LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); columnBlockReader = null; packetType = null; ds.finish(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index e47d6590e7..12bec830dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -141,7 +141,11 @@ private Class maybeUnwrapArrayElementType(Class desired) { private Triplet> asDesiredType(Object[] src, Class desired) { if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { if (desired == String.class || desired == Object.class) { - return new Triplet<>(true, stringifyByteArrays(src, md.getStringCharset()), desired); + //TODO smagellan: rewrite asObjectsArray in String, FixedString and EnumX columns + Object[] dt = nestedColumnReader.getClass() == LowCardinalityColumnReader.class + ? nestedColumnReader.asObjectsArray(desired) + : stringifyByteArrays(src, md.getStringCharset()); + return new Triplet<>(true, dt, desired); } return new Triplet<>(false, src, desired); } else if (nestedColumnReader instanceof EnumColumnReader) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index d9fc77c7f1..33a77c9c87 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,9 +1,14 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + import java.lang.ref.SoftReference; import java.util.function.Supplier; public class StringCache { + private static final Logger LOG = LoggerFactory.getLogger(StringCache.class); + private final int nElements; private SoftReference stringCache; @@ -20,11 +25,15 @@ public String get(int rowIdx, Supplier supplier) { stringCache = new SoftReference<>(cache); ret = supplier.get(); cache[rowIdx] = ret; + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } else { ret = cache[rowIdx]; if (ret == null) { ret = supplier.get(); cache[rowIdx] = ret; + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); + } else { + LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } } return ret; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index a040cbf6aa..8b3ade8541 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -33,8 +33,8 @@ public abstract class AllTypesBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; - private Vertx vertx; + protected ClickhouseNativeConnectOptions options; + protected Vertx vertx; public AllTypesBase(String tableSuffix, MyColumnChecker checker) { this(tableSuffix, checker, true); @@ -78,7 +78,7 @@ private List columnsList(boolean hasLowCardinality) { } protected void doTest(TestContext ctx, List batch) { - String tableName = TABLE_PREFIX + tableSuffix; + String tableName = tableName(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName).execute( ctx.asyncAssertSuccess(res1 -> { @@ -109,6 +109,10 @@ protected void doTest(TestContext ctx, List batch) { })); })); } + + protected String tableName() { + return TABLE_PREFIX + tableSuffix; + } } class MyColumnChecker { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 9ff654d963..cbaa727abd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,8 +1,13 @@ package io.vertx.clickhousenativeclient.alltypes; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; +import org.junit.Ignore; +import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; @@ -14,6 +19,24 @@ public StringTest() { super("string", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } + @Test + public void testArrayDeduplication(TestContext ctx) { + String tp = "Array(Array(LowCardinality(Nullable(String))))"; + //String query = String.format("select CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr", tp); + String query = String.format("select arr1 from ( " + + "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr1 UNION ALL " + + "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3', 'arrqq')), '%s') as arr1" + + ") t1 order by id", tp, tp); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query(query).execute( + ctx.asyncAssertSuccess(res1 -> { + RowIterator rows = res1.iterator(); + String[][] a1 = rows.next().get(String[][].class, 0); + ctx.assertTrue(a1[0][0] == a1[3][0]); + })); + })); + } + @Override public List createBatch() { String v1 = "val1"; From 7e206ff86c0b883326b2db633088b9acd0cbc849 Mon Sep 17 00:00:00 2001 From: vladimir Date: Thu, 8 Apr 2021 23:47:22 +0300 Subject: [PATCH 141/176] reworked array deduplication test Signed-off-by: vladimir --- .../alltypes/AllTypesBase.java | 51 +++++++++---------- .../alltypes/FixedStringTest.java | 7 +++ .../StringArrayDeduplicationTester.java | 47 +++++++++++++++++ .../alltypes/StringTest.java | 18 +------ 4 files changed, 80 insertions(+), 43 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 8b3ade8541..775d483d28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -50,6 +50,9 @@ public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasL public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.query("TRUNCATE TABLE " + tableName()).execute(ctx.asyncAssertSuccess()); + })); } @After @@ -80,32 +83,28 @@ private List columnsList(boolean hasLowCardinality) { protected void doTest(TestContext ctx, List batch) { String tableName = tableName(); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query("TRUNCATE TABLE " + tableName).execute( - ctx.asyncAssertSuccess(res1 -> { - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) - .executeBatch(batch, ctx.asyncAssertSuccess( - res2 -> { - Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( - res3 -> { - ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); - int batchIdx = 0; - for (Row row : res3) { - Number id = row.get(Number.class, "id"); - Tuple expectedRow = batch.get(batchIdx); - LOG.info("checking row " + tableSuffix + ":" + id); - for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); - } - ++batchIdx; - } - })); - })); + List columnsList = columnsList(hasLowCardinality); + String columnsStr = String.join(", ", columnsList); + String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; + conn.preparedQuery(query) + .executeBatch(batch, ctx.asyncAssertSuccess(res2 -> { + Sleep.sleepOrThrow(); + conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + int batchIdx = 0; + for (Row row : res3) { + Number id = row.get(Number.class, "id"); + Tuple expectedRow = batch.get(batchIdx); + LOG.info("checking row " + tableSuffix + ":" + id); + for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { + String colName = columnsList.get(colIdx); + Object expectedColumnValue = expectedRow.getValue(colIdx); + checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); + } + ++batchIdx; + } + })); })); })); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 685d2bb744..b7b64127aa 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,8 +1,10 @@ package io.vertx.clickhousenativeclient.alltypes; +import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; +import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; @@ -14,6 +16,11 @@ public FixedStringTest() { super("fixedstring", new MyColumnChecker<>(String.class, Tuple::getString, Row::getString, Tuple::getArrayOfStrings, Row::getArrayOfStrings)); } + @Test + public void testArrayDeduplication(TestContext ctx) { + new StringArrayDeduplicationTester(tableName(), vertx, options).test(ctx); + } + @Override public List createBatch() { String v1 = "val1"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java new file mode 100644 index 0000000000..dcbb7c5104 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -0,0 +1,47 @@ +package io.vertx.clickhousenativeclient.alltypes; + +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.core.Vertx; +import io.vertx.ext.unit.TestContext; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowIterator; +import io.vertx.sqlclient.Tuple; + +import java.util.Arrays; +import java.util.List; + +public class StringArrayDeduplicationTester { + private final String tableName; + private final ClickhouseNativeConnectOptions options; + private final Vertx vertx; + + public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseNativeConnectOptions options) { + this.tableName = tableName; + this.options = options; + this.vertx = vertx; + } + + public void test(TestContext ctx) { + List batch = Arrays.asList( + Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), + Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), + Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) + ); + ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { + conn.query("SELECT nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + res3 -> { + ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); + RowIterator rows = res3.iterator(); + String[][][] r1 = rows.next().get(String[][][].class, 0); + String[][][] r2 = rows.next().get(String[][][].class, 0); + String[][][] r3 = rows.next().get(String[][][].class, 0); + ctx.assertTrue(r1[0][0][3] == r3[0][2][0]);//dedup3 + ctx.assertTrue(r1[0][0][4] == r2[0][1][1]);//dedup1 + ctx.assertTrue(r1[1][1][1] == r2[0][0][3]);//dedup2 + })); + })); + })); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index cbaa727abd..9fe684a4c4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,12 +1,9 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; -import io.vertx.sqlclient.RowIterator; import io.vertx.sqlclient.Tuple; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,20 +18,7 @@ public StringTest() { @Test public void testArrayDeduplication(TestContext ctx) { - String tp = "Array(Array(LowCardinality(Nullable(String))))"; - //String query = String.format("select CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr", tp); - String query = String.format("select arr1 from ( " + - "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3')), '%s') as arr1 UNION ALL " + - "select 1 as id, CAST(array(array('str3'), array(NULL), array('str1', NULL, 'str2'), array('str3', 'arrqq')), '%s') as arr1" + - ") t1 order by id", tp, tp); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.query(query).execute( - ctx.asyncAssertSuccess(res1 -> { - RowIterator rows = res1.iterator(); - String[][] a1 = rows.next().get(String[][].class, 0); - ctx.assertTrue(a1[0][0] == a1[3][0]); - })); - })); + new StringArrayDeduplicationTester(tableName(), vertx, options).test(ctx); } @Override From 225271749252e25577cfb4761ae668ca24ec22e4 Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 9 Apr 2021 21:25:49 +0300 Subject: [PATCH 142/176] use columnreader as accessor if array recoding is reqired Signed-off-by: vladimir --- .../impl/codec/SimpleQueryCommandCodec.java | 2 - .../impl/codec/columns/ArrayColumnReader.java | 124 +++++++++--------- .../codec/columns/ClickhouseColumnReader.java | 3 + .../columns/LowCardinalityColumnReader.java | 7 +- .../impl/codec/columns/StringCache.java | 9 -- .../codec/columns/UInt64ColumnReader.java | 1 + 6 files changed, 70 insertions(+), 76 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 65c1354811..f583e09bdf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -89,7 +89,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { - //TODO smagellan: handle connection errors (e.g. table does not exist, wrong password, no column with given name, etc) String msg = "unknown packet type: " + packet.getClass(); LOG.error(msg); if (packet instanceof Throwable) { @@ -97,7 +96,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.error("unknown packet type", t); notifyOperationUpdate(false, t); } - //completionHandler.handle(CommandResponse.failure(new RuntimeException(msg))); } } else if (packetReader.isEndOfStream()) { notifyOperationUpdate(false, null); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 12bec830dd..62fbf56d02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -3,11 +3,8 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import java.lang.reflect.Array; -import java.nio.charset.Charset; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; @@ -15,10 +12,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.function.Function; public class ArrayColumnReader extends ClickhouseColumnReader { - private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); - private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; @@ -66,10 +62,8 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (curDimension < columnDescriptor.arrayDimensionsCount()) { if (maybeRequiresExtraEncoding) { readAsPerRowSlices(in); - LOG.info("per row slices: " + perRowsSlice); } else { readAsMasterSlice(in); - LOG.info("master slice: " + masterSlice); } if (curDimension < columnDescriptor.arrayDimensionsCount()) { return null; @@ -89,7 +83,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { ((LowCardinalityColumnReader) nestedColumnReader).keysSerializationVersion = (Long) statePrefix; } if (nestedColumnReader.isPartial()) { - nestedColumnReader.itemsArray = nestedColumnReader.readItemsAsObjects(in, elementClass); + nestedColumnReader.itemsArray = nestedColumnReader.readItems(in); if (nestedColumnReader.isPartial()) { return null; } @@ -98,7 +92,8 @@ protected Object readItems(ClickhouseStreamDataSource in) { return nestedColumnReader.itemsArray; } resliced = true; - return resliceIntoArray((Object[]) nestedColumnReader.itemsArray, masterSlice, elementClass); + Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); + return resliceIntoArray(tmp, masterSlice, elementClass); } Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); @@ -111,20 +106,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - Object[] objectsArray = (Object[]) this.itemsArray; Object[] reslicedRet; if (resliced) { - reslicedRet = objectsArray; + reslicedRet = (Object[]) this.itemsArray; return reslicedRet[rowIdx]; } else { desired = maybeUnwrapArrayElementType(desired); - Triplet> maybeRecoded = asDesiredType(objectsArray, desired); - if (maybeRecoded.left()) { - desired = maybeRecoded.right(); - } else { - desired = elementClass; - } - reslicedRet = resliceIntoArray(maybeRecoded.middle(), perRowsSlice.get(rowIdx), desired); + Class forRecode = desired; + Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); + reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice.get(rowIdx), desired); return reslicedRet; } } @@ -138,59 +128,65 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Triplet> asDesiredType(Object[] src, Class desired) { - if (elementTypeDescr.jdbcType() == JDBCType.VARCHAR) { - if (desired == String.class || desired == Object.class) { - //TODO smagellan: rewrite asObjectsArray in String, FixedString and EnumX columns - Object[] dt = nestedColumnReader.getClass() == LowCardinalityColumnReader.class - ? nestedColumnReader.asObjectsArray(desired) - : stringifyByteArrays(src, md.getStringCharset()); - return new Triplet<>(true, dt, desired); - } - return new Triplet<>(false, src, desired); - } else if (nestedColumnReader instanceof EnumColumnReader) { - Object[] recoded = ((EnumColumnReader)nestedColumnReader).recodeValues(src, desired); - return new Triplet<>(true, recoded, desired); + private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { + Object[] intermData = data; + for (int i = sliceToUse.size() - 1; i >= 0; --i) { + List slices = sliceToUse.get(i); + intermData = resliceArray(intermData, slices, intermData.getClass()); } - return new Triplet<>(false, src, desired); + return (Object[]) intermData[0]; } - private Object[] stringifyByteArrays(Object[] src, Charset charset) { - String[] ret = new String[src.length]; - for (int i = 0; i < src.length; ++i) { - Object element = src[i]; - if (element != null) { - int lastNonZeroIdx; - byte[] bytes = (byte[]) element; - if (md.isRemoveTrailingZerosInFixedStrings() && elementTypeDescr.getNestedType().startsWith("FixedString")) { - lastNonZeroIdx = ColumnUtils.getLastNonZeroPos(bytes); - } else { - lastNonZeroIdx = bytes.length - 1; - } - ret[i] = new String(bytes, 0, lastNonZeroIdx + 1, charset); - } + + private Object[] resliceIntoArray(Function dataAccessor, List> sliceToUse, Class elementClass) { + int i = sliceToUse.size() - 1; + List slices = sliceToUse.get(i); + Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); + + for (i = sliceToUse.size() - 2; i >= 0; --i) { + slices = sliceToUse.get(i); + intermData = resliceArray(intermData, slices, intermData.getClass()); } - return ret; + return (Object[]) intermData[0]; } - private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { - Object[] intermData = data; - for (int i = sliceToUse.size() - 1; i >= 0; --i) { - List slices = sliceToUse.get(i); - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass(), slices.size() - 1); - int tmpSliceIdx = 0; - while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(intermData.getClass().getComponentType(), newSliceSz); - System.arraycopy(intermData, slice.getKey(), reslicedArray, 0, newSliceSz); - newDataList[tmpSliceIdx] = reslicedArray; - ++tmpSliceIdx; - } - intermData = newDataList; + private Object[] resliceArray(Function dataAccessor, List slices, Class upperClass) { + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); + copyWithAccessor(dataAccessor, slice.getKey(), reslicedArray, 0, newSliceSz); + + newDataList[tmpSliceIdx] = reslicedArray; + ++tmpSliceIdx; } - return (Object[]) intermData[0]; + return newDataList; + } + + private void copyWithAccessor(Function srcAccessor, int srcPos, Object[] dest, int destPos, int length) { + for (int remaining = length; remaining > 0; --remaining) { + dest[destPos] = srcAccessor.apply(srcPos); + ++destPos; + ++srcPos; + } + } + + private Object[] resliceArray(Object[] dataElements, List slices, Class upperClass) { + Iterator> paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + int tmpSliceIdx = 0; + while (paired.hasNext()) { + Map.Entry slice = paired.next(); + int newSliceSz = slice.getValue() - slice.getKey(); + Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); + System.arraycopy(dataElements, slice.getKey(), reslicedArray, 0, newSliceSz); + newDataList[tmpSliceIdx] = reslicedArray; + ++tmpSliceIdx; + } + return newDataList; } private void readAsPerRowSlices(ClickhouseStreamDataSource in) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index f15a3a3203..b686647713 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -57,6 +57,9 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { itemsArray = readItems(in); + if (itemsArray == null) { + return null; + } return asObjectsArray(desired); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 60e68491c1..be3e617712 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -15,6 +15,7 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { ClickhouseColumns.columnForSpec("UInt32", "lcKeyColumn", null), ClickhouseColumns.columnForSpec("UInt64", "lcKeyColumn", null) }; + public static final Object[] EMPTY_ARRAY = new Object[0]; private final ClickhouseNativeColumnDescriptor indexDescr; private final ClickhouseNativeDatabaseMetadata md; @@ -86,6 +87,7 @@ protected void readData(ClickhouseStreamDataSource in) { keysColumn = uintColumn(keyType).reader(nRows); } keysColumn.readColumn(in); + itemsArray = EMPTY_ARRAY; } //called by Array column @@ -93,8 +95,11 @@ protected void readData(ClickhouseStreamDataSource in) { protected Object readItems(ClickhouseStreamDataSource in) { if (isPartial()) { readData(in); + if (isPartial()) { + return null; + } } - return null; + return itemsArray; } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 33a77c9c87..d9fc77c7f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,14 +1,9 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; - import java.lang.ref.SoftReference; import java.util.function.Supplier; public class StringCache { - private static final Logger LOG = LoggerFactory.getLogger(StringCache.class); - private final int nElements; private SoftReference stringCache; @@ -25,15 +20,11 @@ public String get(int rowIdx, Supplier supplier) { stringCache = new SoftReference<>(cache); ret = supplier.get(); cache[rowIdx] = ret; - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } else { ret = cache[rowIdx]; if (ret == null) { ret = supplier.get(); cache[rowIdx] = ret; - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); - } else { - LOG.info(this.hashCode() + ": MISS: " + ret + "/" + rowIdx); } } return ret; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index caf229cf07..13f7b113b3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,6 +15,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { + //TODO: maybe read elements if we have enough data (> ELEMENT_SIZE) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { From 33b839c4f47db6010a926a43f94ef67484cfc14a Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 9 Apr 2021 22:23:07 +0300 Subject: [PATCH 143/176] use less reflection for empty arrays Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumn.java | 15 ++++++--------- .../impl/codec/columns/ArrayColumnReader.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 1 + .../impl/codec/columns/DateColumn.java | 5 +++++ .../impl/codec/columns/DateColumnReader.java | 2 ++ .../impl/codec/columns/DateTime64Column.java | 9 ++++++++- .../impl/codec/columns/DateTimeColumn.java | 9 ++++++++- .../impl/codec/columns/Decimal128Column.java | 7 +++++++ .../impl/codec/columns/Decimal256Column.java | 5 +++++ .../impl/codec/columns/Decimal32Column.java | 5 +++++ .../impl/codec/columns/Decimal64Column.java | 5 +++++ .../impl/codec/columns/FixedStringColumn.java | 7 ++++++- .../impl/codec/columns/Float32Column.java | 10 +++++++++- .../impl/codec/columns/Float64Column.java | 10 +++++++++- .../impl/codec/columns/IPv4Column.java | 7 +++++++ .../impl/codec/columns/IPv6Column.java | 8 ++++++++ .../impl/codec/columns/Int128Column.java | 8 ++++++++ .../impl/codec/columns/IntervalColumn.java | 10 +++++++++- .../impl/codec/columns/LowCardinalityColumn.java | 15 +++++++++------ .../impl/codec/columns/StringColumn.java | 10 ++++++++-- .../impl/codec/columns/UInt16Column.java | 12 ++++++++++++ .../impl/codec/columns/UInt32Column.java | 10 ++++++++++ .../impl/codec/columns/UInt64Column.java | 10 ++++++++++ .../impl/codec/columns/UInt8Column.java | 11 +++++++++++ .../impl/codec/columns/UUIDColumn.java | 8 ++++++++ 25 files changed, 177 insertions(+), 24 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index b7b98f033b..9719769cfa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -14,15 +14,7 @@ public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNative this.md = md; } - private static ClickhouseNativeColumnDescriptor elementaryDescr(ClickhouseNativeColumnDescriptor descr) { - ClickhouseNativeColumnDescriptor tmp = descr; - while (tmp.isArray()) { - tmp = tmp.getNestedDescr(); - } - return tmp; - } - - @Override + @Override public ClickhouseColumnReader reader(int nRows) { return new ArrayColumnReader(nRows, descriptor, md); } @@ -36,4 +28,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { throw new IllegalArgumentException("arrays are not nullable"); } + + @Override + public Object[] emptyArray() { + throw new IllegalArgumentException("not implemented"); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 62fbf56d02..fb2297c4f4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -96,7 +96,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { return resliceIntoArray(tmp, masterSlice, elementClass); } - Object[] emptyData = (Object[]) Array.newInstance(elementClass, 0); + Object[] emptyData = nestedColumn.emptyArray(); if (maybeRequiresExtraEncoding) { return emptyData; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 55089b7591..51300e05e0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -17,4 +17,5 @@ public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { public abstract ClickhouseColumnWriter writer(List data, int columnIndex); public abstract Object nullValue(); + public abstract Object[] emptyArray(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 77161c5996..f3da896429 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -24,4 +24,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return DateColumnReader.MIN_VALUE; } + + @Override + public Object[] emptyArray() { + return DateColumnReader.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index cd26e98987..51286a312a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -5,6 +5,8 @@ import java.time.LocalDate; public class DateColumnReader extends UInt16ColumnReader { + public static final LocalDate[] EMPTY_ARRAY = new LocalDate[0]; + public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 41e9e6aa34..36b842c7f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -9,6 +9,8 @@ public class DateTime64Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 8; + public static final Instant ZERO_INSTANT = Instant.EPOCH; + public static final Instant[] EMPTY_ARRAY = new Instant[0]; private final Integer precision; private final ZoneId zoneId; @@ -33,6 +35,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return Instant.ofEpochSecond(0, 0).atZone(zoneId).toOffsetDateTime(); + return ZERO_INSTANT.atZone(zoneId).toOffsetDateTime(); + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index e31c2f49b5..a59fa805b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -9,13 +9,15 @@ import java.util.List; public class DateTimeColumn extends ClickhouseColumn { + public static final OffsetDateTime[] EMPTY_ARRAY = new OffsetDateTime[0]; + private final ZoneId zoneId; private final OffsetDateTime nullValue; public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; - this.nullValue = Instant.ofEpochSecond(0).atZone(zoneId).toOffsetDateTime(); + this.nullValue = Instant.EPOCH.atZone(zoneId).toOffsetDateTime(); } @Override @@ -32,4 +34,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return nullValue; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 266af50f42..0df3a50072 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -11,6 +11,8 @@ import java.util.List; public class Decimal128Column extends ClickhouseColumn { + public static final Numeric[] EMPTY_ARRAY = new Numeric[0]; + public static final int ELEMENT_SIZE = 16; public static final int MAX_PRECISION = 38; public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); @@ -35,4 +37,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 9f01dac6aa..6ec5c8281a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -36,4 +36,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index bf8a91b863..86b0cf5984 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -36,4 +36,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 53f57bc9c5..2a69bbb98e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -35,4 +35,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return zeroValue; } + + @Override + public Object[] emptyArray() { + return Decimal128Column.EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 7f692bb474..e43ba3cf3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -28,6 +28,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return StringColumn.EMPTY; + return StringColumn.ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return StringColumn.EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index df9e957637..85ab677398 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -6,6 +6,9 @@ import java.util.List; public class Float32Column extends ClickhouseColumn { + public static final Float[] EMPTY_FLOAT_ARRAY = new Float[0]; + public static final Float ZERO_VALUE = 0.0f; + public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -22,6 +25,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return 0.0f; + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_FLOAT_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index db3846812a..4a01a5a650 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -6,6 +6,9 @@ import java.util.List; public class Float64Column extends ClickhouseColumn { + public static final Double[] EMPTY_FLOAT_ARRAY = new Double[0]; + public static final Double ZERO_DOUBLE = 0d; + public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -21,6 +24,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { } public Object nullValue() { - return (double)0; + return ZERO_DOUBLE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_FLOAT_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index d06ae238a1..7e2fdaa3b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -10,6 +10,8 @@ public class IPv4Column extends UInt32Column { public static final int ELEMENT_SIZE = 4; + public static final Inet4Address[] EMPTY_ARRAY = new Inet4Address[0]; + public static final Inet4Address ZERO_VALUE = ipv4(new byte[]{0, 0, 0, 0}); public static final Inet4Address MAX_VALUE = ipv4(new byte[]{Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE, Byte.MAX_VALUE}); public static final Inet4Address MIN_VALUE = ipv4(new byte[]{Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE}); @@ -40,4 +42,9 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 8238e472cc..8d0ba48b8e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -10,6 +10,8 @@ public class IPv6Column extends FixedStringColumn { public static final int ELEMENT_SIZE = 16; + public static final Inet6Address EMPTY_ARRAY[] = new Inet6Address[0]; + public static final Inet6Address ZERO_VALUE = ipv6(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); public static final Inet6Address MIN_VALUE = ipv6(new byte[]{ Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, Byte.MIN_VALUE, @@ -46,7 +48,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new IPv6ColumnWriter(data, descriptor, md.getStringCharset(), columnIndex); } + @Override public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 1e1387b73a..5b4bd47145 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -8,6 +8,8 @@ public class Int128Column extends ClickhouseColumn { public static final int ELEMENT_SIZE = 16; + public static final BigInteger[] EMPTY_ARRAY = new BigInteger[0]; + public static final BigInteger ZERO_VALUE = new BigInteger(new byte[ELEMENT_SIZE]); public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); @@ -26,7 +28,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new Int128ColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { return ZERO_VALUE; } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index e8c7c68727..84735f3e75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -7,6 +7,9 @@ import java.util.List; public class IntervalColumn extends ClickhouseColumn { + public static final Duration[] EMPTY_ARRAY = new Duration[0]; + + public static final Duration ZERO_VALUE = Duration.ZERO; private final Duration multiplier; public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { @@ -26,6 +29,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return multiplier.multipliedBy(0); + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 123572f506..4d232b29a5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -7,12 +7,14 @@ import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { + private final ClickhouseColumn nested; private final ClickhouseNativeDatabaseMetadata md; - private Object nullValue; public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; + ClickhouseNativeColumnDescriptor tmp = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); + nested = ClickhouseColumns.columnForSpec(tmp, md); } @Override @@ -27,10 +29,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - if (nullValue == null) { - ClickhouseNativeColumnDescriptor nested = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); - nullValue = ClickhouseColumns.columnForSpec(nested, md).nullValue(); - } - return nullValue; + return nested.nullValue(); + } + + @Override + public Object[] emptyArray() { + return nested.emptyArray(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a189e13bcc..84d6638225 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -7,7 +7,8 @@ import java.util.List; public class StringColumn extends ClickhouseColumn { - public static final byte[] EMPTY = new byte[0]; + public static final byte[][] EMPTY_ARRAY = new byte[0][]; + public static final byte[] ZERO_VALUE = new byte[0]; private final boolean enableStringCache; private final ClickhouseNativeDatabaseMetadata md; @@ -29,6 +30,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return EMPTY; + return ZERO_VALUE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_ARRAY; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index b294dbdc46..2d8c55fc4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -6,6 +6,9 @@ import java.util.List; public class UInt16Column extends ClickhouseColumn { + public static final Integer[] EMPTY_INT_ARRAY = new Integer[0]; + public static final Short[] EMPTY_SHORT_ARRAY = new Short[0]; + public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -28,4 +31,13 @@ public Object nullValue() { return (short) 0; } } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_INT_ARRAY; + } else { + return EMPTY_SHORT_ARRAY; + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index d99c183eb1..408ec87564 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -6,6 +6,8 @@ import java.util.List; public class UInt32Column extends ClickhouseColumn { + public static final Long[] EMPTY_LONG_ARRAY = new Long[0]; + public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -27,4 +29,12 @@ public Object nullValue() { } return 0; } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_LONG_ARRAY; + } + return UInt16Column.EMPTY_INT_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index ec2728757f..e4dce6a41d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -8,6 +8,7 @@ import java.util.List; public class UInt64Column extends ClickhouseColumn { + public static final Numeric[] EMPTY_NUMERIC_ARRAY = new Numeric[0]; public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { @@ -24,10 +25,19 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UInt64ColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { if (descriptor.isUnsigned()) { return UINT64_MIN; } return 0L; } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return EMPTY_NUMERIC_ARRAY; + } + return UInt32Column.EMPTY_LONG_ARRAY; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index aed243495e..cd4a682756 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -6,6 +6,8 @@ import java.util.List; public class UInt8Column extends ClickhouseColumn { + public static final Byte[] EMPTY_BYTE_ARRAY = new Byte[0]; + public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { super(descriptor); } @@ -28,4 +30,13 @@ public Object nullValue() { return (byte) 0; } } + + @Override + public Object[] emptyArray() { + if (descriptor.isUnsigned()) { + return UInt16Column.EMPTY_SHORT_ARRAY; + } else { + return EMPTY_BYTE_ARRAY; + } + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 8e661638b1..ccfa171dea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -7,6 +7,8 @@ import java.util.UUID; public class UUIDColumn extends ClickhouseColumn { + public static final UUID[] EMPTY_UUID_ARRAY = new UUID[0]; + public static final UUID ZERO_UUID = new UUID(0, 0); public static final int ELEMENT_SIZE = 16; @@ -24,7 +26,13 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { return new UUIDColumnWriter(data, descriptor, columnIndex); } + @Override public Object nullValue() { return ZERO_UUID; } + + @Override + public Object[] emptyArray() { + return EMPTY_UUID_ARRAY; + } } From d0185ecb380aaa92e611e25d225a4e14c62f8049 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 00:15:27 +0300 Subject: [PATCH 144/176] added more LowCardinality checks, fixed TODOs Signed-off-by: vladimir --- .../impl/RowOrientedBlock.java | 2 +- .../codec/Lz4ClickhouseStreamDataSource.java | 23 +++++++-------- .../impl/codec/PacketForge.java | 4 +-- .../impl/codec/columns/ArrayColumnReader.java | 2 +- .../impl/codec/columns/ClickhouseColumns.java | 12 ++++---- .../codec/columns/LowCardinalityColumn.java | 13 +++++---- .../columns/LowCardinalityColumnReader.java | 4 +-- .../codec/columns/UInt64ColumnReader.java | 2 +- .../StringArrayDeduplicationTester.java | 28 +++++++++++-------- 9 files changed, 50 insertions(+), 40 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 0e5d622f44..448b7f1447 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -45,7 +45,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR //n_rows int nRows = toRow - fromRow; sink.writeULeb128(nRows); - //TODO smagellan: maybe serialize into tiny sinks/blocks here, then return to caller + //TODO: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 5bf1988c4b..cba9e7b2f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -15,14 +15,16 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { private static final Logger LOG = LoggerFactory.getLogger(Lz4ClickhouseStreamDataSource.class); + //compression method byte + sizeWithHeader + decompressed size + public static final int CHECKSUMED_HEADER_LENGTH = 1 + 4 + 4; //cityhash size + compression method byte + sizeWithHeader + decompressed size - public static final int MIN_BLOCK_PREFIX = 16 + 1 + 4 + 4; + public static final int HEADER_LENGTH = 16 + CHECKSUMED_HEADER_LENGTH; + private final LZ4Factory lz4Factory; private final ByteBuf decompressedData; private long[] serverCityHash; private Long sizeWithHeader; - private Long compressedAndSizeSize; private Long uncompressedSize; private ByteBuf arrayBb; @@ -34,10 +36,10 @@ public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator all @Override public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (serverCityHash == null) { - if (buf.readableBytes() >= MIN_BLOCK_PREFIX) { + if (buf.readableBytes() >= HEADER_LENGTH) { serverCityHash = new long[2]; dumpHeader(buf); - LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), MIN_BLOCK_PREFIX) + + LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); @@ -55,7 +57,7 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (sizeWithHeader > Integer.MAX_VALUE) { throw new IllegalStateException("block is too big: " + sizeWithHeader + "; limit " + Integer.MAX_VALUE); } - compressedAndSizeSize = sizeWithHeader - 1 - 4; + long compressedAndSizeSize = sizeWithHeader - 1 - 4; uncompressedSize = buf.readUnsignedIntLE(); if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); @@ -64,14 +66,14 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); arrayBb = alloc.buffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); - buf.readBytes(arrayBb, 1 + 4 + 4); + buf.readBytes(arrayBb, CHECKSUMED_HEADER_LENGTH); } } if (uncompressedSize == null) { return; } - //TODO smagellan: eliminate this var (make compressedAndSizeSize = sizeWithHeader - 1 - 4 - 4 and rename to compressedDataSize) - int compressedDataSize = compressedAndSizeSize.intValue() - 4; + + int compressedDataSize = sizeWithHeader.intValue() - CHECKSUMED_HEADER_LENGTH; if (buf.readableBytes() < compressedDataSize) { //NB: fragmented read return; @@ -80,13 +82,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { buf.readBytes(arrayBb); long[] oursCityHash = ClickHouseCityHash.cityHash128(arrayBb.array(), arrayBb.arrayOffset(), sizeWithHeader.intValue()); //reposition at the beginning of the compressed data, need to skip compression method byte, sizeWithHeader and uncompressed size - arrayBb.readerIndex(1 + 4 + 4); + arrayBb.readerIndex(CHECKSUMED_HEADER_LENGTH); if (!Arrays.equals(serverCityHash, oursCityHash)) { LOG.error("cityhash mismatch"); LOG.error("all available data: " + ByteBufUtil.hexDump(buf, 0, buf.readerIndex() + buf.readableBytes())); LOG.error("data from reader index(" + buf.readerIndex() + "): " + ByteBufUtil.hexDump(buf)); - LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - (1 + 4 + 4), sizeWithHeader.intValue())); + LOG.error("compressed block bytes w/header: " + ByteBufUtil.hexDump(arrayBb, arrayBb.readerIndex() - CHECKSUMED_HEADER_LENGTH, sizeWithHeader.intValue())); LOG.error("readableBytes: " + arrayBb.readableBytes() + "; comprDataLen: " + compressedDataSize); throw new IllegalStateException("CityHash mismatch; server's: " + Arrays.toString(hex(serverCityHash)) + "; ours: " + @@ -102,7 +104,6 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { arrayBb.release(); serverCityHash = null; sizeWithHeader = null; - compressedAndSizeSize = null; uncompressedSize = null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 573fd0b150..bc715af22c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -54,7 +54,7 @@ public void writeSettings(Map settings, boolean settingsAsString } } } else { - //TODO smagellan + //TODO: implement (required for old clickhouse versions) throw new IllegalArgumentException("not implemented for settingsAsStrings=false"); } //end of settings @@ -64,7 +64,7 @@ public void writeSettings(Map settings, boolean settingsAsString public void sendExternalTables(ByteBuf buf, Collection blocks) { ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { - //TODO smagellan + //TODO implement external tables support sendData(buf, block, null); } sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index fb2297c4f4..24914f513e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -4,7 +4,6 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import java.lang.reflect.Array; import java.sql.JDBCType; import java.util.ArrayList; import java.util.Arrays; @@ -93,6 +92,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { } resliced = true; Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); + nestedColumnReader.itemsArray = null; return resliceIntoArray(tmp, masterSlice, elementClass); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index a4ec839424..0bac601e0c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -106,12 +106,12 @@ public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String un int bytesLength = Integer.parseInt(lengthStr); return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); - } else if (spec.equals("DateTime") || spec.startsWith("DateTime(")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, - spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); - } else if (spec.equals("DateTime64") || spec.startsWith("DateTime64(")) { + } else if (spec.startsWith("DateTime64")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); + } else if (spec.startsWith("DateTime")) { + return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, + spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); @@ -159,8 +159,10 @@ private static int decimalSize(int precision) { return Decimal64Column.ELEMENT_SIZE; } else if (precision <= Decimal128Column.MAX_PRECISION) { return Decimal128Column.ELEMENT_SIZE; - } else { + } else if (precision <= Decimal256Column.MAX_PRECISION ){ return Decimal256Column.ELEMENT_SIZE; + } else { + throw new IllegalArgumentException("precision is too large: " + precision); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 4d232b29a5..6faf441029 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -7,19 +7,20 @@ import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - private final ClickhouseColumn nested; + private final ClickhouseNativeColumnDescriptor indexDescriptor; + private final ClickhouseColumn indexColumn; private final ClickhouseNativeDatabaseMetadata md; public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { super(descriptor); this.md = md; - ClickhouseNativeColumnDescriptor tmp = ClickhouseColumns.columnDescriptorForSpec(descriptor.getNestedType(), descriptor.name()); - nested = ClickhouseColumns.columnForSpec(tmp, md); + this.indexDescriptor = descriptor.copyWithModifiers(false, false); + this.indexColumn = ClickhouseColumns.columnForSpec(indexDescriptor, md); } @Override public ClickhouseColumnReader reader(int nRows) { - return new LowCardinalityColumnReader(nRows, descriptor, md); + return new LowCardinalityColumnReader(nRows, descriptor, indexDescriptor, md); } @Override @@ -29,11 +30,11 @@ public ClickhouseColumnWriter writer(List data, int columnIndex) { @Override public Object nullValue() { - return nested.nullValue(); + return indexColumn.nullValue(); } @Override public Object[] emptyArray() { - return nested.emptyArray(); + return indexColumn.emptyArray(); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index be3e617712..87131f0efd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -27,9 +27,9 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { private ClickhouseColumnReader keysColumn; - public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexColumn, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); - this.indexDescr = descr.copyWithModifiers(false, false); + this.indexDescr = indexColumn; this.md = md; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 13f7b113b3..c0e4f879ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,7 +15,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { - //TODO: maybe read elements if we have enough data (> ELEMENT_SIZE) + //TODO: maybe read elements as soon as they arrive if we have enough data (> ELEMENT_SIZE) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index dcbb7c5104..0944ec554b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -24,22 +24,28 @@ public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseN public void test(TestContext ctx) { List batch = Arrays.asList( - Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), - Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), - Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) + Tuple.of(1, "dedup", (Object) new Object[][][]{ {{"str1_1", "str1_2", null, "dedup3", "dedup1"}, {null}}, {{"str1_3", "str1_4", null}, {null, "dedup2"}} }), + Tuple.of(2, "val", (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), + Tuple.of(3, "dedup", (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) ); ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { - conn.query("SELECT nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_lc_t, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { + conn.query("SELECT nullable_lc_t, nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); RowIterator rows = res3.iterator(); - String[][][] r1 = rows.next().get(String[][][].class, 0); - String[][][] r2 = rows.next().get(String[][][].class, 0); - String[][][] r3 = rows.next().get(String[][][].class, 0); - ctx.assertTrue(r1[0][0][3] == r3[0][2][0]);//dedup3 - ctx.assertTrue(r1[0][0][4] == r2[0][1][1]);//dedup1 - ctx.assertTrue(r1[1][1][1] == r2[0][0][3]);//dedup2 + Row row1 = rows.next(); + Row row2 = rows.next(); + Row row3 = rows.next(); + String val1 = row1.getString(0); + String val2 = row3.getString(0); + ctx.assertTrue(val1 == val2); + String[][][] arr1 = row1.get(String[][][].class, 1); + String[][][] arr2 = row2.get(String[][][].class, 1); + String[][][] arr3 = row3.get(String[][][].class, 1); + ctx.assertTrue(arr1[0][0][3] == arr3[0][2][0]);//dedup3 + ctx.assertTrue(arr1[0][0][4] == arr2[0][1][1]);//dedup1 + ctx.assertTrue(arr1[1][1][1] == arr2[0][0][3]);//dedup2 })); })); })); From af722ff3a493b7a6ad6307ffbffea30370842a19 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 01:31:28 +0300 Subject: [PATCH 145/176] moved INSERT info extraction into QueryInfo Signed-off-by: vladimir --- .../impl/codec/ClickhouseNativeEncoder.java | 16 +++-- .../ClickhouseNativePreparedStatement.java | 10 ++-- .../impl/codec/ExtendedQueryCommandCodec.java | 6 +- .../impl/codec/PrepareStatementCodec.java | 42 ++++--------- .../impl/codec/QueryInfo.java | 60 +++++++++++++++++++ .../impl/codec/QueryParsers.java | 11 ++++ .../impl/codec/SimpleQueryCommandCodec.java | 8 +-- 7 files changed, 103 insertions(+), 50 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index d37e74af9b..1e617795c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -9,7 +9,6 @@ import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; -import java.util.Map; public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); @@ -74,22 +73,21 @@ void write(CommandBase cmd) { return new CloseConnectionCommandCodec((CloseConnectionCommand)cmd); } else if (cmd instanceof PrepareStatementCommand) { PrepareStatementCommand ps = (PrepareStatementCommand) cmd; - Map.Entry queryType = QueryParsers.findKeyWord(ps.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); - return new PrepareStatementCodec(ps, queryType); + QueryInfo queryInfo = QueryInfo.parse(ps.sql()); + return new PrepareStatementCodec(ps, queryInfo); } else if (cmd instanceof ExtendedQueryCommand) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; - Map.Entry queryType; + QueryInfo queryInfo; if (ecmd.preparedStatement() != null) { - queryType = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryType(); + queryInfo = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryInfo(); } else { - queryType = QueryParsers.findKeyWord(ecmd.sql(), QueryParsers.SELECT_AND_MUTATE_KEYWORDS); + queryInfo = QueryInfo.parse(ecmd.sql()); } - if (queryType != null && !"insert".equalsIgnoreCase(queryType.getKey()) && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { + if (queryInfo != null && !queryInfo.isInsert() && ecmd.isBatch() && ecmd.paramsList() != null && ecmd.paramsList().size() > 1) { RuntimeException ex = new UnsupportedOperationException("batch queries are supported for INSERTs only"); deliverError(cmd, ex); - throw ex; } - return new ExtendedQueryCommandCodec<>(queryType, ecmd, conn); + return new ExtendedQueryCommandCodec<>(queryInfo, ecmd, conn); } else if (cmd instanceof CloseCursorCommand) { return new CloseCursorCommandCodec((CloseCursorCommand)cmd, conn); } else if (cmd instanceof CloseStatementCommand) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index fe8b325844..30a29599fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -13,16 +13,16 @@ public class ClickhouseNativePreparedStatement implements PreparedStatement { private final String sql; private final ClickhouseNativeParamDesc paramDesc; private final ClickhouseNativeRowDesc rowDesc; - private final Map.Entry queryType; + private final QueryInfo queryInfo; private final boolean sentQuery; private final UUID psId; public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, - Map.Entry queryType, boolean sentQuery, UUID psId) { + QueryInfo queryInfo, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; this.rowDesc = rowDesc; - this.queryType = queryType; + this.queryInfo = queryInfo; this.sentQuery = sentQuery; this.psId = psId; } @@ -47,8 +47,8 @@ public String prepare(TupleInternal values) { return null; } - public Map.Entry queryType() { - return queryType; + public QueryInfo queryInfo() { + return queryInfo; } public boolean isSentQuery() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 9c22429196..7433997457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -23,14 +23,14 @@ public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(Map.Entry queryType, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { - super(queryType, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); + public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + super(queryInfo, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @Override protected String sql() { ExtendedQueryCommand ecmd = ecmd(); - if ((queryType != null && !"insert".equalsIgnoreCase(queryType.getKey())) || !ecmd.isBatch()) { + if ((queryInfo != null && !queryInfo.isInsert()) || !ecmd.isBatch()) { return QueryParsers.insertParamValuesIntoQuery(ecmd.sql(), ecmd.params() == null ? ecmd.paramsList().get(0) : ecmd.params()); } return ecmd.sql(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 29f5e8c3f6..ac8dab04e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -3,24 +3,25 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; -public class PrepareStatementCodec extends ClickhouseNativeCommandCodec{ - private static final Logger LOG = LoggerFactory.getLogger(PrepareStatementCodec.class); - private final Map.Entry queryType; +public class PrepareStatementCodec extends ClickhouseNativeCommandCodec { + private final QueryInfo queryInfo; private final UUID psId; private PacketReader packetReader; - protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry queryType) { + protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryInfo queryInfo) { super(cmd); - this.queryType = queryType; + this.queryInfo = queryInfo; this.psId = UUID.randomUUID(); } @@ -28,14 +29,10 @@ protected PrepareStatementCodec(PrepareStatementCommand cmd, Map.Entry pos = QueryParsers.findKeyWord(sql, fromPos, Collections.singleton("$")); - if (pos == null) { - return -1; - } - return sqlLoCase.lastIndexOf("values", pos.getValue()); - } - @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packetReader == null) { @@ -81,7 +65,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { List columnTypes = new ArrayList<>(data.values()); ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryType, true, psId))); + new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java new file mode 100644 index 0000000000..e3246d9607 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -0,0 +1,60 @@ +package io.vertx.clickhouse.clickhousenative.impl.codec; + +import java.util.Map; + +public class QueryInfo { + public static final int VALUES_LENGTH = "values".length(); + + private final String typeKeyword; + private final Integer typeKeywordPos; + private final boolean isInsert; + private final String queryEndingWithValues; + + QueryInfo(String sql, String typeKeyword, Integer typeKeywordPos) { + this.typeKeyword = typeKeyword; + this.typeKeywordPos = typeKeywordPos; + this.isInsert = "insert".equalsIgnoreCase(typeKeyword); + this.queryEndingWithValues = isInsert ? findValuesAndTruncate(sql, typeKeywordPos) : null; + } + + public String typeKeyword() { + return typeKeyword; + } + + public Integer typeKeywordPos() { + return typeKeywordPos; + } + + public boolean isInsert() { + return isInsert; + } + + public boolean hasValues() { + return queryEndingWithValues != null; + } + + public String queryEndingWithValues() { + return queryEndingWithValues; + } + + private String findValuesAndTruncate(String sql, int typeKeywordPos) { + String loCaseSql = sql.toLowerCase(); + boolean endsWithVals = loCaseSql.endsWith("values"); + if (endsWithVals) { + return sql; + } else { + //TODO: make sure there are placeholders only, maybe count placeholders count + int valuesIndex = QueryParsers.valuesPosForLoCaseSql(loCaseSql, typeKeywordPos); + if (valuesIndex != -1) { + return sql.substring(0, valuesIndex + VALUES_LENGTH); + } else { + return null; + } + } + } + + public static QueryInfo parse(String query) { + Map.Entry qInfo = QueryParsers.findKeyWord(query, QueryParsers.SELECT_AND_MUTATE_KEYWORDS); + return new QueryInfo(query, qInfo == null ? null : qInfo.getKey(), qInfo == null ? null : qInfo.getValue()); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 2405619bd2..8a716d63ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -172,4 +172,15 @@ private static Number byteOrShort(int number, boolean isByte) { } return (short) number; } + + static int valuesPosForLoCaseSql(String sqlLoCase, int fromPos) { + if (sqlLoCase.endsWith("values")) { + return sqlLoCase.length() - "values".length(); + } + Map.Entry pos = findKeyWord(sqlLoCase, fromPos, Collections.singleton("$")); + if (pos == null) { + return -1; + } + return sqlLoCase.lastIndexOf("values", pos.getValue()); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index f583e09bdf..db4a41bf2a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -14,7 +14,7 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; - protected final Map.Entry queryType; + protected final QueryInfo queryInfo; protected final int batchSize; private RowResultDecoder rowResultDecoder; @@ -25,9 +25,9 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(Map.Entry queryType, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); - this.queryType = queryType; + this.queryInfo = queryInfo; this.batchSize = batchSize; this.conn = conn; this.commandRequiresUpdatesDelivery = requireUpdatesDelivery; @@ -117,7 +117,7 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { - if (queryType != null && "insert".equalsIgnoreCase(queryType.getKey())) { + if (queryInfo != null && queryInfo.isInsert()) { rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); From d974e2e46f589102ce98c202bb21d3e104d775b9 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 10:26:37 +0300 Subject: [PATCH 146/176] added NestedExceptionsTest Signed-off-by: vladimir --- .../impl/ClickhouseServerException.java | 19 +- .../impl/codec/ClickhouseExceptionReader.java | 93 ++++-- .../clickhouse/util/ClickHouseCityHash.java | 274 ++++++++++++++++++ .../NestedExceptionsTest.java | 41 +++ .../PacketReaderReplayTest.java | 21 +- .../clickhousenativeclient/PacketUtil.java | 23 ++ .../resources/forged_nested_exception.yaml | 30 ++ 7 files changed, 457 insertions(+), 44 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java create mode 100644 vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 0b497d830b..16273d24c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -6,14 +6,29 @@ public class ClickhouseServerException extends RuntimeException { private final String message; private final String stacktrace; - public ClickhouseServerException(Integer code, String name, String message, String stacktrace, boolean hasNested) { - super(message); + private ClickhouseServerException(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause, boolean unused) { + super(message, cause, false, true); this.code = code; this.name = name; this.message = message; this.stacktrace = stacktrace; } + private ClickhouseServerException(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause) { + super(message, cause, false, false); + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public static ClickhouseServerException build(Integer code, String name, String message, String stacktrace, ClickhouseServerException cause, boolean first) { + if (first) { + return new ClickhouseServerException(code, name, message, stacktrace, cause, first); + } + return new ClickhouseServerException(code, name, message, stacktrace, cause); + } + public int getCode() { return code; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 8ee99cf2c2..4b67457e49 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -3,47 +3,90 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import java.util.ArrayList; +import java.util.List; + public class ClickhouseExceptionReader { + private final List exceptionBlocks = new ArrayList<>(); + private Integer code; private String name; private String message; private String stacktrace; private Boolean hasNested; + public ClickhouseServerException readFrom(ByteBuf in) { - if (code == null) { - if (in.readableBytes() >= 4) { - code = in.readIntLE(); - } else { - return null; + boolean hadNested; + do { + if (code == null) { + if (in.readableBytes() >= 4) { + code = in.readIntLE(); + } else { + return null; + } } - } - if (name == null) { - name = ByteBufUtils.readPascalString(in); if (name == null) { - return null; + name = ByteBufUtils.readPascalString(in); + if (name == null) { + return null; + } } - } - if (message == null) { - message = ByteBufUtils.readPascalString(in); if (message == null) { - return null; + message = ByteBufUtils.readPascalString(in); + if (message == null) { + return null; + } } - } - if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); if (stacktrace == null) { - return null; + stacktrace = ByteBufUtils.readPascalString(in); + if (stacktrace == null) { + return null; + } } - } - if (hasNested == null) { - if (in.readableBytes() >= 1) { - hasNested = in.readByte() != 0; - } else { - return null; + if (hasNested == null) { + if (in.readableBytes() >= 1) { + hasNested = in.readBoolean(); + } else { + return null; + } } + hadNested = hasNested; + ExceptionBlock tmp = new ExceptionBlock(code, name, message, stacktrace, hasNested); + code = null; + name = null; + message = null; + stacktrace = null; + hasNested = null; + exceptionBlocks.add(tmp); + } while (hadNested); + + boolean isFirst = exceptionBlocks.size() == 1; + ClickhouseServerException prevException = exceptionBlocks.get(exceptionBlocks.size() - 1).toException(null, isFirst); + if (!isFirst) { + for (int idx = exceptionBlocks.size() - 2; idx >= 0; --idx) { + isFirst = idx == 0; + prevException = exceptionBlocks.get(idx).toException(prevException, isFirst); + } + } + return prevException; + } + + private static class ExceptionBlock { + private final Integer code; + private final String name; + private final String message; + private final String stacktrace; + + private ExceptionBlock(Integer code, String name, String message, String stacktrace, Boolean hasNested) { + this.code = code; + this.name = name; + this.message = message; + this.stacktrace = stacktrace; + } + + public ClickhouseServerException toException(ClickhouseServerException cause, boolean first) { + return ClickhouseServerException.build(code, name, message, stacktrace, cause, first); } - //TODO smagellan: read nested exception - return new ClickhouseServerException(code, name, message, stacktrace, hasNested); } } diff --git a/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java b/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java new file mode 100644 index 0000000000..b509b11cb4 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java @@ -0,0 +1,274 @@ +/* + * Copyright 2017 YANDEX LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (C) 2012 tamtam180 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ru.yandex.clickhouse.util; + +/** + * @author tamtam180 - kirscheless at gmail.com + * @see http://google-opensource.blogspot.jp/2011/04/introducing-cityhash.html + * @see http://code.google.com/p/cityhash/ + * + */ + +/** + * NOTE: The code is modified to be compatible with CityHash128 used in ClickHouse + */ +public class ClickHouseCityHash { + + private static final long k0 = 0xc3a5c85c97cb3127L; + private static final long k1 = 0xb492b66fbe98f273L; + private static final long k2 = 0x9ae16a3b2f90404fL; + private static final long k3 = 0xc949d7c7509e6557L; + + private static long toLongLE(byte[] b, int i) { + return (((long)b[i+7] << 56) + + ((long)(b[i+6] & 255) << 48) + + ((long)(b[i+5] & 255) << 40) + + ((long)(b[i+4] & 255) << 32) + + ((long)(b[i+3] & 255) << 24) + + ((b[i+2] & 255) << 16) + + ((b[i+1] & 255) << 8) + + ((b[i+0] & 255) << 0)); + } + private static long toIntLE(byte[] b, int i) { + return (((b[i+3] & 255L) << 24) + ((b[i+2] & 255L) << 16) + ((b[i+1] & 255L) << 8) + ((b[i+0] & 255L) << 0)); + } + + private static long fetch64(byte[] s, int pos) { + return toLongLE(s, pos); + } + + private static long fetch32(byte[] s, int pos) { + return toIntLE(s, pos); + } + + private static int staticCastToInt(byte b) { + return b & 0xFF; + } + + private static long rotate(long val, int shift) { + return shift == 0 ? val : (val >>> shift) | (val << (64 - shift)); + } + + private static long rotateByAtLeast1(long val, int shift) { + return (val >>> shift) | (val << (64 - shift)); + } + + private static long shiftMix(long val) { + return val ^ (val >>> 47); + } + + private static final long kMul = 0x9ddfea08eb382d69L; + private static long hash128to64(long u, long v) { + long a = (u ^ v) * kMul; + a ^= (a >>> 47); + long b = (v ^ a) * kMul; + b ^= (b >>> 47); + b *= kMul; + return b; + } + + private static long hashLen16(long u, long v) { + return hash128to64(u, v); + } + + private static long hashLen0to16(byte[] s, int pos, int len) { + if (len > 8) { + long a = fetch64(s, pos + 0); + long b = fetch64(s, pos + len - 8); + return hashLen16(a, rotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + long a = fetch32(s, pos + 0); + return hashLen16((a << 3) + len, fetch32(s, pos + len - 4)); + } + if (len > 0) { + byte a = s[pos + 0]; + byte b = s[pos + (len >>> 1)]; + byte c = s[pos + len - 1]; + int y = staticCastToInt(a) + (staticCastToInt(b) << 8); + int z = len + (staticCastToInt(c) << 2); + return shiftMix(y * k2 ^ z * k3) * k2; + } + return k2; + } + + + private static long[] weakHashLen32WithSeeds( + long w, long x, long y, long z, + long a, long b) { + + a += w; + b = rotate(b + a + z, 21); + long c = a; + a += x; + a += y; + b += rotate(a, 44); + return new long[]{ a + z, b + c }; + } + + private static long[] weakHashLen32WithSeeds(byte[] s, int pos, long a, long b) { + return weakHashLen32WithSeeds( + fetch64(s, pos + 0), + fetch64(s, pos + 8), + fetch64(s, pos + 16), + fetch64(s, pos + 24), + a, + b + ); + } + + private static long[] cityMurmur(byte[] s, int pos, int len, long seed0, long seed1) { + + long a = seed0; + long b = seed1; + long c = 0; + long d = 0; + + int l = len - 16; + if (l <= 0) { + a = shiftMix(a * k1) * k1; + c = b * k1 + hashLen0to16(s, pos, len); + d = shiftMix(a + (len >= 8 ? fetch64(s, pos + 0) : c)); + } else { + + c = hashLen16(fetch64(s, pos + len - 8) + k1, a); + d = hashLen16(b + len, c + fetch64(s, pos + len - 16)); + a += d; + + do { + a ^= shiftMix(fetch64(s, pos + 0) * k1) * k1; + a *= k1; + b ^= a; + c ^= shiftMix(fetch64(s, pos + 8) * k1) * k1; + c *= k1; + d ^= c; + pos += 16; + l -= 16; + } while (l > 0); + } + + a = hashLen16(a, c); + b = hashLen16(d, b); + + return new long[]{ a ^ b, hashLen16(b, a) }; + } + + private static long[] cityHash128WithSeed(byte[] s, int pos, int len, long seed0, long seed1) { + if (len < 128) { + return cityMurmur(s, pos, len, seed0, seed1); + } + + long[] v = new long[2], w = new long[2]; + long x = seed0; + long y = seed1; + long z = k1 * len; + v[0] = rotate(y ^ k1, 49) * k1 + fetch64(s, pos); + v[1] = rotate(v[0], 42) * k1 + fetch64(s, pos + 8); + w[0] = rotate(y + z, 35) * k1 + x; + w[1] = rotate(x + fetch64(s, pos + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = rotate(x + y + v[0] + fetch64(s, pos + 16), 37) * k1; + y = rotate(y + v[1] + fetch64(s, pos + 48), 42) * k1; + + x ^= w[1]; + y ^= v[0] ; + + z = rotate(z ^ w[0], 33); + v = weakHashLen32WithSeeds(s, pos, v[1] * k1, x + w[0]); + w = weakHashLen32WithSeeds(s, pos + 32, z + w[1], y); + + { long swap = z; z = x; x = swap; } + pos += 64; + x = rotate(x + y + v[0] + fetch64(s, pos + 16), 37) * k1; + y = rotate(y + v[1] + fetch64(s, pos + 48), 42) * k1; + x ^= w[1]; + y ^= v[0]; + z = rotate(z ^ w[0], 33); + v = weakHashLen32WithSeeds(s, pos, v[1] * k1, x + w[0]); + w = weakHashLen32WithSeeds(s, pos + 32, z + w[1], y); + { long swap = z; z = x; x = swap; } + pos += 64; + len -= 128; + } while (len >= 128); + + y += rotate(w[0], 37) * k0 + z; + x += rotate(v[0] + z, 49) * k0; + + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (int tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = rotate(y - x, 42) * k0 + v[1]; + w[0] += fetch64(s, pos + len - tail_done + 16); + x = rotate(x, 49) * k0 + w[0]; + w[0] += v[0]; + v = weakHashLen32WithSeeds(s, pos + len - tail_done, v[0], v[1]); + } + + // At this point our 48 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 48-byte-to-8-byte hashes to get a 16-byte final result. + + x = hashLen16(x, v[0]); + y = hashLen16(y, w[0]); + + return new long[]{ + hashLen16(x + v[1], w[1]) + y, + hashLen16(x + w[1], y + v[1]) + }; + } + + + //TODO: switch to external jar, see https://github.com/ClickHouse/clickhouse-jdbc/issues/600 + public static long[] cityHash128(byte[] s, int pos, int len) { + + if (len >= 16) { + return cityHash128WithSeed( + s, pos + 16, + len - 16, + fetch64(s, pos) ^ k3, + fetch64(s, pos + 8) + ); + } else if (len >= 8) { + return cityHash128WithSeed( + new byte[0], 0, 0, + fetch64(s, pos ) ^ (len * k0), + fetch64(s, pos + len -8) ^ k1 + ); + } else { + return cityHash128WithSeed(s, pos, len, k0, k1); + } + } + +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java new file mode 100644 index 0000000000..7eea72ecaf --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -0,0 +1,41 @@ +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import org.junit.Assert; + +public class NestedExceptionsTest { + @Test + public void checkExceptions() throws IOException { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + ByteBuf buf; + try (InputStream is = NestedExceptionsTest.class.getResourceAsStream("/forged_nested_exception.yaml")) { + Map map = mapper.readValue(is, Map.class); + List queryAnswers = PacketUtil.filterServerBlocks(map); + byte[][] arrays = PacketUtil.asPrimitiveByteArray(queryAnswers); + buf = Unpooled.wrappedBuffer(arrays); + } + + PooledByteBufAllocator allocator = new PooledByteBufAllocator(); + PacketReader rdr = new PacketReader(null, "none", Collections.emptyMap(), null); + ClickhouseServerException exception = (ClickhouseServerException)rdr.receivePacket(allocator, buf); + Assert.assertEquals("DB::Exception", exception.getName()); + ClickhouseServerException nested = (ClickhouseServerException) exception.getCause(); + Assert.assertNotNull(nested); + Assert.assertEquals("DB::Dxception", nested.getName()); + Assert.assertNull(nested.getCause()); + } +} diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 53eda45627..9df9d02072 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.io.InputStream; import java.util.*; -import java.util.stream.Collectors; @RunWith(Parameterized.class) public class PacketReaderReplayTest { @@ -57,12 +56,8 @@ public static Iterable dataForTest() throws IOException { try (InputStream is = PacketReaderReplayTest.class.getResourceAsStream(replayFile)) { Map map = mapper.readValue(is, Map.class); - List queryAnswers = map.entrySet() - .stream() - .filter(packet -> !packet.getKey().startsWith("peer0_")) - .map(Map.Entry::getValue) - .collect(Collectors.toList()); - byte[][] arrays = asPrimitiveByteArray(queryAnswers); + List queryAnswers = PacketUtil.filterServerBlocks(map); + byte[][] arrays = PacketUtil.asPrimitiveByteArray(queryAnswers); ByteBuf fragmentedByteBuf = Unpooled.wrappedBuffer(arrays); ByteBuf continuousBuf = Unpooled.wrappedBuffer(new byte[fragmentedByteBuf.readableBytes()]) .writerIndex(0); @@ -96,11 +91,11 @@ public void doReplayTest() { String fullName = "Clickhouse jython-driver"; LOG.info("all bytes: " + ByteBufUtil.hexDump(buf)); while (buf.readableBytes() > 0) { - readConnIteraction(allocator, fullName); + readConnInteraction(allocator, fullName); } } - private void readConnIteraction(PooledByteBufAllocator allocator, String fullName) { + private void readConnInteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); @@ -121,12 +116,4 @@ private static Map buildProperties(boolean withCompression) { props.put(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse"); return props; } - - private static byte[][] asPrimitiveByteArray(List src) { - byte[][] ret = new byte[src.size()][]; - for (int i = 0; i < src.size(); ++i) { - ret[i] = src.get(i); - } - return ret; - } } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java new file mode 100644 index 0000000000..1b14fa83f1 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -0,0 +1,23 @@ +package io.vertx.clickhousenativeclient; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class PacketUtil { + public static List filterServerBlocks(Map map) { + return map.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + } + + public static byte[][] asPrimitiveByteArray(List src) { + byte[][] ret = new byte[src.size()][]; + for (int i = 0; i < src.size(); ++i) { + ret[i] = src.get(i); + } + return ret; + } +} diff --git a/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml b/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml new file mode 100644 index 0000000000..21f4bdfc38 --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml @@ -0,0 +1,30 @@ +# Packet 136 +peer0_0: !!binary | + AE1DbGlja0hvdXNlIENsaWNraG91c2VOYXRpdmVQcmVwYXJlZFF1ZXJ5Q2FjaGVkVGVzdC50ZXN0 + Q29ubmVjdEludmFsaWREYXRhYmFzZRQKqakDD2ludmFsaWREYXRhYmFzZQdkZWZhdWx0B2RlZmF1 + bHQ= +# Packet 138 +peer1_0: !!binary | + AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi + YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi + NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm + OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u + ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv + Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv + YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg + aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5 + KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl + YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3 + LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv + CgFRAAAADURCOjpEeGNlcHRpb243REI6OkV4Y2VwdGlvbjogRGF0YWJhc2UgYGludmFsaWREYXRh + YmFzZWAgZG9lc24ndCBleGlzdKcEMC4gREI6OlRDUEhhbmRsZXI6OnJ1bkltcGwoKSBAIDB4Zjhi + YjZkZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjEuIERCOjpUQ1BIYW5kbGVyOjpydW4oKSBAIDB4 + ZjhjYmVjOSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjIuIFBvY286Ok5ldDo6VENQU2VydmVyQ29u + bmVjdGlvbjo6c3RhcnQoKSBAIDB4MTFmODAxYWYgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQozLiBQ + b2NvOjpOZXQ6OlRDUFNlcnZlckRpc3BhdGNoZXI6OnJ1bigpIEAgMHgxMWY4MWJjMSBpbiAvdXNy + L2Jpbi9jbGlja2hvdXNlCjQuIFBvY286OlBvb2xlZFRocmVhZDo6cnVuKCkgQCAweDEyMGI4MmU5 + IGluIC91c3IvYmluL2NsaWNraG91c2UKNS4gUG9jbzo6VGhyZWFkSW1wbDo6cnVubmFibGVFbnRy + eSh2b2lkKikgQCAweDEyMGI0MTRhIGluIC91c3IvYmluL2NsaWNraG91c2UKNi4gc3RhcnRfdGhy + ZWFkIEAgMHg4ZWE3IGluIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJwdGhyZWFkLTIuMzEuc28K + Ny4gX19jbG9uZSBAIDB4ZmRkZWYgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMtMi4zMS5z + bwoA From 4472783e50e6ef0fc0ebabc0f8d8454417e412d8 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 11:28:02 +0300 Subject: [PATCH 147/176] replaced LOG.info with LOG.debug where needed Signed-off-by: vladimir --- .../clickhousenative/impl/BlockInfo.java | 13 +++++--- .../impl/codec/ClickhouseNativeEncoder.java | 4 ++- .../codec/CloseConnectionCommandCodec.java | 5 +-- .../impl/codec/ColumnOrientedBlockReader.java | 5 +-- .../impl/codec/ExtendedQueryCommandCodec.java | 4 ++- .../impl/codec/InitCommandCodec.java | 8 +++-- .../codec/Lz4ClickhouseStreamDataSource.java | 26 ++++++++++----- .../impl/codec/PacketForge.java | 8 +++-- .../impl/codec/PacketReader.java | 33 ++++++++++++++----- .../impl/codec/SimpleQueryCommandCodec.java | 19 +++++++---- 10 files changed, 88 insertions(+), 37 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 1e9f631acf..d918d704fe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -47,8 +47,9 @@ public void readFrom(ClickhouseStreamDataSource in) { return; } } - - LOG.info("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); + if (LOG.isDebugEnabled()) { + LOG.debug("fieldNum: " + fieldNum + "(" + Integer.toHexString(fieldNum) + ")"); + } if (fieldNum == 0) { complete = true; return; @@ -57,7 +58,9 @@ public void readFrom(ClickhouseStreamDataSource in) { if (in.readableBytes() >= 1) { isOverflows = in.readBoolean(); fieldNum = null; - LOG.info("isOverflows: " + isOverflows); + if (LOG.isDebugEnabled()) { + LOG.debug("isOverflows: " + isOverflows); + } } else { return; } @@ -66,7 +69,9 @@ public void readFrom(ClickhouseStreamDataSource in) { if (readable >= 4) { bucketNum = in.readIntLE(); fieldNum = null; - LOG.info("bucketNum: " + bucketNum); + if (LOG.isDebugEnabled()) { + LOG.debug("bucketNum: " + bucketNum); + } } else { return; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 1e617795c0..0f1229905e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -53,7 +53,9 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) } void write(CommandBase cmd) { - LOG.info("got command: " + cmd.getClass()); + if (LOG.isDebugEnabled()) { + LOG.debug("got command: " + cmd.getClass()); + } ClickhouseNativeCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { ClickhouseNativeCommandCodec c = inflight.poll(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 1d3b4f5da1..335c294524 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -22,8 +22,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { @Override public void encode(ClickhouseNativeEncoder encoder) { super.encode(encoder); - LOG.info("closing channel"); - //encoder.chctx().channel().close(); + if (LOG.isDebugEnabled()) { + LOG.debug("closing channel"); + } ChannelHandlerContext ctx = encoder.chctx(); SocketChannel channel = (SocketChannel) ctx.channel(); ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(v -> channel.shutdownOutput()); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index de4c92d39c..0cb1090b73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -91,8 +91,9 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { - LOG.info("reading column " + colName + "[" + nRows + "] of type " + colType); - + if (LOG.isDebugEnabled()) { + LOG.debug("reading column " + colName + "[" + nRows + "] of type " + colType); + } columnData.readColumn(in); if (columnData.isPartial()) { return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index 7433997457..c561c85af9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -58,7 +58,9 @@ void encode(ClickhouseNativeEncoder encoder) { } forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); chctx.writeAndFlush(buf, chctx.voidPromise()); - LOG.info("sent columns"); + if (LOG.isDebugEnabled()) { + LOG.debug("sent columns"); + } } catch (Throwable t) { buf.release(); throw t; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6f10258d4b..19fc857f75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -37,7 +37,9 @@ void encode(ClickhouseNativeEncoder encoder) { ByteBufUtils.writePascalString(cmd.username(), buf); ByteBufUtils.writePascalString(cmd.password(), buf); encoder.chctx().writeAndFlush(buf, encoder.chctx().voidPromise()); - LOG.info("sent hello packet "); + if (LOG.isDebugEnabled()) { + LOG.debug("sent hello packet "); + } } @Override @@ -50,7 +52,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packet.getClass() == ClickhouseNativeDatabaseMetadata.class) { ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)packet; encoder.getConn().setDatabaseMetadata(md); - LOG.info("connected to server: " + md); + if (LOG.isDebugEnabled()) { + LOG.debug("connected to server: " + md); + } completionHandler.handle(CommandResponse.success(null)); } else if (packet.getClass() == ClickhouseServerException.class) { ClickhouseServerException exc = (ClickhouseServerException)packet; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index cba9e7b2f8..3982fa7bde 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -38,11 +38,13 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (serverCityHash == null) { if (buf.readableBytes() >= HEADER_LENGTH) { serverCityHash = new long[2]; - dumpHeader(buf); - LOG.info(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + - "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + - "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); - LOG.info("full dump: " + ByteBufUtil.hexDump(buf)); + if (LOG.isDebugEnabled()) { + dumpHeader(buf); + LOG.debug(this.hashCode() + ": lz4 header dump: " + ByteBufUtil.hexDump(buf, buf.readerIndex(), HEADER_LENGTH) + + "; buf hash: " + buf.hashCode() + "; identityHash:" + System.identityHashCode(buf) + + "; readerIndex: " + buf.readerIndex() + "; writerIndex: " + buf.writerIndex() + "; readableBytes: " + buf.readableBytes()); + LOG.debug("full dump: " + ByteBufUtil.hexDump(buf)); + } serverCityHash[0] = buf.readLongLE(); serverCityHash[1] = buf.readLongLE(); int checkSummedReaderIndex = buf.readerIndex(); @@ -62,8 +64,10 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { if (uncompressedSize > Integer.MAX_VALUE) { throw new IllegalStateException("uncompressedSize is too big: " + uncompressedSize + "; limit " + Integer.MAX_VALUE); } - LOG.info(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", - compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + if (LOG.isDebugEnabled()) { + LOG.debug(String.format("compressed size: %d(0x%X), sizeWithHeader: %d(0x%X), uncompressed size: %d(0x%X)", + compressedAndSizeSize, compressedAndSizeSize, sizeWithHeader, sizeWithHeader, uncompressedSize, uncompressedSize)); + } arrayBb = alloc.buffer(sizeWithHeader.intValue()); buf.readerIndex(checkSummedReaderIndex); buf.readBytes(arrayBb, CHECKSUMED_HEADER_LENGTH); @@ -98,7 +102,9 @@ public void moreData(ByteBuf buf, ByteBufAllocator alloc) { LZ4FastDecompressor decompressor = lz4Factory.fastDecompressor(); //LOG.info("compressed bytes: " + ByteBufUtil.hexDump(arrayBb)); decompressor.decompress(arrayBb.array(), arrayBb.arrayOffset() + arrayBb.readerIndex(), uncompressedBytes, 0, uncompressedBytes.length); - LOG.info("decompressed " + uncompressedBytes.length + " bytes of data"); + if (LOG.isDebugEnabled()) { + LOG.debug("decompressed " + uncompressedBytes.length + " bytes of data"); + } //LOG.info("decompressed data: " + ByteBufUtil.hexDump(uncompressedBytes) + "; asStr: " + new String(uncompressedBytes, StandardCharsets.UTF_8)); decompressedData.writeBytes(uncompressedBytes); arrayBb.release(); @@ -113,7 +119,9 @@ private void dumpHeader(ByteBuf buf) { String method = ByteBufUtil.hexDump(buf, buf.readerIndex() + 16, 1); String sizeWithHeader = ByteBufUtil.hexDump(buf, buf.readerIndex() + 17, 4); String uncompressedSize = ByteBufUtil.hexDump(buf, buf.readerIndex() + 21, 4); - LOG.info(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + if (LOG.isDebugEnabled()) { + LOG.debug(String.format("header: [%s:%s]:%s:%s:%s", h1, h2, method, sizeWithHeader, uncompressedSize)); + } } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index bc715af22c..00dbf4b7bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -22,7 +22,9 @@ public PacketForge(ClickhouseNativeSocketConnection conn, ChannelHandlerContext } public void sendQuery(String query, ByteBuf buf) { - LOG.info("running query: " + query); + if (LOG.isDebugEnabled()) { + LOG.debug("running query: " + query); + } ByteBufUtils.writeULeb128(ClientPacketTypes.QUERY, buf); //query id ByteBufUtils.writePascalString("", buf); @@ -47,7 +49,9 @@ public void writeSettings(Map settings, boolean settingsAsString if (settingsAsStrings) { for (Map.Entry entry : settings.entrySet()) { if (!ClickhouseConstants.NON_QUERY_OPTIONS.contains(entry.getKey())) { - LOG.info("writing query setting: " + entry); + if (LOG.isDebugEnabled()) { + LOG.debug("writing query setting: " + entry); + } ByteBufUtils.writePascalString(entry.getKey(), buf); buf.writeBoolean(settingsAreImportant); ByteBufUtils.writePascalString(entry.getValue(), buf); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 5d489e331f..d902446fb6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -56,9 +56,12 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } try { packetType = ServerPacketType.fromCode(packetTypeCode); - LOG.info("packet type: " + packetType); + if (LOG.isDebugEnabled()) { + LOG.debug("packet type: " + packetType); + } } catch (IllegalArgumentException ex) { LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in), ex); + throw ex; } } @@ -71,7 +74,9 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { } else if (packetType == ServerPacketType.PROGRESS) { return readProgressBlock(in); } else if (packetType == ServerPacketType.END_OF_STREAM) { - LOG.info("decoded: END_OF_STREAM"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: END_OF_STREAM"); + } packetType = null; endOfStream = true; } else if (packetType == ServerPacketType.PROFILE_INFO) { @@ -134,7 +139,9 @@ private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser TableColumns ret = null; if (block != null) { ret = new TableColumns(multistringMessage, block); - LOG.info("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: MultistringMessage: " + multistringMessage + "; block: [" + block.numColumns() + "; " + block.numRows() + "]"); + } multistringReader = null; packetType = null; tableColumnsPacketReader = null; @@ -149,7 +156,9 @@ private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { } ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { - LOG.info("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + } metadataReader = null; packetType = null; } @@ -162,7 +171,9 @@ private BlockStreamProfileInfo readProfileInfoBlock(ByteBuf in) { } BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); if (profileInfo != null) { - LOG.info("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + } blockStreamProfileReader = null; packetType = null; } @@ -175,7 +186,9 @@ private QueryProgressInfo readProgressBlock(ByteBuf in) { } QueryProgressInfo queryProgressInfo = queryProgressInfoReader.readFrom(in); if (queryProgressInfo != null) { - LOG.info("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: PROGRESS/QueryProgressInfo: " + queryProgressInfo); + } queryProgressInfoReader = null; packetType = null; } @@ -188,7 +201,9 @@ private ClickhouseServerException readExceptionBlock(ByteBuf in) { } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { - LOG.info("decoded: EXCEPTION/ClickhouseServerException"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: EXCEPTION/ClickhouseServerException"); + } exceptionReader = null; packetType = null; } @@ -216,7 +231,9 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo ColumnOrientedBlock block = columnBlockReader.readFrom(ds); if (block != null) { List colNames = new ArrayList<>(block.getColumnsWithTypes().keySet()); - LOG.info("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded: DATA/ColumnOrientedBlock [" + block.numColumns() + "; " + block.numRows() + "][" + colNames + "]"); + } columnBlockReader = null; packetType = null; ds.finish(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index db4a41bf2a..28a0d15809 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -69,7 +69,9 @@ protected void checkIfBusy() { @Override void decode(ChannelHandlerContext ctx, ByteBuf in) { - LOG.info("decode, readable bytes: " + in.readableBytes()); + if (LOG.isDebugEnabled()) { + LOG.debug("decode, readable bytes: " + in.readableBytes()); + } if (packetReader == null) { packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), null, null, encoder.getConn().lz4Factory()); } @@ -77,7 +79,9 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { if (packet != null) { if (packet.getClass() == ColumnOrientedBlock.class) { ColumnOrientedBlock block = (ColumnOrientedBlock)packet; - LOG.info("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); + if (LOG.isDebugEnabled()) { + LOG.debug("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); + } if (dataPacketNo == 0) { ClickhouseNativeRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); @@ -89,11 +93,12 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } ++dataPacketNo; } else { - String msg = "unknown packet type: " + packet.getClass(); - LOG.error(msg); + if (LOG.isDebugEnabled()) { + LOG.error("non-data packet type: " + packet.getClass()); + } if (packet instanceof Throwable) { Throwable t = (Throwable) packet; - LOG.error("unknown packet type", t); + LOG.error("unknown packet type or server exception", t); notifyOperationUpdate(false, t); } } @@ -114,7 +119,9 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro T result = rowResultDecoder.result(); int size = rowResultDecoder.size(); rowResultDecoder.reset(); - LOG.info("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); + if (LOG.isDebugEnabled()) { + LOG.debug("notifying operation update; has more result = " + hasMoreResults + "; size: " + size); + } cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { if (queryInfo != null && queryInfo.isInsert()) { From 42543055611ecfadde8328c31e7afd49a8b60669 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 13:41:29 +0300 Subject: [PATCH 148/176] added copyright headers Signed-off-by: vladimir --- .../ClickhouseNativeConnectOptionsConverter.java | 13 +++++++++++++ .../src/main/java/examples/SqlClientExamples.java | 13 +++++++++++++ .../clickhousenative/ClickhouseConstants.java | 13 +++++++++++++ .../ClickhouseNativeConnectOptions.java | 13 +++++++++++++ .../ClickhouseNativeConnection.java | 13 +++++++++++++ .../clickhousenative/ClickhouseNativePool.java | 13 +++++++++++++ .../clickhousenative/impl/BaseBlock.java | 13 +++++++++++++ .../clickhousenative/impl/BlockInfo.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionFactory.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeConnectionUriParser.java | 13 +++++++++++++ .../impl/ClickhouseNativeDatabaseMetadata.java | 13 +++++++++++++ .../impl/ClickhouseNativePoolImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeRowDesc.java | 13 +++++++++++++ .../impl/ClickhouseNativeRowImpl.java | 13 +++++++++++++ .../impl/ClickhouseNativeSocketConnection.java | 13 +++++++++++++ .../impl/ClickhouseServerException.java | 13 +++++++++++++ .../clickhousenative/impl/ColumnOrientedBlock.java | 13 +++++++++++++ .../clickhousenative/impl/RowOrientedBlock.java | 13 +++++++++++++ .../impl/codec/BlockStreamProfileInfo.java | 13 +++++++++++++ .../impl/codec/BlockStreamProfileInfoReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/ByteBufUtils.java | 13 +++++++++++++ .../impl/codec/ClickhouseExceptionReader.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeCodec.java | 13 +++++++++++++ .../codec/ClickhouseNativeColumnDescriptor.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeCommandCodec.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeDecoder.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeEncoder.java | 13 +++++++++++++ .../impl/codec/ClickhouseNativeParamDesc.java | 13 +++++++++++++ .../codec/ClickhouseNativePreparedStatement.java | 13 +++++++++++++ .../ClickhouseNativeQueryCommandBaseCodec.java | 13 +++++++++++++ .../impl/codec/ClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/ClickhouseStreamDataSource.java | 13 +++++++++++++ .../clickhousenative/impl/codec/ClientInfo.java | 13 +++++++++++++ .../impl/codec/ClientPacketTypes.java | 13 +++++++++++++ .../impl/codec/CloseConnectionCommandCodec.java | 13 +++++++++++++ .../impl/codec/CloseCursorCommandCodec.java | 13 +++++++++++++ .../impl/codec/CloseStatementCommandCodec.java | 13 +++++++++++++ .../impl/codec/ColumnOrientedBlockReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/Compression.java | 13 +++++++++++++ .../impl/codec/DatabaseMetadataReader.java | 13 +++++++++++++ .../impl/codec/ExtendedQueryCommandCodec.java | 13 +++++++++++++ .../impl/codec/InitCommandCodec.java | 13 +++++++++++++ .../impl/codec/Lz4ClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/Lz4ClickhouseStreamDataSource.java | 13 +++++++++++++ .../impl/codec/MultistringMessageReader.java | 13 +++++++++++++ .../clickhousenative/impl/codec/PacketForge.java | 13 +++++++++++++ .../clickhousenative/impl/codec/PacketReader.java | 13 +++++++++++++ .../impl/codec/PrepareStatementCodec.java | 13 +++++++++++++ .../clickhousenative/impl/codec/QueryInfo.java | 13 +++++++++++++ .../clickhousenative/impl/codec/QueryParsers.java | 13 +++++++++++++ .../impl/codec/QueryProcessingStage.java | 13 +++++++++++++ .../impl/codec/QueryProgressInfo.java | 13 +++++++++++++ .../impl/codec/QueryProgressInfoReader.java | 13 +++++++++++++ .../impl/codec/RawClickhouseStreamDataSink.java | 13 +++++++++++++ .../impl/codec/RawClickhouseStreamDataSource.java | 13 +++++++++++++ .../impl/codec/RowResultDecoder.java | 13 +++++++++++++ .../impl/codec/ServerPacketType.java | 13 +++++++++++++ .../impl/codec/SimpleQueryCommandCodec.java | 13 +++++++++++++ .../clickhousenative/impl/codec/TableColumns.java | 13 +++++++++++++ .../impl/codec/columns/ArrayColumn.java | 13 +++++++++++++ .../impl/codec/columns/ArrayColumnReader.java | 14 ++++++++++++++ .../impl/codec/columns/ArrayColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumn.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/ClickhouseColumns.java | 13 +++++++++++++ .../impl/codec/columns/ColumnUtils.java | 13 +++++++++++++ .../impl/codec/columns/DateColumn.java | 13 +++++++++++++ .../impl/codec/columns/DateColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64Column.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateTime64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumn.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/DateTimeColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Decimal128Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal256Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Decimal32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64Column.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Decimal64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Enum16Column.java | 13 +++++++++++++ .../impl/codec/columns/Enum16ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Enum16ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Enum8Column.java | 13 +++++++++++++ .../impl/codec/columns/Enum8ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Enum8ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnDecoder.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnEncoder.java | 13 +++++++++++++ .../impl/codec/columns/EnumColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/EnumResolutionMethod.java | 13 +++++++++++++ .../impl/codec/columns/FixedStringColumn.java | 13 +++++++++++++ .../codec/columns/FixedStringColumnReader.java | 13 +++++++++++++ .../codec/columns/FixedStringColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Float32Column.java | 13 +++++++++++++ .../impl/codec/columns/Float32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Float32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Float64Column.java | 13 +++++++++++++ .../impl/codec/columns/Float64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Float64ColumnWriter.java | 13 +++++++++++++ .../codec/columns/GenericDecimalColumnReader.java | 13 +++++++++++++ .../codec/columns/GenericDecimalColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IPv4Column.java | 13 +++++++++++++ .../impl/codec/columns/IPv4ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/IPv4ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IPv6Column.java | 13 +++++++++++++ .../impl/codec/columns/IPv6ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/IPv6ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Int128Column.java | 13 +++++++++++++ .../impl/codec/columns/Int128ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/Int128ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/IntervalColumn.java | 13 +++++++++++++ .../impl/codec/columns/IntervalColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/LowCardinalityColumn.java | 13 +++++++++++++ .../codec/columns/LowCardinalityColumnReader.java | 13 +++++++++++++ .../codec/columns/LowCardinalityColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/PairedIterator.java | 13 +++++++++++++ .../impl/codec/columns/StringCache.java | 13 +++++++++++++ .../impl/codec/columns/StringColumn.java | 13 +++++++++++++ .../impl/codec/columns/StringColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/StringColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/Triplet.java | 13 +++++++++++++ .../impl/codec/columns/UInt16Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt16ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt16ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt32Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt32ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt32ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt64Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt64ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt64ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UInt8Column.java | 13 +++++++++++++ .../impl/codec/columns/UInt8ColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UInt8ColumnWriter.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumn.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumnReader.java | 13 +++++++++++++ .../impl/codec/columns/UUIDColumnWriter.java | 13 +++++++++++++ .../clickhouse/clickhousenative/package-info.java | 13 +++++++++++++ .../spi/ClickhouseNativeDriver.java | 13 +++++++++++++ .../codec/columns/ClickhouseColumnsTestReader.java | 13 +++++++++++++ .../clickhousenativeclient/ArraySerDesTest.java | 13 +++++++++++++ .../BasicClickhouseTest.java | 13 +++++++++++++ .../clickhousenativeclient/ClickhouseResource.java | 13 +++++++++++++ .../ExtendedClickhouseTest.java | 13 +++++++++++++ .../NestedExceptionsTest.java | 13 +++++++++++++ .../PacketReaderReplayTest.java | 13 +++++++++++++ .../vertx/clickhousenativeclient/PacketUtil.java | 13 +++++++++++++ .../io/vertx/clickhousenativeclient/Sleep.java | 13 +++++++++++++ .../clickhousenativeclient/SpecialTypesTest.java | 13 +++++++++++++ .../alltypes/AllTypesBase.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/BlobTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/DateTest.java | 13 +++++++++++++ .../alltypes/DateTime64Test.java | 13 +++++++++++++ .../alltypes/DateTimeTest.java | 13 +++++++++++++ .../alltypes/Decimal128Test.java | 13 +++++++++++++ .../alltypes/Decimal256Test.java | 13 +++++++++++++ .../alltypes/Decimal32Test.java | 13 +++++++++++++ .../alltypes/Decimal64Test.java | 13 +++++++++++++ .../alltypes/Enum16Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Enum8Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/EnumTest.java | 13 +++++++++++++ .../alltypes/FixedStringTest.java | 13 +++++++++++++ .../alltypes/Float32Test.java | 13 +++++++++++++ .../alltypes/Float64Test.java | 13 +++++++++++++ .../alltypes/HugeDecimalTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/IPv4Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/IPv6Test.java | 13 +++++++++++++ .../alltypes/Int128Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int16Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int32Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int64Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/Int8Test.java | 13 +++++++++++++ .../alltypes/StringArrayDeduplicationTester.java | 13 +++++++++++++ .../alltypes/StringTest.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/TestEnum.java | 13 +++++++++++++ .../alltypes/UInt16Test.java | 13 +++++++++++++ .../alltypes/UInt32Test.java | 13 +++++++++++++ .../alltypes/UInt64Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/UInt8Test.java | 13 +++++++++++++ .../clickhousenativeclient/alltypes/UUIDTest.java | 13 +++++++++++++ .../ClickhouseNativeBinaryDataTypeDecodeTest.java | 13 +++++++++++++ .../ClickhouseNativeBinaryDataTypeEncodeTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeCollectorTest.java | 13 +++++++++++++ .../ClickhouseNativeConnectionAutoRetryTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeConnectionTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeDriverTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedBatchTest.java | 13 +++++++++++++ .../ClickhouseNativePreparedQueryCachedTest.java | 13 +++++++++++++ .../ClickhouseNativePreparedQueryPooledTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedQueryTest.java | 13 +++++++++++++ .../tck/ClickhouseNativePreparedQueryTestBase.java | 13 +++++++++++++ .../tck/ClickhouseNativeSimpleQueryPooledTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeSimpleQueryTest.java | 13 +++++++++++++ .../ClickhouseNativeTextDataTypeDecodeTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeTracingTest.java | 13 +++++++++++++ .../tck/ClickhouseNativeTransactionTest.java | 13 +++++++++++++ .../clickhousenativeclient/tck/ClientConfig.java | 13 +++++++++++++ 201 files changed, 2614 insertions(+) diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index b9db59e66f..fc77dd0df5 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 6674bc7948..26799d3398 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package examples; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 6c86a1e806..81f277e812 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import java.util.Arrays; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 0de9f4fb3c..636fc4e3f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index eee51f5f1a..be1dadb5e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index 0583f93244..abd5db422d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index f58d1bb7b1..88a284ad42 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index d918d704fe..bf8073f05c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index ae1bcfaf0b..40699a8a47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index b9a98773b1..cfdc84b462 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 7acfb6b429..9697b2048b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index c2c5b0230e..b5c2ce62f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 2f43623e6b..ae281664be 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index 65ba59dfca..aef9348e25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 6de8776d4b..5fbec9418e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index 8924104464..a1cb5aca1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.netty.channel.ChannelPipeline; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 16273d24c5..eebf9baa88 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; public class ClickhouseServerException extends RuntimeException { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 76efd8872b..e152bb304a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index 448b7f1447..c8b69146ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index 437cea6365..ea375135c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class BlockStreamProfileInfo { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index 20ed90f8cf..f67439f05e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index e7d9fe0474..51fe00109f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 4b67457e49..6c143ba40d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index ea1fd6deee..c33471b071 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index 92f9abb822..dada2f56c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index 369ae7d18a..dcf63afaf3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index fb1ea517fb..471e817fa4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 0f1229905e..96a21e2dd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index c8454ed1d5..6b3dad2ace 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 30a29599fd..2273b27d85 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 8b4596e7e2..b4ce000302 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index 762fa4724a..b23e4993ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public interface ClickhouseStreamDataSink { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 8503205e12..bcff1eab4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 807cac542c..5f171753df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 7573773f4b..88a06156b4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class ClientPacketTypes { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 335c294524..3f3b47c457 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 7b87ac31a6..2e1f1dc0f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index d2f72a2d55..458b633d40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 0cb1090b73..a70bbb7c24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 221252ea35..8b6277255f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class Compression { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index f334acb6e3..a1a93d8fcd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index c561c85af9..bde082a2de 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 19fc857f75..6d9a373925 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index b700d4dd44..21add78db7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 3982fa7bde..5318691c05 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index 26a5123ac3..c71df439c6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 00dbf4b7bf..b0d494ac07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index d902446fb6..4d3b9842c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index ac8dab04e9..64d2074fa2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index e3246d9607..c1dca7ef98 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index 8a716d63ea..d327ec6b4e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 9c5f44fd2f..6cc34c3b5c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class QueryProcessingStage { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 2f12160f7d..50c355abcb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; public class QueryProgressInfo { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 5b44d9d4a7..5089af0fc7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 93297777ee..453321cbf5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 78ea7b8133..3dd7a18a99 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 9bb195e877..8202e827cd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index 385f857556..f23402d174 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 28a0d15809..4ff3b8be1f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index e5be96fa10..805fbdc4af 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec; import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 9719769cfa..ec7b7936ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 24914f513e..7b03eb30c2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; @@ -17,6 +30,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; + //TODO: use int[][] and int[][][] as masterSlice and perRowsSlice private List> masterSlice; private List>> perRowsSlice; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 5a3555c6f3..070c7fbaa5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 51300e05e0..297d97c826 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index b686647713..a5c47f8ed6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index f5dd1aa4a3..f78bd559b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 0bac601e0c..475183899e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 3f02c14908..1b5b6b7a96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index f3da896429..43385870e7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index 51286a312a..7fa7cf29bc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index d51d71602c..ba962c523c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 36b842c7f7..bd3b33efc3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 47c0668c04..e9363dba5d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index fd0fa8887c..e97a3567bb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index a59fa805b7..53e9d00691 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index fd88ebf41d..97a5d2fa3b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index 58e72a3c9f..5b20c82c5b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 0df3a50072..113ad3ce5c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 6ec5c8281a..483a30a4b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 86b0cf5984..b9feb60b3d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 5ff0bd43cb..04d684d7a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index 4136f7beec..bb33b8159d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 2a69bbb98e..2b1af0c965 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 839e8e63c0..8aaa9e6497 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index e2c7aa71a3..0ec2844717 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 5ebd0f1758..b3655543ed 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 977d2d893d..54429ae13a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index 99237088ec..38158d1228 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 7a4f17f3f9..bf7f94b4a2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 4ee4313ad7..a73f5fa7af 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 6ab08e9dfa..d8fdec966f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 22eeb055a6..1e43af25e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index 960c221cc6..e3f2443690 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.HashMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 990ea8e110..408acc5c66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; public interface EnumColumnReader { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index fd76395e3f..c2bd4b15c9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.Arrays; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index e43ba3cf3c..02b4809f1c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 4bdb6014d5..24e8c5f8e9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 79ed29b3b1..2733ff745f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 85ab677398..10309abb9a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index a691364c1e..173a6f9da5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index f14aae0d23..de449814f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 4a01a5a650..c65428dd79 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index 9e4c5ab07a..ca758f5f06 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index 9da9c85f8b..b0d4d913b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 24d25ae02b..ba9a701a9e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index f95def64cd..5f66f6cb8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 7e2fdaa3b8..426c8dc947 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 66e8b8e681..35233d8f76 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index 7d798113d6..fbad1e1642 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 8d0ba48b8e..a76a187e50 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 294158f43a..bd4dfadcfe 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index 98ec4a1857..daaaf28f26 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 5b4bd47145..fd3147740a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index d8976952c4..2d3f78afee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 34b1c10c7f..6fab61d2c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 84735f3e75..860db23bf9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 6b870d64ce..42ee563d90 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index 6faf441029..d5ac24ef9b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 87131f0efd..322b122f94 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 7ffafb87dc..b73def29f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index f00c3f5dbf..a2c7214266 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.util.AbstractMap; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index d9fc77c7f1..5234b5603b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import java.lang.ref.SoftReference; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 84d6638225..0a07fe6a4c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index a118062139..3948bd4827 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 19f9442d01..7dee4b30b4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index 6a53721df7..cb09672e25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; public class Triplet { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 2d8c55fc4b..4e0c552320 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 40326ebf05..34c6af0dcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index 016fed04f8..419dca2d46 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 408ec87564..a0df15f820 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 10d307d408..e435482e4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index 15fdee6b67..afb8c4ff4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index e4dce6a41d..af179b9893 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index c0e4f879ca..1641943e5b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index 7445baaa8c..df953dff88 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index cd4a682756..0757436dd1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 8c001c0311..6edd37239b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 74f50f546c..03d6275964 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index ccfa171dea..3da9601e59 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 4e8c87ab02..6c3289bc4d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index c3e21525e2..160333239c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index fe9ea8e26d..f72263172b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + @ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") package io.vertx.clickhouse.clickhousenative; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 7390ea7f9e..2febe2d24e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.spi; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 3d9725e0a9..74777ea403 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhouse.clickhousenative.impl.codec.columns; import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 19b61560d6..af93af3e82 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 8291a5b32d..b4de30bae9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 33d6fae551..50b0089d52 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index ac100a4556..fc3bc3b919 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 7eea72ecaf..7bfc4c23d0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 9df9d02072..d2f18a5b8a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index 1b14fa83f1..422abefc4f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import java.util.List; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index 09b83adcdc..4c6003407a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; public class Sleep { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 6ddc86d390..934b5ba1e8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 775d483d28..cf06a87d82 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 739eb756d1..607713c4c5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index f3d7b8b1e4..1401d096cf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index f22a1765aa..7d44a56566 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index f84dc7bc28..69a57f5e70 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 1aad85076a..30fb8dea8f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index af927fd2ec..00f526a377 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 950e549c29..7256969ea2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index 90a942a18f..b91dbdf796 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index 8a391480e8..a249ea40d7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 3650819ffa..41336cab9c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index cc16708ba8..92ba326274 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index b7b64127aa..933b18aaf0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index ff13539fda..bcb88838f7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index a3a930efd3..5036fdccf0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index c644d4503c..b6b2216351 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index 41a90a6529..fe5dfe496c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 9e906096bc..aec6c33e32 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 986b91a448..88c3ebe81f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index 49cbdd84eb..fc7d691c56 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 0762242de2..871f1d857d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 360c60d135..274731a4d9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 6ef1d16b5d..7d9fade741 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 0944ec554b..0e5d953617 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 9fe684a4c4..0ec278ac31 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index c20c8fad4f..f98dfb9d15 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; enum TestEnum { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 1d8f4b13ba..11f25c4a8e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index 0d713e4c54..d958278b56 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 9c1da11c66..5d735592c8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 3dfb212907..8247a34569 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 90c3db931e..386af7c1cf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index e88cfce956..fe3afcf766 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index b83718ea65..87bf116630 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 8b38533fbd..0f3645ac63 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index c639df7e31..7ae68c6b39 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 0f64148a5a..7fcb56d0a7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 45d123485b..1f25aac777 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 23ecf9ebd5..512d8fa314 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index 278295c28c..a10b69620c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index efa4d51357..4a1c22d826 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index 81d98fbd51..dbc32b4918 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 63852d20a7..63a1209176 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index 87d7d4fff6..f1aa95e226 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 03c96c1f4b..9a6d5a035b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index be93099659..b16109fd65 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index 729ee568da..37bd3902d3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 2e7686d2a7..851e199ca6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhousenativeclient.ClickhouseResource; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index 280a9b2bb5..b950b8ae8d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,3 +1,16 @@ +/* + * + * * Copyright (c) 2021 Vladimir Vishnevsky + * * + * * This program and the accompanying materials are made available under the + * * terms of the Eclipse Public License 2.0 which is available at + * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * * + * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + package io.vertx.clickhousenativeclient.tck; import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; From 4c7cb93b39938f050312b02dc81049eac123deed Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 13:56:44 +0300 Subject: [PATCH 149/176] fixed copyright headers Signed-off-by: vladimir --- .../ClickhouseNativeConnectOptionsConverter.java | 16 ++++++++-------- .../main/java/examples/SqlClientExamples.java | 16 ++++++++-------- .../clickhousenative/ClickhouseConstants.java | 16 ++++++++-------- .../ClickhouseNativeConnectOptions.java | 16 ++++++++-------- .../ClickhouseNativeConnection.java | 16 ++++++++-------- .../clickhousenative/ClickhouseNativePool.java | 16 ++++++++-------- .../clickhousenative/impl/BaseBlock.java | 16 ++++++++-------- .../clickhousenative/impl/BlockInfo.java | 16 ++++++++-------- .../impl/ClickhouseNativeConnectionFactory.java | 16 ++++++++-------- .../impl/ClickhouseNativeConnectionImpl.java | 16 ++++++++-------- .../ClickhouseNativeConnectionUriParser.java | 16 ++++++++-------- .../impl/ClickhouseNativeDatabaseMetadata.java | 16 ++++++++-------- .../impl/ClickhouseNativePoolImpl.java | 16 ++++++++-------- .../impl/ClickhouseNativeRowDesc.java | 16 ++++++++-------- .../impl/ClickhouseNativeRowImpl.java | 16 ++++++++-------- .../impl/ClickhouseNativeSocketConnection.java | 16 ++++++++-------- .../impl/ClickhouseServerException.java | 16 ++++++++-------- .../impl/ColumnOrientedBlock.java | 16 ++++++++-------- .../clickhousenative/impl/RowOrientedBlock.java | 16 ++++++++-------- .../impl/codec/BlockStreamProfileInfo.java | 16 ++++++++-------- .../impl/codec/BlockStreamProfileInfoReader.java | 16 ++++++++-------- .../impl/codec/ByteBufUtils.java | 16 ++++++++-------- .../impl/codec/ClickhouseExceptionReader.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeCodec.java | 16 ++++++++-------- .../codec/ClickhouseNativeColumnDescriptor.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeCommandCodec.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeDecoder.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeEncoder.java | 16 ++++++++-------- .../impl/codec/ClickhouseNativeParamDesc.java | 16 ++++++++-------- .../codec/ClickhouseNativePreparedStatement.java | 16 ++++++++-------- .../ClickhouseNativeQueryCommandBaseCodec.java | 16 ++++++++-------- .../impl/codec/ClickhouseStreamDataSink.java | 16 ++++++++-------- .../impl/codec/ClickhouseStreamDataSource.java | 16 ++++++++-------- .../clickhousenative/impl/codec/ClientInfo.java | 16 ++++++++-------- .../impl/codec/ClientPacketTypes.java | 16 ++++++++-------- .../impl/codec/CloseConnectionCommandCodec.java | 16 ++++++++-------- .../impl/codec/CloseCursorCommandCodec.java | 16 ++++++++-------- .../impl/codec/CloseStatementCommandCodec.java | 16 ++++++++-------- .../impl/codec/ColumnOrientedBlockReader.java | 16 ++++++++-------- .../clickhousenative/impl/codec/Compression.java | 16 ++++++++-------- .../impl/codec/DatabaseMetadataReader.java | 16 ++++++++-------- .../impl/codec/ExtendedQueryCommandCodec.java | 16 ++++++++-------- .../impl/codec/InitCommandCodec.java | 16 ++++++++-------- .../impl/codec/Lz4ClickhouseStreamDataSink.java | 16 ++++++++-------- .../codec/Lz4ClickhouseStreamDataSource.java | 16 ++++++++-------- .../impl/codec/MultistringMessageReader.java | 16 ++++++++-------- .../clickhousenative/impl/codec/PacketForge.java | 16 ++++++++-------- .../impl/codec/PacketReader.java | 16 ++++++++-------- .../impl/codec/PrepareStatementCodec.java | 16 ++++++++-------- .../clickhousenative/impl/codec/QueryInfo.java | 16 ++++++++-------- .../impl/codec/QueryParsers.java | 16 ++++++++-------- .../impl/codec/QueryProcessingStage.java | 16 ++++++++-------- .../impl/codec/QueryProgressInfo.java | 16 ++++++++-------- .../impl/codec/QueryProgressInfoReader.java | 16 ++++++++-------- .../impl/codec/RawClickhouseStreamDataSink.java | 16 ++++++++-------- .../codec/RawClickhouseStreamDataSource.java | 16 ++++++++-------- .../impl/codec/RowResultDecoder.java | 16 ++++++++-------- .../impl/codec/ServerPacketType.java | 16 ++++++++-------- .../impl/codec/SimpleQueryCommandCodec.java | 16 ++++++++-------- .../impl/codec/TableColumns.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumn.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/ArrayColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/ClickhouseColumn.java | 16 ++++++++-------- .../codec/columns/ClickhouseColumnReader.java | 16 ++++++++-------- .../codec/columns/ClickhouseColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/ClickhouseColumns.java | 16 ++++++++-------- .../impl/codec/columns/ColumnUtils.java | 16 ++++++++-------- .../impl/codec/columns/DateColumn.java | 16 ++++++++-------- .../impl/codec/columns/DateColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/DateColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/DateTime64Column.java | 16 ++++++++-------- .../codec/columns/DateTime64ColumnReader.java | 16 ++++++++-------- .../codec/columns/DateTime64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumn.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/DateTimeColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Decimal128Column.java | 16 ++++++++-------- .../impl/codec/columns/Decimal256Column.java | 16 ++++++++-------- .../impl/codec/columns/Decimal32Column.java | 16 ++++++++-------- .../codec/columns/Decimal32ColumnReader.java | 16 ++++++++-------- .../codec/columns/Decimal32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Decimal64Column.java | 16 ++++++++-------- .../codec/columns/Decimal64ColumnReader.java | 16 ++++++++-------- .../codec/columns/Decimal64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Enum16Column.java | 16 ++++++++-------- .../impl/codec/columns/Enum16ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Enum16ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Enum8Column.java | 16 ++++++++-------- .../impl/codec/columns/Enum8ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Enum8ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnDecoder.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnEncoder.java | 16 ++++++++-------- .../impl/codec/columns/EnumColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/EnumResolutionMethod.java | 16 ++++++++-------- .../impl/codec/columns/FixedStringColumn.java | 16 ++++++++-------- .../codec/columns/FixedStringColumnReader.java | 16 ++++++++-------- .../codec/columns/FixedStringColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Float32Column.java | 16 ++++++++-------- .../impl/codec/columns/Float32ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Float32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Float64Column.java | 16 ++++++++-------- .../impl/codec/columns/Float64ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Float64ColumnWriter.java | 16 ++++++++-------- .../columns/GenericDecimalColumnReader.java | 16 ++++++++-------- .../columns/GenericDecimalColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IPv4Column.java | 16 ++++++++-------- .../impl/codec/columns/IPv4ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/IPv4ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IPv6Column.java | 16 ++++++++-------- .../impl/codec/columns/IPv6ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/IPv6ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Int128Column.java | 16 ++++++++-------- .../impl/codec/columns/Int128ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/Int128ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/IntervalColumn.java | 16 ++++++++-------- .../impl/codec/columns/IntervalColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/LowCardinalityColumn.java | 16 ++++++++-------- .../columns/LowCardinalityColumnReader.java | 16 ++++++++-------- .../columns/LowCardinalityColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/PairedIterator.java | 16 ++++++++-------- .../impl/codec/columns/StringCache.java | 16 ++++++++-------- .../impl/codec/columns/StringColumn.java | 16 ++++++++-------- .../impl/codec/columns/StringColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/StringColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/Triplet.java | 16 ++++++++-------- .../impl/codec/columns/UInt16Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt16ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt16ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt32Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt32ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt32ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt64Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt64ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt64ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UInt8Column.java | 16 ++++++++-------- .../impl/codec/columns/UInt8ColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UInt8ColumnWriter.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumn.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumnReader.java | 16 ++++++++-------- .../impl/codec/columns/UUIDColumnWriter.java | 16 ++++++++-------- .../clickhousenative/package-info.java | 16 ++++++++-------- .../spi/ClickhouseNativeDriver.java | 16 ++++++++-------- .../columns/ClickhouseColumnsTestReader.java | 16 ++++++++-------- .../clickhousenativeclient/ArraySerDesTest.java | 16 ++++++++-------- .../BasicClickhouseTest.java | 16 ++++++++-------- .../ClickhouseResource.java | 16 ++++++++-------- .../ExtendedClickhouseTest.java | 16 ++++++++-------- .../NestedExceptionsTest.java | 16 ++++++++-------- .../PacketReaderReplayTest.java | 16 ++++++++-------- .../vertx/clickhousenativeclient/PacketUtil.java | 16 ++++++++-------- .../io/vertx/clickhousenativeclient/Sleep.java | 16 ++++++++-------- .../clickhousenativeclient/SpecialTypesTest.java | 16 ++++++++-------- .../alltypes/AllTypesBase.java | 16 ++++++++-------- .../alltypes/BlobTest.java | 16 ++++++++-------- .../alltypes/DateTest.java | 16 ++++++++-------- .../alltypes/DateTime64Test.java | 16 ++++++++-------- .../alltypes/DateTimeTest.java | 16 ++++++++-------- .../alltypes/Decimal128Test.java | 16 ++++++++-------- .../alltypes/Decimal256Test.java | 16 ++++++++-------- .../alltypes/Decimal32Test.java | 16 ++++++++-------- .../alltypes/Decimal64Test.java | 16 ++++++++-------- .../alltypes/Enum16Test.java | 16 ++++++++-------- .../alltypes/Enum8Test.java | 16 ++++++++-------- .../alltypes/EnumTest.java | 16 ++++++++-------- .../alltypes/FixedStringTest.java | 16 ++++++++-------- .../alltypes/Float32Test.java | 16 ++++++++-------- .../alltypes/Float64Test.java | 16 ++++++++-------- .../alltypes/HugeDecimalTest.java | 16 ++++++++-------- .../alltypes/IPv4Test.java | 16 ++++++++-------- .../alltypes/IPv6Test.java | 16 ++++++++-------- .../alltypes/Int128Test.java | 16 ++++++++-------- .../alltypes/Int16Test.java | 16 ++++++++-------- .../alltypes/Int32Test.java | 16 ++++++++-------- .../alltypes/Int64Test.java | 16 ++++++++-------- .../alltypes/Int8Test.java | 16 ++++++++-------- .../alltypes/StringArrayDeduplicationTester.java | 16 ++++++++-------- .../alltypes/StringTest.java | 16 ++++++++-------- .../alltypes/TestEnum.java | 16 ++++++++-------- .../alltypes/UInt16Test.java | 16 ++++++++-------- .../alltypes/UInt32Test.java | 16 ++++++++-------- .../alltypes/UInt64Test.java | 16 ++++++++-------- .../alltypes/UInt8Test.java | 16 ++++++++-------- .../alltypes/UUIDTest.java | 16 ++++++++-------- ...ClickhouseNativeBinaryDataTypeDecodeTest.java | 16 ++++++++-------- ...ClickhouseNativeBinaryDataTypeEncodeTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeCollectorTest.java | 16 ++++++++-------- .../ClickhouseNativeConnectionAutoRetryTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeConnectionTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeDriverTest.java | 16 ++++++++-------- .../tck/ClickhouseNativePreparedBatchTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryCachedTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryPooledTest.java | 16 ++++++++-------- .../tck/ClickhouseNativePreparedQueryTest.java | 16 ++++++++-------- .../ClickhouseNativePreparedQueryTestBase.java | 16 ++++++++-------- .../ClickhouseNativeSimpleQueryPooledTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeSimpleQueryTest.java | 16 ++++++++-------- .../ClickhouseNativeTextDataTypeDecodeTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeTracingTest.java | 16 ++++++++-------- .../tck/ClickhouseNativeTransactionTest.java | 16 ++++++++-------- .../clickhousenativeclient/tck/ClientConfig.java | 16 ++++++++-------- 201 files changed, 1608 insertions(+), 1608 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index fc77dd0df5..3a508f4f43 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 26799d3398..8412897915 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 81f277e812..447796872d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index 636fc4e3f0..d7499e96a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index be1dadb5e9..0519fb554f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index abd5db422d..b1a4cf9b93 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 88a284ad42..081132f487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index bf8073f05c..422f9e0af1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index 40699a8a47..eb4af9617f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index cfdc84b462..d244191676 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index 9697b2048b..c8acce9112 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index b5c2ce62f1..6477ee66f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index ae281664be..d53eed75d8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index aef9348e25..ef556499ad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 5fbec9418e..5c7c6bbeba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index a1cb5aca1a..ef42d33162 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index eebf9baa88..4b3e180187 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index e152bb304a..4b014f04fc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index c8b69146ee..f427a296d1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index ea375135c2..1900d6e0d3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index f67439f05e..e3fd1c969a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 51fe00109f..eff1b25ff5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 6c143ba40d..52026be5e4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index c33471b071..5f267be345 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index dada2f56c8..b4c9fef85b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index dcf63afaf3..ca8ff5b369 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 471e817fa4..45ac6d6e20 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index 96a21e2dd5..ffa3e1636e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index 6b3dad2ace..98689ca7b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 2273b27d85..05e7b4e358 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index b4ce000302..899c9174f3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index b23e4993ef..dcc1ea24d8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index bcff1eab4c..8bd578260a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index 5f171753df..f4ed184547 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index 88a06156b4..e62ce0fe15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 3f3b47c457..0d33604dd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index 2e1f1dc0f8..f8a7306437 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 458b633d40..2ada23c3bd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index a70bbb7c24..3f4398f83c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 8b6277255f..6ae0c92b2b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index a1a93d8fcd..366c4872cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index bde082a2de..d07ea250ea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6d9a373925..6a75185685 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index 21add78db7..bd5ba75597 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 5318691c05..9c255b613d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index c71df439c6..cabd73ee2e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index b0d494ac07..132f2b2994 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index 4d3b9842c8..ba7319651d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 64d2074fa2..28976e42e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index c1dca7ef98..9ac72d5aaa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index d327ec6b4e..d8bb90a04e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 6cc34c3b5c..040e5aa0ce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 50c355abcb..71df943414 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 5089af0fc7..49b47faf1a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 453321cbf5..1140e935b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 3dd7a18a99..2bc8d3c308 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 8202e827cd..1030307d4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index f23402d174..94631a3b96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 4ff3b8be1f..67a075b802 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index 805fbdc4af..862fed86f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index ec7b7936ce..1d4bd590a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index 7b03eb30c2..d87bbc97f1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 070c7fbaa5..8bb94f2e2f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 297d97c826..1653990c4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index a5c47f8ed6..6047a4ed7e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index f78bd559b6..c554daaef3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 475183899e..10d6e08d15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 1b5b6b7a96..9792ab7316 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index 43385870e7..e6a8b63be6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index 7fa7cf29bc..d48f9e8c15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index ba962c523c..5d558c1c95 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index bd3b33efc3..26e7abe751 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index e9363dba5d..6c7fcf85e1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index e97a3567bb..cb7670bc64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 53e9d00691..8fb09c57f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 97a5d2fa3b..81d549ba14 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index 5b20c82c5b..e8c54f3886 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 113ad3ce5c..96394ee88f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index 483a30a4b0..c0d02744b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index b9feb60b3d..9d9fef1279 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 04d684d7a7..5fd7813762 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index bb33b8159d..ee8d143371 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index 2b1af0c965..ef26fb016b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 8aaa9e6497..002f888df7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index 0ec2844717..9fb801a411 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index b3655543ed..252d32e59a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 54429ae13a..cd1858ba3c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index 38158d1228..fc0b0acd33 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index bf7f94b4a2..79d238ba00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index a73f5fa7af..05816ef063 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index d8fdec966f..377c5b90aa 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 1e43af25e2..6449f61f9f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index e3f2443690..65f65d60ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 408acc5c66..50d81decb4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index c2bd4b15c9..94c5e1708a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 02b4809f1c..03656a2092 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 24e8c5f8e9..aed3f93e5a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 2733ff745f..85f488c603 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 10309abb9a..771fe5e89a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index 173a6f9da5..dc6b56b4bf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index de449814f0..50bea1b80f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index c65428dd79..34f6012eb5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index ca758f5f06..b978b9e857 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index b0d4d913b5..4a188aa81e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index ba9a701a9e..1bea6358a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index 5f66f6cb8a..b0304c70ad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 426c8dc947..09d55f7bca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index 35233d8f76..d2a86628dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index fbad1e1642..d7db385822 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index a76a187e50..9ac5a4852a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index bd4dfadcfe..d60c548af2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index daaaf28f26..6d7c1ed7c9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index fd3147740a..52b1b34c54 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 2d3f78afee..25da0384b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index 6fab61d2c5..d1bb15e06e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index 860db23bf9..feef2e04f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 42ee563d90..5f9bb6f83d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index d5ac24ef9b..d8bc625e8a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 322b122f94..7cd7c1cb4b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index b73def29f9..68e19edc5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index a2c7214266..5d7b54cbac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 5234b5603b..346eaa2e3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index 0a07fe6a4c..a6a125436e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 3948bd4827..91f2cff560 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 7dee4b30b4..4ac5893eff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index cb09672e25..75ab2fdc66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 4e0c552320..2bd6e09775 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 34c6af0dcf..e4f3e7bb34 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index 419dca2d46..e34cb37701 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index a0df15f820..551861378d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index e435482e4f..dcc6aa5bc4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index afb8c4ff4f..8d90064ac4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index af179b9893..3350d79eac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 1641943e5b..c0d3c68953 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index df953dff88..adad2965ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 0757436dd1..50f89050c8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 6edd37239b..42af4cb970 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 03d6275964..48fc588432 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 3da9601e59..0a9a863d73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 6c3289bc4d..034014615a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index 160333239c..68a62b3842 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index f72263172b..c93d02efc1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 2febe2d24e..803603e786 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 74777ea403..490479de28 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index af93af3e82..718f49035a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index b4de30bae9..50af18f46a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 50b0089d52..67cb255972 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index fc3bc3b919..cef52728a6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 7bfc4c23d0..07808e3b7a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index d2f18a5b8a..94c8a6d034 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index 422abefc4f..a7a5fbd989 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index 4c6003407a..e5eb8dfd4f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index 934b5ba1e8..cd26259235 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index cf06a87d82..20fffd4aba 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index 607713c4c5..cc4fb4f6e8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 1401d096cf..8dfa8b4d22 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index 7d44a56566..d736c1c673 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 69a57f5e70..46957e6d81 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 30fb8dea8f..68efd4de03 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index 00f526a377..a72bbc1cf1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 7256969ea2..0433e2da62 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index b91dbdf796..ad7462a44f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index a249ea40d7..dbeba20fde 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index 41336cab9c..a41b88e108 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index 92ba326274..61b736f296 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 933b18aaf0..81381c65fc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index bcb88838f7..bbaeedcf99 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 5036fdccf0..4113490551 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index b6b2216351..c238d363a1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index fe5dfe496c..ed17a154ec 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index aec6c33e32..967466a2f1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 88c3ebe81f..42699de302 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index fc7d691c56..eae545be41 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 871f1d857d..36d498c360 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 274731a4d9..25cbe1d960 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 7d9fade741..582fbfb753 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 0e5d953617..3854c515a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 0ec278ac31..073689a34c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index f98dfb9d15..a3c47513a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 11f25c4a8e..4c2a0fff0c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index d958278b56..586164c527 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index 5d735592c8..aabdf21966 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 8247a34569..1b9a6a1d0b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 386af7c1cf..4b2a92c40e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index fe3afcf766..11bceefacb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 87bf116630..94e06939d5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 0f3645ac63..1b96cf7e88 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index 7ae68c6b39..777f7cbcfc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 7fcb56d0a7..57e391722f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 1f25aac777..254a0400f9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 512d8fa314..5090761e69 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index a10b69620c..dbd75309b8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index 4a1c22d826..f7dadefea0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index dbc32b4918..433bdcca54 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 63a1209176..16cab389b1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index f1aa95e226..878d55d5a8 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 9a6d5a035b..6984b42b1d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index b16109fd65..52dd6fdf84 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index 37bd3902d3..b3f1c03920 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 851e199ca6..3cadca516b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index b950b8ae8d..20353f27f1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,13 +1,13 @@ /* * - * * Copyright (c) 2021 Vladimir Vishnevsky - * * - * * This program and the accompanying materials are made available under the - * * terms of the Eclipse Public License 2.0 which is available at - * * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * * - * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * Copyright (c) 2021 Vladimir Vishnevsky + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 * */ From 75cdc8a9d36f0defac4c192eba8471714f2e3997 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 10 Apr 2021 18:04:25 +0300 Subject: [PATCH 150/176] fixed copyright headers, reworked array to use int[] arrays as slices Signed-off-by: vladimir --- ...ickhouseNativeConnectOptionsConverter.java | 2 +- .../main/java/examples/SqlClientExamples.java | 2 +- .../clickhousenative/ClickhouseConstants.java | 2 +- .../ClickhouseNativeConnectOptions.java | 2 +- .../ClickhouseNativeConnection.java | 2 +- .../ClickhouseNativePool.java | 2 +- .../clickhousenative/impl/BaseBlock.java | 2 +- .../clickhousenative/impl/BlockInfo.java | 2 +- .../ClickhouseNativeConnectionFactory.java | 2 +- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../ClickhouseNativeConnectionUriParser.java | 2 +- .../ClickhouseNativeDatabaseMetadata.java | 2 +- .../impl/ClickhouseNativePoolImpl.java | 2 +- .../impl/ClickhouseNativeRowDesc.java | 2 +- .../impl/ClickhouseNativeRowImpl.java | 2 +- .../ClickhouseNativeSocketConnection.java | 2 +- .../impl/ClickhouseServerException.java | 2 +- .../impl/ColumnOrientedBlock.java | 2 +- .../impl/RowOrientedBlock.java | 2 +- .../impl/codec/BlockStreamProfileInfo.java | 2 +- .../codec/BlockStreamProfileInfoReader.java | 2 +- .../impl/codec/ByteBufUtils.java | 2 +- .../impl/codec/ClickhouseExceptionReader.java | 2 +- .../impl/codec/ClickhouseNativeCodec.java | 2 +- .../ClickhouseNativeColumnDescriptor.java | 2 +- .../codec/ClickhouseNativeCommandCodec.java | 2 +- .../impl/codec/ClickhouseNativeDecoder.java | 2 +- .../impl/codec/ClickhouseNativeEncoder.java | 2 +- .../impl/codec/ClickhouseNativeParamDesc.java | 2 +- .../ClickhouseNativePreparedStatement.java | 2 +- ...ClickhouseNativeQueryCommandBaseCodec.java | 2 +- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 2 +- .../impl/codec/ClientInfo.java | 2 +- .../impl/codec/ClientPacketTypes.java | 2 +- .../codec/CloseConnectionCommandCodec.java | 2 +- .../impl/codec/CloseCursorCommandCodec.java | 2 +- .../codec/CloseStatementCommandCodec.java | 2 +- .../impl/codec/ColumnOrientedBlockReader.java | 2 +- .../impl/codec/Compression.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 2 +- .../impl/codec/ExtendedQueryCommandCodec.java | 2 +- .../impl/codec/InitCommandCodec.java | 2 +- .../codec/Lz4ClickhouseStreamDataSink.java | 2 +- .../codec/Lz4ClickhouseStreamDataSource.java | 2 +- .../impl/codec/MultistringMessageReader.java | 2 +- .../impl/codec/PacketForge.java | 2 +- .../impl/codec/PacketReader.java | 2 +- .../impl/codec/PrepareStatementCodec.java | 2 +- .../impl/codec/QueryInfo.java | 2 +- .../impl/codec/QueryParsers.java | 2 +- .../impl/codec/QueryProcessingStage.java | 2 +- .../impl/codec/QueryProgressInfo.java | 2 +- .../impl/codec/QueryProgressInfoReader.java | 2 +- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../codec/RawClickhouseStreamDataSource.java | 2 +- .../impl/codec/RowResultDecoder.java | 2 +- .../impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 2 +- .../impl/codec/TableColumns.java | 2 +- .../impl/codec/columns/ArrayColumn.java | 2 +- .../impl/codec/columns/ArrayColumnReader.java | 103 +++++++++--------- .../impl/codec/columns/ArrayColumnWriter.java | 2 +- .../codec/columns/ArrayIntPairIterator.java | 45 ++++++++ .../impl/codec/columns/ClickhouseColumn.java | 2 +- .../codec/columns/ClickhouseColumnReader.java | 2 +- .../codec/columns/ClickhouseColumnWriter.java | 2 +- .../impl/codec/columns/ClickhouseColumns.java | 2 +- .../impl/codec/columns/ColumnUtils.java | 2 +- .../impl/codec/columns/DateColumn.java | 2 +- .../impl/codec/columns/DateColumnReader.java | 2 +- .../impl/codec/columns/DateColumnWriter.java | 2 +- .../impl/codec/columns/DateTime64Column.java | 2 +- .../codec/columns/DateTime64ColumnReader.java | 2 +- .../codec/columns/DateTime64ColumnWriter.java | 2 +- .../impl/codec/columns/DateTimeColumn.java | 2 +- .../codec/columns/DateTimeColumnReader.java | 2 +- .../codec/columns/DateTimeColumnWriter.java | 2 +- .../impl/codec/columns/Decimal128Column.java | 2 +- .../impl/codec/columns/Decimal256Column.java | 2 +- .../impl/codec/columns/Decimal32Column.java | 2 +- .../codec/columns/Decimal32ColumnReader.java | 2 +- .../codec/columns/Decimal32ColumnWriter.java | 2 +- .../impl/codec/columns/Decimal64Column.java | 2 +- .../codec/columns/Decimal64ColumnReader.java | 2 +- .../codec/columns/Decimal64ColumnWriter.java | 2 +- .../impl/codec/columns/Enum16Column.java | 2 +- .../codec/columns/Enum16ColumnReader.java | 2 +- .../codec/columns/Enum16ColumnWriter.java | 2 +- .../impl/codec/columns/Enum8Column.java | 2 +- .../impl/codec/columns/Enum8ColumnReader.java | 2 +- .../impl/codec/columns/Enum8ColumnWriter.java | 2 +- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 2 +- .../columns/FixedStringColumnReader.java | 2 +- .../columns/FixedStringColumnWriter.java | 2 +- .../impl/codec/columns/Float32Column.java | 2 +- .../codec/columns/Float32ColumnReader.java | 2 +- .../codec/columns/Float32ColumnWriter.java | 2 +- .../impl/codec/columns/Float64Column.java | 2 +- .../codec/columns/Float64ColumnReader.java | 2 +- .../codec/columns/Float64ColumnWriter.java | 2 +- .../columns/GenericDecimalColumnReader.java | 2 +- .../columns/GenericDecimalColumnWriter.java | 2 +- .../impl/codec/columns/IPv4Column.java | 2 +- .../impl/codec/columns/IPv4ColumnReader.java | 2 +- .../impl/codec/columns/IPv4ColumnWriter.java | 2 +- .../impl/codec/columns/IPv6Column.java | 2 +- .../impl/codec/columns/IPv6ColumnReader.java | 2 +- .../impl/codec/columns/IPv6ColumnWriter.java | 2 +- .../impl/codec/columns/Int128Column.java | 2 +- .../codec/columns/Int128ColumnReader.java | 2 +- .../codec/columns/Int128ColumnWriter.java | 2 +- .../impl/codec/columns/IntPairIterator.java | 43 ++++++++ .../impl/codec/columns/IntervalColumn.java | 2 +- .../codec/columns/IntervalColumnReader.java | 2 +- .../codec/columns/ListPairedIterator.java | 40 +++++++ .../codec/columns/LowCardinalityColumn.java | 2 +- .../columns/LowCardinalityColumnReader.java | 2 +- .../columns/LowCardinalityColumnWriter.java | 2 +- .../impl/codec/columns/PairedIterator.java | 40 +++---- .../impl/codec/columns/StringCache.java | 2 +- .../impl/codec/columns/StringColumn.java | 2 +- .../codec/columns/StringColumnReader.java | 2 +- .../codec/columns/StringColumnWriter.java | 2 +- .../impl/codec/columns/Triplet.java | 2 +- .../impl/codec/columns/UInt16Column.java | 2 +- .../codec/columns/UInt16ColumnReader.java | 2 +- .../codec/columns/UInt16ColumnWriter.java | 2 +- .../impl/codec/columns/UInt32Column.java | 2 +- .../codec/columns/UInt32ColumnReader.java | 2 +- .../codec/columns/UInt32ColumnWriter.java | 2 +- .../impl/codec/columns/UInt64Column.java | 2 +- .../codec/columns/UInt64ColumnReader.java | 2 +- .../codec/columns/UInt64ColumnWriter.java | 2 +- .../impl/codec/columns/UInt8Column.java | 2 +- .../impl/codec/columns/UInt8ColumnReader.java | 2 +- .../impl/codec/columns/UInt8ColumnWriter.java | 2 +- .../impl/codec/columns/UUIDColumn.java | 2 +- .../impl/codec/columns/UUIDColumnReader.java | 2 +- .../impl/codec/columns/UUIDColumnWriter.java | 2 +- .../clickhousenative/package-info.java | 2 +- .../spi/ClickhouseNativeDriver.java | 2 +- .../columns/ClickhouseColumnsTestReader.java | 2 +- .../ArraySerDesTest.java | 2 +- .../BasicClickhouseTest.java | 2 +- .../ClickhouseResource.java | 2 +- .../ExtendedClickhouseTest.java | 2 +- .../NestedExceptionsTest.java | 2 +- .../PacketReaderReplayTest.java | 2 +- .../clickhousenativeclient/PacketUtil.java | 2 +- .../vertx/clickhousenativeclient/Sleep.java | 2 +- .../SpecialTypesTest.java | 2 +- .../alltypes/AllTypesBase.java | 2 +- .../alltypes/BlobTest.java | 2 +- .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 2 +- .../alltypes/Enum8Test.java | 2 +- .../alltypes/EnumTest.java | 2 +- .../alltypes/FixedStringTest.java | 2 +- .../alltypes/Float32Test.java | 2 +- .../alltypes/Float64Test.java | 2 +- .../alltypes/HugeDecimalTest.java | 2 +- .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 2 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 2 +- .../alltypes/Int32Test.java | 2 +- .../alltypes/Int64Test.java | 2 +- .../alltypes/Int8Test.java | 2 +- .../StringArrayDeduplicationTester.java | 2 +- .../alltypes/StringTest.java | 2 +- .../alltypes/TestEnum.java | 2 +- .../alltypes/UInt16Test.java | 2 +- .../alltypes/UInt32Test.java | 2 +- .../alltypes/UInt64Test.java | 2 +- .../alltypes/UInt8Test.java | 2 +- .../alltypes/UUIDTest.java | 2 +- ...ckhouseNativeBinaryDataTypeDecodeTest.java | 2 +- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 2 +- .../tck/ClickhouseNativeCollectorTest.java | 2 +- ...ickhouseNativeConnectionAutoRetryTest.java | 2 +- .../tck/ClickhouseNativeConnectionTest.java | 2 +- .../tck/ClickhouseNativeDriverTest.java | 2 +- .../ClickhouseNativePreparedBatchTest.java | 2 +- ...ickhouseNativePreparedQueryCachedTest.java | 2 +- ...ickhouseNativePreparedQueryPooledTest.java | 2 +- .../ClickhouseNativePreparedQueryTest.java | 2 +- ...ClickhouseNativePreparedQueryTestBase.java | 2 +- ...ClickhouseNativeSimpleQueryPooledTest.java | 2 +- .../tck/ClickhouseNativeSimpleQueryTest.java | 2 +- ...lickhouseNativeTextDataTypeDecodeTest.java | 2 +- .../tck/ClickhouseNativeTracingTest.java | 2 +- .../tck/ClickhouseNativeTransactionTest.java | 2 +- .../tck/ClientConfig.java | 2 +- 204 files changed, 395 insertions(+), 274 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java create mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 3a508f4f43..92fdcf397f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 8412897915..4c634d8cdd 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java index 447796872d..94e50719e6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java index d7499e96a1..30ddeb6c00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java index 0519fb554f..91dd9f0029 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index b1a4cf9b93..4e67f117c5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java index 081132f487..3de87a8556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java index 422f9e0af1..2d0a2f11fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index eb4af9617f..b85aadf24a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index d244191676..20359a0887 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java index c8acce9112..b5ca1177a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java index 6477ee66f6..09a00fa99e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index d53eed75d8..702f335e2c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java index ef556499ad..75838ca170 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 5c7c6bbeba..43a33ddd23 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index ef42d33162..fdfe2337c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java index 4b3e180187..e915a21225 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseServerException.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java index 4b014f04fc..209beefc31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ColumnOrientedBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java index f427a296d1..162d53a8c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java index 1900d6e0d3..20d00723ed 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java index e3fd1c969a..125b455be7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index eff1b25ff5..8c886401b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 52026be5e4..23d741c23d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java index 5f267be345..fe07e5b9a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java index b4c9fef85b..345eb05e16 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java index ca8ff5b369..ef02f4843d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java index 45ac6d6e20..08b7cea9c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java index ffa3e1636e..4154d71ed1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java index 98689ca7b8..0f4922ab87 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java index 05e7b4e358..32bc02019f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java index 899c9174f3..c85f55cfe1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java index dcc1ea24d8..787dad8205 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java index 8bd578260a..a041808b51 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java index f4ed184547..660576f56b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java index e62ce0fe15..ba9b652a03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java index 0d33604dd5..72d7270798 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java index f8a7306437..ab4641a871 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java index 2ada23c3bd..466516bbd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java index 3f4398f83c..55e91bc56c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java index 6ae0c92b2b..897e1f3218 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 366c4872cf..691dd97b3a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java index d07ea250ea..9d0e3fad1b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java index 6a75185685..47f2bab8dc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java index bd5ba75597..d5a6cde831 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index 9c255b613d..d3d52a809f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index cabd73ee2e..4bf76b36b7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java index 132f2b2994..c3a5b1dad0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketForge.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index ba7319651d..f746820ca1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java index 28976e42e1..91ac21047a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java index 9ac72d5aaa..e4141b6a73 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java index d8bb90a04e..1776043180 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java index 040e5aa0ce..3f58e8f66c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java index 71df943414..ce9805c6ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java index 49b47faf1a..697cece47d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java index 1140e935b8..93cc636fb3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 2bc8d3c308..6d0b708d09 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java index 1030307d4b..3f59f0d182 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java index 94631a3b96..f1b47cbd2f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java index 67a075b802..8898234631 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java index 862fed86f9..387566f487 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java index 1d4bd590a4..2834938b04 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index d87bbc97f1..c150015335 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -16,23 +16,20 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.sql.JDBCType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; import java.util.function.Function; public class ArrayColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); + private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - //TODO: use int[][] and int[][][] as masterSlice and perRowsSlice - private List> masterSlice; - private List>> perRowsSlice; + private int[][] masterSlice; + private int[][][] perRowsSlice; private Integer curDimension; private ClickhouseColumnReader nestedColumnReader; @@ -43,7 +40,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Object statePrefix; private Integer curLevelSliceSize; - private List curLevelSlice; + private int[] curLevelSlice; + + private long sliceElementCount; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); @@ -63,7 +62,7 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - masterSlice = new ArrayList<>(); + masterSlice = new int[columnDescriptor.arrayDimensionsCount() + 1][]; curDimension = 0; nItems = 0; } @@ -128,7 +127,7 @@ protected Object getElementInternal(int rowIdx, Class desired) { desired = maybeUnwrapArrayElementType(desired); Class forRecode = desired; Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); - reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice.get(rowIdx), desired); + reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice[rowIdx], desired); return reslicedRet; } } @@ -142,37 +141,37 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Object[] resliceIntoArray(Object[] data, List> sliceToUse, Class elementClass) { + private Object[] resliceIntoArray(Object[] data, int[][] sliceToUse, Class elementClass) { Object[] intermData = data; - for (int i = sliceToUse.size() - 1; i >= 0; --i) { - List slices = sliceToUse.get(i); + for (int i = sliceToUse.length - 1; i >= 0; --i) { + int[] slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } return (Object[]) intermData[0]; } - private Object[] resliceIntoArray(Function dataAccessor, List> sliceToUse, Class elementClass) { - int i = sliceToUse.size() - 1; - List slices = sliceToUse.get(i); + private Object[] resliceIntoArray(Function dataAccessor, int[][] sliceToUse, Class elementClass) { + int i = sliceToUse.length - 1; + int[] slices = sliceToUse[i]; Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); - for (i = sliceToUse.size() - 2; i >= 0; --i) { - slices = sliceToUse.get(i); + for (i = sliceToUse.length - 2; i >= 0; --i) { + slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } return (Object[]) intermData[0]; } - private Object[] resliceArray(Function dataAccessor, List slices, Class upperClass) { - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + private Object[] resliceArray(Function dataAccessor, int[] slices, Class upperClass) { + IntPairIterator paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); + paired.next(); + int newSliceSz = paired.getValue() - paired.getKey(); Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - copyWithAccessor(dataAccessor, slice.getKey(), reslicedArray, 0, newSliceSz); + copyWithAccessor(dataAccessor, paired.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; @@ -188,15 +187,15 @@ private void copyWithAccessor(Function srcAccessor, int srcPos, } } - private Object[] resliceArray(Object[] dataElements, List slices, Class upperClass) { - Iterator> paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.size() - 1); + private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperClass) { + IntPairIterator paired = PairedIterator.of(slices); + Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); int tmpSliceIdx = 0; while (paired.hasNext()) { - Map.Entry slice = paired.next(); - int newSliceSz = slice.getValue() - slice.getKey(); + paired.next(); + int newSliceSz = paired.getValue() - paired.getKey(); Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - System.arraycopy(dataElements, slice.getKey(), reslicedArray, 0, newSliceSz); + System.arraycopy(dataElements, paired.getKey(), reslicedArray, 0, newSliceSz); newDataList[tmpSliceIdx] = reslicedArray; ++tmpSliceIdx; } @@ -205,15 +204,15 @@ private Object[] resliceArray(Object[] dataElements, List slices, Class private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (nRows == 0) { - masterSlice = Collections.emptyList(); - perRowsSlice = Collections.emptyList(); + masterSlice = new int[0][]; + perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; } - perRowsSlice = new ArrayList<>(nRows); + perRowsSlice = new int[nRows][][]; for (int i = 0; i < nRows; ++i) { - perRowsSlice.add(new ArrayList<>()); + perRowsSlice[i] = new int[columnDescriptor.arrayDimensionsCount()][]; } curLevelSliceSize = nRows; while (curDimension < columnDescriptor.arrayDimensionsCount()) { @@ -226,22 +225,22 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (curDimension == 0) { rowSliceElementsToReadAtDimension = 1; } else { - List rowSliceAtPrevDimension = perRowsSlice.get(rowIdx).get(curDimension - 1); - rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension.get(rowSliceAtPrevDimension.size() - 1) - rowSliceAtPrevDimension.get(0); + int[] rowSliceAtPrevDimension = perRowsSlice[rowIdx][curDimension - 1]; + rowSliceElementsToReadAtDimension = rowSliceAtPrevDimension[rowSliceAtPrevDimension.length - 1] - rowSliceAtPrevDimension[0]; } - List rowSliceAtDimension = new ArrayList<>(rowSliceElementsToReadAtDimension + 1); + int[] rowSliceAtDimension = new int[rowSliceElementsToReadAtDimension + 1]; //offsets at last dimension are absolute boolean lastDimension = curDimension == columnDescriptor.arrayDimensionsCount() - 1; int firstElementInSlice = (int) prevSliceElement; - rowSliceAtDimension.add(firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); + rowSliceAtDimension[0] = (firstElementInSlice - (int)(lastDimension ? 0L : firstElementInSlice)); for (int i = 0; i < rowSliceElementsToReadAtDimension; ++i) { prevSliceElement = in.readLongLE(); if (prevSliceElement > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + prevSliceElement + "), max " + Integer.MAX_VALUE); } - rowSliceAtDimension.add((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); + rowSliceAtDimension[i + 1] = ((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); } - perRowsSlice.get(rowIdx).add(rowSliceAtDimension); + perRowsSlice[rowIdx][curDimension] = (rowSliceAtDimension); } ++curDimension; curLevelSliceSize = (int)prevSliceElement; @@ -250,12 +249,13 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { } private void readAsMasterSlice(ClickhouseStreamDataSource in) { - if (masterSlice.isEmpty()) { - masterSlice.add(Arrays.asList(0, nRows)); + if (curDimension == 0) { + //masterSlice.add(Arrays.asList(0, nRows)); + masterSlice[curDimension] = new int[]{0, nRows}; curLevelSliceSize = nRows; } if (nRows == 0) { - perRowsSlice = Collections.emptyList(); + perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; } @@ -263,8 +263,8 @@ private void readAsMasterSlice(ClickhouseStreamDataSource in) { long lastSliceSize = 0; while (curDimension < columnDescriptor.arrayDimensionsCount()) { if (curLevelSlice == null) { - curLevelSlice = new ArrayList<>(curLevelSliceSize + 1); - curLevelSlice.add(0); + curLevelSlice = new int[curLevelSliceSize + 1]; + curLevelSlice[0] = 0; } if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { return; @@ -274,12 +274,13 @@ private void readAsMasterSlice(ClickhouseStreamDataSource in) { if (lastSliceSize > Integer.MAX_VALUE) { throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); } - curLevelSlice.add((int) lastSliceSize); + ++sliceElementCount; + curLevelSlice[curLevelSliceIndex + 1] = (int) lastSliceSize; } - masterSlice.add(curLevelSlice); + curDimension += 1; + masterSlice[curDimension] = curLevelSlice; curLevelSlice = null; curLevelSliceSize = (int) lastSliceSize; - curDimension += 1; } nItems = (int)lastSliceSize; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java index 8bb94f2e2f..9878d74d43 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java new file mode 100644 index 0000000000..242159d97e --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public class ArrayIntPairIterator implements IntPairIterator { + private final int[] src; + private int pos; + + public ArrayIntPairIterator(int[] src) { + this.src = src; + this.pos = -1; + } + + + @Override + public boolean hasNext() { + return pos < src.length - 2; + } + + @Override + public void next() { + ++pos; + } + + @Override + public int getKey() { + return src[pos]; + } + + @Override + public int getValue() { + return src[pos + 1]; + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java index 1653990c4b..ede12a11f9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 6047a4ed7e..189de982a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java index c554daaef3..dbe0daee03 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java index 10d6e08d15..da678db3f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java index 9792ab7316..e27fa6b8f0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java index e6a8b63be6..66e2585958 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index d48f9e8c15..ebbb757bb9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java index 5d558c1c95..53b289adca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java index 26e7abe751..988e20243c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 6c7fcf85e1..1a5e57d8a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java index cb7670bc64..48384cd421 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java index 8fb09c57f0..53e4ee4d96 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index 81d549ba14..f80d369706 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java index e8c54f3886..c377239f08 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java index 96394ee88f..cce44f7e36 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java index c0d02744b6..284c136be7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java index 9d9fef1279..ce45b1a1ba 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index 5fd7813762..dd6bed5f82 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java index ee8d143371..b1a6a877a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java index ef26fb016b..7e9df4f024 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 002f888df7..6d286c2138 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java index 9fb801a411..8f68b0dbcb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java index 252d32e59a..e8b046db0a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index cd1858ba3c..7a3251491f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java index fc0b0acd33..f3353e9500 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java index 79d238ba00..17162b0fcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 05816ef063..02649b12ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java index 377c5b90aa..aaed4cdaea 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java index 6449f61f9f..77ca75f915 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java index 65f65d60ba..96a473ccb0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java index 50d81decb4..552d7da6bb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java index 94c5e1708a..d714ed2324 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java index 03656a2092..04e5ed1842 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index aed3f93e5a..33fc28e965 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java index 85f488c603..ea5d7c5205 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java index 771fe5e89a..3d339a58b6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index dc6b56b4bf..a787cc16ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java index 50bea1b80f..9ace358514 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java index 34f6012eb5..15bf6b50e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index b978b9e857..d774ce74a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java index 4a188aa81e..6a697008ac 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index 1bea6358a7..fbb8dd55d0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java index b0304c70ad..0cbb486f12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java index 09d55f7bca..388dc54fff 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index d2a86628dd..deb8e89b0b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java index d7db385822..5ff5256c4a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java index 9ac5a4852a..7fd2701421 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index d60c548af2..91b9006b43 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java index 6d7c1ed7c9..d1992a865c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java index 52b1b34c54..7e43cbbe07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index 25da0384b5..f301f9dec9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java index d1bb15e06e..27bc846a52 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java new file mode 100644 index 0000000000..ef2877d174 --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java @@ -0,0 +1,43 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +public interface IntPairIterator { + IntPairIterator EMPTY = new IntPairIterator() { + @Override + public boolean hasNext() { + return false; + } + + @Override + public void next() { + throw new IllegalStateException(); + } + + @Override + public int getKey() { + throw new IllegalStateException(); + } + + @Override + public int getValue() { + throw new IllegalStateException(); + } + }; + + boolean hasNext(); + void next(); + int getKey(); + int getValue(); +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java index feef2e04f6..3b179cc9b1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 5f9bb6f83d..85d4394cd7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java new file mode 100644 index 0000000000..120527a9ff --- /dev/null +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java @@ -0,0 +1,40 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhousenative.impl.codec.columns; + +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.Map; + +public class ListPairedIterator implements Iterator> { + private final Iterator wrapped1; + private final Iterator wrapped2; + + public ListPairedIterator(Iterator wrapped1, Iterator wrapped2) { + this.wrapped1 = wrapped1; + this.wrapped2 = wrapped2; + } + + @Override + public boolean hasNext() { + return wrapped1.hasNext() && wrapped2.hasNext(); + } + + @Override + public Map.Entry next() { + T key = wrapped1.next(); + T val = wrapped2.next(); + return new AbstractMap.SimpleEntry<>(key, val); + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java index d8bc625e8a..c2ab321e91 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index 7cd7c1cb4b..a4bdc46591 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java index 68e19edc5f..823506e75b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java index 5d7b54cbac..828661bd29 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -13,34 +13,13 @@ package io.vertx.clickhouse.clickhousenative.impl.codec.columns; -import java.util.AbstractMap; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; -public class PairedIterator implements Iterator> { - private final Iterator wrapped1; - private final Iterator wrapped2; - - private PairedIterator(Iterator wrapped1, Iterator wrapped2) { - this.wrapped1 = wrapped1; - this.wrapped2 = wrapped2; - } - - @Override - public boolean hasNext() { - return wrapped1.hasNext() && wrapped2.hasNext(); - } - - @Override - public Map.Entry next() { - T key = wrapped1.next(); - T val = wrapped2.next(); - return new AbstractMap.SimpleEntry<>(key, val); - } - +public class PairedIterator { public static Iterator> of(List src) { if (src.size() <= 1) { return Collections.emptyIterator(); @@ -48,7 +27,14 @@ public static Iterator> of(List src) { Iterator iter2 = src.iterator(); iter2.next(); - return new PairedIterator<>(src.iterator(), iter2); + return new ListPairedIterator<>(src.iterator(), iter2); + } + + public static IntPairIterator of(int[] src) { + if (src.length <= 1) { + return IntPairIterator.EMPTY; + } + return new ArrayIntPairIterator(src); } public static void main(String[] args) { @@ -57,5 +43,11 @@ public static void main(String[] args) { Map.Entry n = iter.next(); System.err.println(n.getKey() + "; " + n.getValue()); } + + IntPairIterator iter2 = PairedIterator.of(new int[]{1, 2, 3, 4}); + while (iter2.hasNext()) { + iter2.next(); + System.err.println(iter2.getKey() + "; " + iter2.getValue()); + } } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java index 346eaa2e3a..26f023b4b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java index a6a125436e..e4b8936a8d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index 91f2cff560..ac56b69e11 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java index 4ac5893eff..58e472fe9c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java index 75ab2fdc66..636a91c3c7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java index 2bd6e09775..8182ff172f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index e4f3e7bb34..17f1e4ce97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java index e34cb37701..34efca451e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java index 551861378d..03dce40cf1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index dcc6aa5bc4..81ba3c07ee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java index 8d90064ac4..b8c2e04166 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java index 3350d79eac..ff1e010a37 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index c0d3c68953..e8293716a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java index adad2965ec..7480b176c4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java index 50f89050c8..2e98d58ddc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 42af4cb970..047c1109e2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java index 48fc588432..b061c8c76d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java index 0a9a863d73..b505b002d7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 034014615a..5e443e2136 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java index 68a62b3842..9454a93c9f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java index c93d02efc1..af66fd07fd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java index 803603e786..35d994a556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java index 490479de28..becae96044 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 718f49035a..583fa555ca 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 50af18f46a..380ba259e5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 67cb255972..866c0f661d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index cef52728a6..361aa93f5f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 07808e3b7a..9364b88727 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 94c8a6d034..8251d9b552 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java index a7a5fbd989..f53eaf4c47 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java index e5eb8dfd4f..884e90d080 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index cd26259235..c071763cda 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index 20fffd4aba..d1cd0385b6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java index cc4fb4f6e8..f2f8169a0c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 8dfa8b4d22..157a52cf43 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index d736c1c673..15c0635ff4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 46957e6d81..9c6367a5bf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 68efd4de03..9ccf25338f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index a72bbc1cf1..2341a46ac1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 0433e2da62..2ef3994dcc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index ad7462a44f..4d71673796 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java index dbeba20fde..47c9ca9cfd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java index a41b88e108..759125f59b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java index 61b736f296..6bcaad22ae 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java index 81381c65fc..ecfbb6addc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java index bbaeedcf99..9443ee0be6 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java index 4113490551..0df858e0ca 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java index c238d363a1..42c012f2d9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index ed17a154ec..9197f7249c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 967466a2f1..05687f698f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index 42699de302..b8d1c494c4 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java index eae545be41..36b47628e5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java index 36d498c360..a204a07840 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java index 25cbe1d960..9c402df55a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java index 582fbfb753..c1b8a29438 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index 3854c515a8..d8e90bcaa2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java index 073689a34c..46925a0ab9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java index a3c47513a8..1853465c37 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java index 4c2a0fff0c..4434b1dd84 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java index 586164c527..1158e4820c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java index aabdf21966..cec0bd6361 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java index 1b9a6a1d0b..b2e1f87fc7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java index 4b2a92c40e..df8c288eec 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index 11bceefacb..cc9d4d8a2d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 94e06939d5..540ffd626f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java index 1b96cf7e88..1eae44db34 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java index 777f7cbcfc..80ecb15fba 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java index 57e391722f..3341001077 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java index 254a0400f9..7332ce665d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java index 5090761e69..386615fd5c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java index dbd75309b8..7459610c58 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java index f7dadefea0..d0127b306a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java index 433bdcca54..6aead392be 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java index 16cab389b1..676284f29f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java index 878d55d5a8..9345c9ead0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java index 6984b42b1d..cbd8888dfb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index 52dd6fdf84..9c016ccb8e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java index b3f1c03920..bad07a71bd 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index 3cadca516b..bb4c246f55 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index 20353f27f1..bac8b75b43 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2021 Vladimir Vishnevsky + * Copyright (c) 2021 Vladimir Vishnevskii * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at From 57f1d3bd15193423ba34f14a307a2b825c27f560 Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 12 Apr 2021 12:17:17 +0300 Subject: [PATCH 151/176] fixed TODOs in pom.xml Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 80 +++++++++++-------- ...ickhouseNativeConnectOptionsConverter.java | 13 --- .../main/java/examples/SqlClientExamples.java | 1 - .../ClickhouseResource.java | 10 ++- 4 files changed, 54 insertions(+), 50 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index dffb133d29..667aa0cff9 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -36,7 +36,8 @@ ${project.basedir}/src/main/docs ${project.basedir}/src/main/generated - + + 2.14.1 @@ -94,6 +95,48 @@ test + + org.slf4j + slf4j-api + 1.7.30 + test + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-web + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + test + + + + org.apache.logging.log4j + log4j-jul + ${log4j.version} + test + + org.openjdk.jmh @@ -109,7 +152,6 @@ - @@ -119,15 +161,11 @@ -Xmx1024M ${project.build.directory} - ${embedded.postgres.version} + ${embedded.clickhouse.version} ${connection.uri} + ${tls.connection.uri} - ${unix.socket.directory} - ${unix.socket.port} - - io/vertx/pgclient/it/** - @@ -165,32 +203,6 @@ - - maven-failsafe-plugin - 2.21.0 - - - env-test - - integration-test - - integration-test - - - io/vertx/pgclient/it/EnvTest.java - - - test_host - test_database - 1234 - test_user - test_password - require - - - - - diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java index 92fdcf397f..b9db59e66f 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java @@ -1,16 +1,3 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - package io.vertx.clickhouse.clickhousenative; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java index 4c634d8cdd..8d03702338 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java @@ -24,7 +24,6 @@ import java.util.List; @Source -//TODO smagellan: inspect examples public class SqlClientExamples { public void queries01(SqlClient client) { client diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index 866c0f661d..d7cc0539bc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -35,7 +35,7 @@ protected void before() throws Throwable { if (this.server != null) { return; } - DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag("20.10.2"); + DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag(clickhouseVersion()); server = new ClickHouseContainer(imageName); server.start(); this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() @@ -54,6 +54,11 @@ protected void before() throws Throwable { .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug"); } + private static String clickhouseVersion() { + String version = System.getProperty("embedded.clickhouse.version"); + return version == null ? "20.10.2" : version; + } + @Override protected void after() { if (server != null) { @@ -66,7 +71,8 @@ public ClickhouseNativeConnectOptions options() { } public static boolean isTestingWithExternalDatabase() { - return isSystemPropertyValid(connectionUri) || isSystemPropertyValid(tlsConnectionUri); + return isSystemPropertyValid(connectionUri); + //|| isSystemPropertyValid(tlsConnectionUri); } private static boolean isSystemPropertyValid(String systemProperty) { From ad58bce2046e0c67f6c7a8f13c1df4b11b454ac4 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 13 Apr 2021 21:35:15 +0300 Subject: [PATCH 152/176] reworked ArrayColumnReader to support primitive array Signed-off-by: vladimir --- .../impl/codec/columns/ArrayColumnReader.java | 133 +++--------------- .../codec/columns/ClickhouseColumnReader.java | 62 ++++---- .../impl/codec/columns/DateColumnReader.java | 10 ++ .../codec/columns/DateTime64ColumnReader.java | 10 ++ .../codec/columns/DateTimeColumnReader.java | 10 ++ .../codec/columns/Decimal32ColumnReader.java | 10 ++ .../codec/columns/Decimal64ColumnReader.java | 10 ++ .../codec/columns/Enum16ColumnReader.java | 16 +++ .../impl/codec/columns/Enum8ColumnReader.java | 16 +++ .../columns/FixedStringColumnReader.java | 16 +++ .../codec/columns/Float32ColumnReader.java | 9 +- .../codec/columns/Float64ColumnReader.java | 9 +- .../columns/GenericDecimalColumnReader.java | 10 ++ .../impl/codec/columns/IPv4ColumnReader.java | 16 +++ .../impl/codec/columns/IPv6ColumnReader.java | 15 +- .../codec/columns/Int128ColumnReader.java | 10 ++ .../codec/columns/IntervalColumnReader.java | 16 +++ .../columns/LowCardinalityColumnReader.java | 15 +- .../codec/columns/StringColumnReader.java | 16 +++ .../codec/columns/UInt16ColumnReader.java | 27 +++- .../codec/columns/UInt32ColumnReader.java | 27 +++- .../codec/columns/UInt64ColumnReader.java | 25 +++- .../impl/codec/columns/UInt8ColumnReader.java | 21 ++- .../impl/codec/columns/UUIDColumnReader.java | 10 ++ .../src/test/resources/log4j2-test.xml | 14 ++ 25 files changed, 372 insertions(+), 161 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java index c150015335..5de51fb593 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java @@ -19,16 +19,12 @@ import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import java.sql.JDBCType; -import java.util.function.Function; - public class ArrayColumnReader extends ClickhouseColumnReader { private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); private final ClickhouseNativeDatabaseMetadata md; private final ClickhouseNativeColumnDescriptor elementTypeDescr; - private int[][] masterSlice; private int[][][] perRowsSlice; private Integer curDimension; @@ -36,13 +32,9 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private ClickhouseColumn nestedColumn; private Class elementClass; private Integer nItems; - private boolean resliced; private Object statePrefix; private Integer curLevelSliceSize; - private int[] curLevelSlice; - - private long sliceElementCount; public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { super(nRows, descr); @@ -62,21 +54,14 @@ protected Object readStatePrefix(ClickhouseStreamDataSource in) { @Override protected Object readItems(ClickhouseStreamDataSource in) { if (nItems == null) { - masterSlice = new int[columnDescriptor.arrayDimensionsCount() + 1][]; curDimension = 0; nItems = 0; } if (statePrefix == null) { return null; } - boolean maybeRequiresExtraEncoding = elementTypeDescr.jdbcType() == JDBCType.VARCHAR - || elementTypeDescr.getNestedType().startsWith("Enum"); if (curDimension < columnDescriptor.arrayDimensionsCount()) { - if (maybeRequiresExtraEncoding) { - readAsPerRowSlices(in); - } else { - readAsMasterSlice(in); - } + readAsPerRowSlices(in); if (curDimension < columnDescriptor.arrayDimensionsCount()) { return null; } @@ -100,36 +85,25 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } } - if (maybeRequiresExtraEncoding) { - return nestedColumnReader.itemsArray; - } - resliced = true; - Object[] tmp = nestedColumnReader.asObjectsArrayWithGetElement(elementClass); - nestedColumnReader.itemsArray = null; - return resliceIntoArray(tmp, masterSlice, elementClass); + return nestedColumnReader.itemsArray; } - - Object[] emptyData = nestedColumn.emptyArray(); - if (maybeRequiresExtraEncoding) { - return emptyData; - } - resliced = true; - return resliceIntoArray(emptyData, masterSlice, elementClass); + return nestedColumn.emptyArray(); } @Override protected Object getElementInternal(int rowIdx, Class desired) { - Object[] reslicedRet; - if (resliced) { - reslicedRet = (Object[]) this.itemsArray; - return reslicedRet[rowIdx]; - } else { - desired = maybeUnwrapArrayElementType(desired); - Class forRecode = desired; - Function dataElementAccessor = (idx) -> nestedColumnReader.getElement(idx, forRecode); - reslicedRet = resliceIntoArray(dataElementAccessor, perRowsSlice[rowIdx], desired); - return reslicedRet; - } + desired = maybeUnwrapArrayElementType(desired); + return resliceIntoArray(nestedColumnReader, perRowsSlice[rowIdx], desired); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + throw new IllegalArgumentException("not implemented"); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + throw new IllegalArgumentException("not implemented"); } private Class maybeUnwrapArrayElementType(Class desired) { @@ -141,50 +115,17 @@ private Class maybeUnwrapArrayElementType(Class desired) { return desired; } - private Object[] resliceIntoArray(Object[] data, int[][] sliceToUse, Class elementClass) { - Object[] intermData = data; - for (int i = sliceToUse.length - 1; i >= 0; --i) { - int[] slices = sliceToUse[i]; - intermData = resliceArray(intermData, slices, intermData.getClass()); - } - return (Object[]) intermData[0]; - } - - private Object[] resliceIntoArray(Function dataAccessor, int[][] sliceToUse, Class elementClass) { + private Object resliceIntoArray(ClickhouseColumnReader reader, int[][] sliceToUse, Class elementClass) { int i = sliceToUse.length - 1; int[] slices = sliceToUse[i]; - Object[] intermData = resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); + Object[] intermData = reader.slices(slices, elementClass); //resliceArray(dataAccessor, slices, java.lang.reflect.Array.newInstance(elementClass, 0).getClass()); for (i = sliceToUse.length - 2; i >= 0; --i) { slices = sliceToUse[i]; intermData = resliceArray(intermData, slices, intermData.getClass()); } - return (Object[]) intermData[0]; - } - - private Object[] resliceArray(Function dataAccessor, int[] slices, Class upperClass) { - IntPairIterator paired = PairedIterator.of(slices); - Object[] newDataList = (Object[]) java.lang.reflect.Array.newInstance(upperClass, slices.length - 1); - int tmpSliceIdx = 0; - while (paired.hasNext()) { - paired.next(); - int newSliceSz = paired.getValue() - paired.getKey(); - Object[] reslicedArray = (Object[]) java.lang.reflect.Array.newInstance(upperClass.getComponentType(), newSliceSz); - copyWithAccessor(dataAccessor, paired.getKey(), reslicedArray, 0, newSliceSz); - - newDataList[tmpSliceIdx] = reslicedArray; - ++tmpSliceIdx; - } - return newDataList; - } - - private void copyWithAccessor(Function srcAccessor, int srcPos, Object[] dest, int destPos, int length) { - for (int remaining = length; remaining > 0; --remaining) { - dest[destPos] = srcAccessor.apply(srcPos); - ++destPos; - ++srcPos; - } + return intermData[0]; } private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperClass) { @@ -204,7 +145,6 @@ private Object[] resliceArray(Object[] dataElements, int[] slices, Class upperCl private void readAsPerRowSlices(ClickhouseStreamDataSource in) { if (nRows == 0) { - masterSlice = new int[0][]; perRowsSlice = new int[0][][]; curDimension = columnDescriptor.arrayDimensionsCount(); return; @@ -247,41 +187,4 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { } nItems = curLevelSliceSize; } - - private void readAsMasterSlice(ClickhouseStreamDataSource in) { - if (curDimension == 0) { - //masterSlice.add(Arrays.asList(0, nRows)); - masterSlice[curDimension] = new int[]{0, nRows}; - curLevelSliceSize = nRows; - } - if (nRows == 0) { - perRowsSlice = new int[0][][]; - curDimension = columnDescriptor.arrayDimensionsCount(); - return; - } - - long lastSliceSize = 0; - while (curDimension < columnDescriptor.arrayDimensionsCount()) { - if (curLevelSlice == null) { - curLevelSlice = new int[curLevelSliceSize + 1]; - curLevelSlice[0] = 0; - } - if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { - return; - } - for (int curLevelSliceIndex = 0; curLevelSliceIndex < curLevelSliceSize; ++curLevelSliceIndex) { - lastSliceSize = in.readLongLE(); - if (lastSliceSize > Integer.MAX_VALUE) { - throw new IllegalStateException("nested size is too big (" + lastSliceSize + "), max " + Integer.MAX_VALUE); - } - ++sliceElementCount; - curLevelSlice[curLevelSliceIndex + 1] = (int) lastSliceSize; - } - curDimension += 1; - masterSlice[curDimension] = curLevelSlice; - curLevelSlice = null; - curLevelSliceSize = (int) lastSliceSize; - } - nItems = (int)lastSliceSize; - } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java index 189de982a1..2b23a3808d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java @@ -15,10 +15,10 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; - import java.util.BitSet; public abstract class ClickhouseColumnReader { + private static final Object NOP_STATE = new Object(); protected final int nRows; @@ -68,31 +68,18 @@ protected void readDataInternal(ClickhouseStreamDataSource in) { afterReadItems(in); } - protected Object[] readItemsAsObjects(ClickhouseStreamDataSource in, Class desired) { - itemsArray = readItems(in); - if (itemsArray == null) { - return null; + protected Object[] asObjectsArrayWithGetElement(int startIncluding, int endExcluding, Class desired) { + Object[] ret = (Object[]) allocateOneDimArray(desired, endExcluding - startIncluding); + int arrayIdx = 0; + for (int i = startIncluding; i < endExcluding; ++i) { + ret[arrayIdx] = getElement(i, desired); + ++arrayIdx; } - return asObjectsArray(desired); - } - - protected Object[] asObjectsArray(Class desired) { - return (Object[]) itemsArray; - } - - protected Object[] allocateArray(Class desired, int length) { - if (desired == null) { - return new Object[length]; - } - return (Object[]) java.lang.reflect.Array.newInstance(desired, length); + return ret; } protected Object[] asObjectsArrayWithGetElement(Class desired) { - Object[] ret = allocateArray(desired, nRows); - for (int i = 0; i < nRows; ++i) { - ret[i] = getElement(i, desired); - } - return ret; + return asObjectsArrayWithGetElement(0, nRows, desired); } protected abstract Object readItems(ClickhouseStreamDataSource in); @@ -117,10 +104,6 @@ public boolean isPartial() { return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); } - public Object getItemsArray() { - return itemsArray; - } - public Object getElement(int rowIdx, Class desired) { if (nullsMap != null && nullsMap.get(rowIdx)) { return null; @@ -136,4 +119,31 @@ protected Object getObjectsArrayElement(int rowIdx) { Object[] data = (Object[]) itemsArray; return data[rowIdx]; } + + public Object[] slices(int[] slices, Class desired) { + IntPairIterator slice = PairedIterator.of(slices); + int sliceCount = slices.length - 1; + Object[] ret = allocateTwoDimArray(desired, sliceCount, 0); + if (desired.isPrimitive()) { + if (columnDescriptor.isNullable()) { + throw new IllegalArgumentException("primitive arrays are not supported for nullable columns"); + } + for (int sliceIdx = 0; sliceIdx < sliceCount; ++sliceIdx) { + slice.next(); + int len = slice.getValue() - slice.getKey(); + Object tmp = allocateOneDimArray(desired, len); + System.arraycopy(itemsArray, slice.getKey(), tmp, 0, len); + ret[sliceIdx] = tmp; + } + } else { + for (int sliceIdx = 0; sliceIdx < sliceCount; ++sliceIdx) { + slice.next(); + ret[sliceIdx] = asObjectsArrayWithGetElement(slice.getKey(), slice.getValue(), ret.getClass().getComponentType().getComponentType()); + } + } + return ret; + } + + protected abstract Object[] allocateTwoDimArray(Class desired, int dim1, int dim2); + protected abstract Object allocateOneDimArray(Class desired, int length); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java index ebbb757bb9..a951ad69b9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java @@ -32,4 +32,14 @@ protected Object getElementInternal(int rowIdx, Class desired) { Integer offset = (Integer) super.getElementInternal(rowIdx, desired); return MIN_VALUE.plusDays(offset); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new LocalDate[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new LocalDate[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java index 1a5e57d8a3..2de3b7312d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java @@ -51,4 +51,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new OffsetDateTime[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new OffsetDateTime[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java index f80d369706..15a6737d8d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java @@ -49,4 +49,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new OffsetDateTime[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new OffsetDateTime[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java index dd6bed5f82..dfff0877ef 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java index 6d286c2138..2dbe9fb847 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java index 7a3251491f..75c9f9458f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java @@ -36,4 +36,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { public Object[] recodeValues(Object[] src, Class desired) { return columnRecoder.recodeValues(src, desired); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired != null && desired.isEnum()) { + return (Object[]) java.lang.reflect.Array.newInstance(desired, dim1, dim2); + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired != null && desired.isEnum()) { + return java.lang.reflect.Array.newInstance(desired, length); + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java index 02649b12ef..a9165743a3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java @@ -36,4 +36,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { public Object[] recodeValues(Object[] src, Class desired) { return columnRecoder.recodeValues(src, desired); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired != null && desired.isEnum()) { + return (Object[]) java.lang.reflect.Array.newInstance(desired, dim1, dim2); + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired != null && desired.isEnum()) { + return java.lang.reflect.Array.newInstance(desired, length); + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java index 33fc28e965..16b0a948a1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java @@ -69,6 +69,22 @@ protected Object getElementInternal(int rowIdx, Class desired) { return tmp; } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == byte[].class) { + return new byte[dim1][dim2][]; + } + return new String[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == byte[].class) { + return new byte[length][]; + } + return new String[length]; + } + private String buildStringFromElement(byte[] tmp) { int lastNonZeroIdx = removeTrailingZerosInStrings ? ColumnUtils.getLastNonZeroPos(tmp) : tmp.length - 1; return new String(tmp, 0, lastNonZeroIdx + 1, charset); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java index a787cc16ef..37bf1eee81 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java @@ -40,7 +40,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Float[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Float[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java index d774ce74a1..cf6343ff15 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java @@ -41,7 +41,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Double[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Double[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java index fbb8dd55d0..1069276929 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java @@ -49,4 +49,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java index deb8e89b0b..85f39cfdd3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java @@ -38,6 +38,22 @@ protected Object getElementInternal(int rowIdx, Class desired) { return super.getElementInternal(rowIdx, desired); } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { + return new Inet4Address[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == InetAddress.class || desired == Inet4Address.class || desired == Object.class || desired == null) { + return new Inet4Address[length]; + } + return super.allocateOneDimArray(desired, length); + } + private static byte[] intBytes(Long l) { return new byte[] { (byte) (l >>> 24 & 0xFF), diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java index 91b9006b43..ae720858dd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java @@ -40,7 +40,18 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { + return new Inet6Address[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == InetAddress.class || desired == Inet6Address.class || desired == Object.class || desired == null) { + return new Inet6Address[length]; + } + return super.allocateOneDimArray(desired, length); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java index f301f9dec9..b50576222f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java @@ -46,4 +46,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { protected Object getElementInternal(int rowIdx, Class desired) { return ((BigInteger[]) this.itemsArray)[rowIdx]; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new BigInteger[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new BigInteger[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java index 85d4394cd7..0c91436277 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java @@ -33,4 +33,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return multiplier.multipliedBy(obj); } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == Duration.class) { + return new Duration[dim1][dim2]; + } + return super.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == Duration.class) { + return new Duration[length]; + } + return super.allocateOneDimArray(desired, length); + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java index a4bdc46591..93807c59f6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java @@ -115,11 +115,6 @@ protected Object readItems(ClickhouseStreamDataSource in) { return itemsArray; } - @Override - protected Object[] asObjectsArray(Class desired) { - return super.asObjectsArrayWithGetElement(desired); - } - @Override public boolean isPartial() { return indexSize == null || indexColumn.isPartial() || nKeys == null || keysColumn.isPartial(); @@ -135,6 +130,16 @@ public Object getElement(int rowIdx, Class desired) { return indexColumn.getElementInternal(key, desired); } + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return indexColumn.allocateTwoDimArray(desired, dim1, dim2); + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return indexColumn.allocateOneDimArray(desired, length); + } + static ClickhouseColumn uintColumn(int code) { if (code < 0 || code >= KEY_COLUMNS.length) { throw new IllegalArgumentException("unknown low-cardinality key-column code " + code); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java index ac56b69e11..502b45dede 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java @@ -73,4 +73,20 @@ protected Object getElementInternal(int rowIdx, Class desired) { } return tmp; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == byte[].class) { + return new byte[dim1][dim2][]; + } + return new String[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == byte[].class) { + return new byte[length][]; + } + return new String[length]; + } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java index 17f1e4ce97..6e9ee79115 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java @@ -49,7 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == int.class) { + return new int[dim1][dim2]; + } + return new Integer[dim1][dim2]; + } + if (desired == short.class) { + return new short[dim1][dim2]; + } + return new Short[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + if (desired == int.class) { + return new int[length]; + } + return new Integer[length]; + } + if (desired == short.class) { + return new short[length]; + } + return new Short[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java index 81ba3c07ee..38e928e87e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java @@ -49,7 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == long.class) { + return new long[dim1][dim2]; + } + return new Long[dim1][dim2]; + } + if (desired == int.class) { + return new int[dim1][dim2]; + } + return new Integer[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + if (desired == long.class) { + return new long[length]; + } + return new Long[length]; + } + if (desired == int.class) { + return new int[length]; + } + return new Integer[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index e8293716a8..9fee947f8b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,11 +15,15 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; public class UInt64ColumnReader extends ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(UInt64ColumnReader.class); + public static final int ELEMENT_SIZE = 8; public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { @@ -53,8 +57,25 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + return new Numeric[dim1][dim2]; + } + if (desired == long.class) { + return new long[dim1][dim2]; + } + return new Long[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (columnDescriptor.isUnsigned()) { + return new Numeric[length]; + } + if (desired == long.class) { + return new long[length]; + } + return new Long[length]; } static BigInteger unsignedBi(long l) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java index 047c1109e2..00cff5cffc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java @@ -49,15 +49,30 @@ protected Object getElementInternal(int rowIdx, Class desired) { } @Override - protected Object[] asObjectsArray(Class desired) { - return asObjectsArrayWithGetElement(desired); + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (columnDescriptor.isUnsigned()) { + if (desired == short.class) { + return new short[dim1][dim2]; + } + return new Short[dim1][dim2]; + } + if (desired == byte.class) { + return new byte[dim1][dim2]; + } + return new Byte[dim1][dim2]; } @Override - protected Object[] allocateArray(Class desired, int length) { + protected Object allocateOneDimArray(Class desired, int length) { if (columnDescriptor.isUnsigned()) { + if (desired == short.class) { + return new short[length]; + } return new Short[length]; } + if (desired == byte.class) { + return new byte[length]; + } return new Byte[length]; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java index 5e443e2136..a81dc5ed7d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java @@ -41,4 +41,14 @@ protected Object readItems(ClickhouseStreamDataSource in) { } return null; } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new UUID[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new UUID[length]; + } } diff --git a/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml b/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml new file mode 100644 index 0000000000..8338f1a2df --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From df4df78c09fa72417cc59979dfde0eb314452840 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 8 May 2021 09:59:22 +0300 Subject: [PATCH 153/176] added charset parameter to readPascalString Signed-off-by: vladimir --- .../impl/codec/ByteBufUtils.java | 5 +- .../impl/codec/ClickhouseExceptionReader.java | 12 +- .../impl/codec/DatabaseMetadataReader.java | 7 +- .../codec/Lz4ClickhouseStreamDataSource.java | 8 +- .../impl/codec/MultistringMessageReader.java | 7 +- .../impl/codec/PacketReader.java | 10 +- .../codec/RawClickhouseStreamDataSource.java | 8 +- .../codec/columns/UInt64ColumnReader.java | 5 +- .../ArraySerDesTest.java | 2 +- .../NestedExceptionsTest.java | 8 +- .../clickhousenativeclient/TestRunner.java | 319 ++++++++++++++++++ 11 files changed, 365 insertions(+), 26 deletions(-) create mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java index 8c886401b7..baa2df84eb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java @@ -15,6 +15,7 @@ import io.netty.buffer.ByteBuf; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class ByteBufUtils { @@ -57,7 +58,7 @@ public static Integer readULeb128(ByteBuf buf) { return value; } - public static String readPascalString(ByteBuf buf) { + public static String readPascalString(ByteBuf buf, Charset charset) { int readerIndex = buf.readerIndex(); Integer length = readULeb128(buf); if (length == null) { @@ -66,7 +67,7 @@ public static String readPascalString(ByteBuf buf) { if (buf.readableBytes() >= length) { byte[] b = new byte[length]; buf.readBytes(b); - return new String(b, StandardCharsets.UTF_8); + return new String(b, charset); } buf.readerIndex(readerIndex); return null; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java index 23d741c23d..066e7cd411 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java @@ -16,18 +16,24 @@ import io.netty.buffer.ByteBuf; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class ClickhouseExceptionReader { private final List exceptionBlocks = new ArrayList<>(); + private final Charset charset; private Integer code; private String name; private String message; private String stacktrace; private Boolean hasNested; + public ClickhouseExceptionReader(Charset charset) { + this.charset = charset; + } + public ClickhouseServerException readFrom(ByteBuf in) { boolean hadNested; @@ -40,19 +46,19 @@ public ClickhouseServerException readFrom(ByteBuf in) { } } if (name == null) { - name = ByteBufUtils.readPascalString(in); + name = ByteBufUtils.readPascalString(in, charset); if (name == null) { return null; } } if (message == null) { - message = ByteBufUtils.readPascalString(in); + message = ByteBufUtils.readPascalString(in, charset); if (message == null) { return null; } } if (stacktrace == null) { - stacktrace = ByteBufUtils.readPascalString(in); + stacktrace = ByteBufUtils.readPascalString(in, charset); if (stacktrace == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java index 691dd97b3a..939b638eb1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java @@ -18,6 +18,7 @@ import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.time.Duration; import java.time.ZoneId; import java.util.Map; @@ -43,7 +44,7 @@ public DatabaseMetadataReader(String fullClientName, Map propert public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { if (productName == null) { - productName = ByteBufUtils.readPascalString(in); + productName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (productName == null) { return null; } @@ -67,13 +68,13 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { } } if (serverZoneIdName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_TIMEZONE) { - serverZoneIdName = ByteBufUtils.readPascalString(in); + serverZoneIdName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (serverZoneIdName == null) { return null; } } if (displayName == null && revision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_SERVER_DISPLAY_NAME ) { - displayName = ByteBufUtils.readPascalString(in); + displayName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (displayName == null) { return null; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java index d3d52a809f..bcfffafa25 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -23,6 +23,7 @@ import net.jpountz.lz4.LZ4FastDecompressor; import ru.yandex.clickhouse.util.ClickHouseCityHash; +import java.nio.charset.Charset; import java.util.Arrays; public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource { @@ -33,7 +34,7 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource //cityhash size + compression method byte + sizeWithHeader + decompressed size public static final int HEADER_LENGTH = 16 + CHECKSUMED_HEADER_LENGTH; - + private final Charset charset; private final LZ4Factory lz4Factory; private final ByteBuf decompressedData; private long[] serverCityHash; @@ -41,9 +42,10 @@ public class Lz4ClickhouseStreamDataSource implements ClickhouseStreamDataSource private Long uncompressedSize; private ByteBuf arrayBb; - public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, ByteBufAllocator alloc) { + public Lz4ClickhouseStreamDataSource(LZ4Factory lz4Factory, Charset charset, ByteBufAllocator alloc) { this.lz4Factory = lz4Factory; this.decompressedData = alloc.heapBuffer(); + this.charset = charset; } @Override @@ -149,7 +151,7 @@ public void skipBytes(int length) { @Override public String readPascalString() { - return ByteBufUtils.readPascalString(decompressedData); + return ByteBufUtils.readPascalString(decompressedData, charset); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java index 4bf76b36b7..1a4986ab24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/MultistringMessageReader.java @@ -15,14 +15,17 @@ import io.netty.buffer.ByteBuf; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class MultistringMessageReader { private final List strings; + private final Charset charset; private Integer stringsExpected; - public MultistringMessageReader() { + public MultistringMessageReader(Charset charset) { + this.charset = charset; strings = new ArrayList<>(); } @@ -31,7 +34,7 @@ public List readFrom(ByteBuf in, ServerPacketType packetType) { stringsExpected = stringsInMessage(packetType); } String ln; - while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in)) != null) { + while (strings.size() < stringsExpected && (ln = ByteBufUtils.readPascalString(in, charset)) != null) { strings.add(ln); } if (strings.size() == stringsExpected) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java index f746820ca1..f5912be302 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java @@ -138,7 +138,7 @@ private String rowAsString(Row row, RowDesc rowDesc) { private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, ServerPacketType type) { if (multistringMessage == null) { if (multistringReader == null) { - multistringReader = new MultistringMessageReader(); + multistringReader = new MultistringMessageReader(md.getStringCharset()); } multistringMessage = multistringReader.readFrom(in, type); } @@ -210,7 +210,7 @@ private QueryProgressInfo readProgressBlock(ByteBuf in) { private ClickhouseServerException readExceptionBlock(ByteBuf in) { if (exceptionReader == null) { - exceptionReader = new ClickhouseExceptionReader(); + exceptionReader = new ClickhouseExceptionReader(md.getStringCharset()); } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { @@ -230,7 +230,7 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in) { private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, boolean preferCompressionIfEnabled) { if (md.getRevision() >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_TEMPORARY_TABLES) { if (tempTableInfo == null) { - tempTableInfo = ByteBufUtils.readPascalString(in); + tempTableInfo = ByteBufUtils.readPascalString(in, md.getStringCharset()); if (tempTableInfo == null) { return null; } @@ -258,9 +258,9 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc, boolean preferCompressionIfEnabled) { if (lz4Factory == null || !preferCompressionIfEnabled) { - return new RawClickhouseStreamDataSource(); + return new RawClickhouseStreamDataSource(md.getStringCharset()); } else { - return new Lz4ClickhouseStreamDataSource(lz4Factory, alloc); + return new Lz4ClickhouseStreamDataSource(lz4Factory, md.getStringCharset(), alloc); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java index 6d0b708d09..75b85cb4cd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java @@ -17,10 +17,14 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; +import java.nio.charset.Charset; + public class RawClickhouseStreamDataSource implements ClickhouseStreamDataSource { + private final Charset charset; private ByteBuf source; - public RawClickhouseStreamDataSource() { + public RawClickhouseStreamDataSource(Charset charset) { + this.charset = charset; } @Override @@ -40,7 +44,7 @@ public void skipBytes(int length) { @Override public String readPascalString() { - return ByteBufUtils.readPascalString(source); + return ByteBufUtils.readPascalString(source, charset); } @Override diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java index 9fee947f8b..098566d801 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java @@ -15,15 +15,11 @@ import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; public class UInt64ColumnReader extends ClickhouseColumnReader { - private static final Logger LOG = LoggerFactory.getLogger(UInt64ColumnReader.class); - public static final int ELEMENT_SIZE = 8; public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { @@ -33,6 +29,7 @@ public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDesc @Override protected Object readItems(ClickhouseStreamDataSource in) { //TODO: maybe read elements as soon as they arrive if we have enough data (> ELEMENT_SIZE) + //TODO: maybe store all fixed-size types within (direct)buffer (+WeakReference + Queue to release buffer) if (in.readableBytes() >= ELEMENT_SIZE * nRows) { long[] data = new long[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 583fa555ca..6bb0ef7556 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -88,7 +88,7 @@ public void doSerDes() { sink.finish(); ClickhouseColumnReader reader = col.reader(data.size()); - ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(); + ClickhouseStreamDataSource ds = new RawClickhouseStreamDataSource(StandardCharsets.UTF_8); ds.moreData(buf, UnpooledByteBufAllocator.DEFAULT); reader.readColumn(ds); for (int rowIdx = 0; rowIdx < data.size(); ++rowIdx) { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index 9364b88727..bbaa6b71bb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -18,12 +18,15 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.time.ZoneId; import java.util.Collections; import java.util.List; import java.util.Map; @@ -43,7 +46,10 @@ public void checkExceptions() throws IOException { } PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - PacketReader rdr = new PacketReader(null, "none", Collections.emptyMap(), null); + ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", + Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); + PacketReader rdr = new PacketReader(md, "none", Collections.emptyMap(), null); ClickhouseServerException exception = (ClickhouseServerException)rdr.receivePacket(allocator, buf); Assert.assertEquals("DB::Exception", exception.getName()); ClickhouseServerException nested = (ClickhouseServerException) exception.getCause(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java new file mode 100644 index 0000000000..10ccfaf26c --- /dev/null +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java @@ -0,0 +1,319 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhousenativeclient; + +import com.fasterxml.jackson.core.Base64Variants; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.*; +import io.vertx.sqlclient.impl.ArrayTuple; +import net.jpountz.lz4.LZ4Compressor; +import net.jpountz.lz4.LZ4Factory; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class TestRunner { + private static final Logger LOG = LoggerFactory.getLogger(TestRunner.class); + + + public static void main(String[] args) throws Throwable { + //deserializeBlock(); + //System.exit(0); + + //testCompression(); + //System.exit(1); + + //ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); + ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions( + new SqlConnectOptions() + .setPort(9000) + .setHost("localhost") + .setUser("default") + .setPassword("default") + .setDatabase("default") + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") + //.addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") + .addProperty(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse") + .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug") + .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") + .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") + ); + Vertx vertx = Vertx.vertx(); + ClickhouseNativeConnection.connect(vertx, opts, ar0 -> { + LOG.info("conn succeeded: " + ar0.succeeded(), ar0.cause()); + if (ar0.succeeded()) { + selectTest(ar0.result(), vertx); + } + }); + //Thread.sleep(25 * 1000); + //vertx.close(r -> LOG.info("vertx closed")); + } + + private static void deserializeBlock() throws IOException { + String filename = "/tmp/forged_nested.bin"; + try (InputStream os = new FileInputStream(filename)) { + byte[] buf = new byte[(int) new File(filename).length()]; + System.err.println("len: " + buf.length); + int nRead = os.read(buf); + System.err.println(nRead); + System.err.println("serialized:"); + System.err.println(Base64Variants.MIME.encode(buf).replace("\\n", "\n")); + } + } + + private static void serializeBlock() throws IOException { + String src1 = "AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi\n" + + " YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi\n" + + " NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm\n" + + " OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u\n" + + " ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv\n" + + " Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv\n" + + " YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg\n" + + " aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5\n" + + " KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl\n" + + " YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3\n" + + " LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv\n" + + " CgA="; + String src = src1.replace(" ", "").replace("\n", ""); + byte[] bytes = Base64Variants.MIME.decode(src1); + try (OutputStream os = new FileOutputStream("/tmp/forged_nested.bin")) { + os.write(bytes); + } + String encoded = Base64Variants.MIME.encode(bytes); + System.err.println("src"); + System.err.println(src); + System.err.println("encoded:"); + System.err.println(encoded); + System.err.println(encoded.equals(src)); + } + + private static void testCompression() throws IOException { + int nItems = 256; + int[] b1 = new int[nItems]; + for (int i = 0; i < nItems; ++i) { + b1[i] = Integer.MAX_VALUE - 512 + i; + } + + ByteBuf buf = Unpooled.wrappedBuffer(new byte[b1.length * Integer.BYTES]); + buf.writerIndex(0); + Arrays.stream(b1).forEach(buf::writeIntLE); + + compressAndPrintStats(buf.array()); + String s = Arrays.stream(b1).boxed().map(Object::toString).collect(Collectors.joining(",")); + compressAndPrintStats(s.getBytes(StandardCharsets.US_ASCII)); + }; + + private static void compressAndPrintStats(byte[] bytes) { + LZ4Factory factory = LZ4Factory.unsafeInstance(); + LZ4Compressor compr = factory.fastCompressor(); + byte[] compressed = compr.compress(bytes); + System.err.printf("uncompr: %d, compressed: %d%n", bytes.length, compressed.length); + } + + private static void insert_test2(ClickhouseNativeConnection conn, Vertx vertx) { + List batch1 = Arrays.asList( + Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}} }), + Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null}, {null}} }), + Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}} }) + ); + + List batch2 = Arrays.asList( + Tuple.of(1, (Object) new Object[] { "str1_1", "str1_2", null }), + Tuple.of(2, (Object) new Object[] { "str2_1", "str2_2", null, null }), + Tuple.of(3, (Object) new Object[] { "str3_1", "str3_2", null, null }) + ); + + OffsetDateTime dt = OffsetDateTime.of(2019, 1, 1, 0, 1, 1, 1234, ZoneOffset.ofHours(3)); + List batch3 = Arrays.asList(Tuple.of(1, dt)); + + List batch4 = Arrays.asList(Tuple.of(1, 0)); + + + conn.preparedQuery("INSERT INTO vertx_test_string (id, nullable_array3_lc_t) VALUES").executeBatch(batch1, result -> { + LOG.info("result: " + result.succeeded()); + if (result.failed()) { + LOG.error("error inserting", result.cause()); + } + conn.close(); + vertx.close(); + }); + } + + private static void insert_test(ClickhouseNativeConnection conn, Vertx vertx) { + List batch = Arrays.asList(Tuple.of(1, "a", 1), Tuple.of(null, "b", 2), Tuple.of(3, null, 3), Tuple.of(4, "", 4)); + conn.preparedQuery("INSERT INTO insert_select_testtable (a, b, c) VALUES (1, 'a', 1)").execute(result -> { + LOG.info("result: " + result.succeeded()); + if (result.failed()) { + LOG.error("error inserting", result.cause()); + } + conn.close(); + vertx.close(); + }); + } + + private static void test4(ClickhouseNativeConnection conn, Vertx vertx) { + List types = Stream.of("Int8", "Int16") + .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) + .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) + .collect(Collectors.toList()); + List typeNames = types.stream() + .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + Iterator typesIter = types.iterator(); + ClickhouseNativeColumnDescriptor type = typesIter.next(); + String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + type.getMinValue(), type.getUnparsedNativeType(), type.getMaxValue(), type.getUnparsedNativeType()); + conn.query(query).execute( + res -> { + ClickhouseNativeColumnDescriptor type2 = typesIter.next(); + String query2 = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", + type2.getMinValue(), type2.getUnparsedNativeType(), type2.getMaxValue(), type2.getUnparsedNativeType()); + conn.query(query2).execute(res2 -> { + conn.close(); + vertx.close(); + }); + } + ); + } + + private static void test3(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "select RESOURCE, MGR_ID from amazon_train limit 55"; + String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; + AtomicLong l = new AtomicLong(0); + conn.prepare(query, ar1 -> { + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + // Fetch 50 rows at a time + RowStream stream = pq.createStream(50, ArrayTuple.EMPTY); + // Use the stream + stream.exceptionHandler(err -> { + System.out.println("Error: " + err.getMessage()); + }); + stream.endHandler(v -> { + System.out.println("got End of stream"); + vertx.close(); + }); + stream.handler(row -> { + long val = l.incrementAndGet(); + System.out.println("val: " + val + "; RESOURCE: " + row.getString("name") + "; MGR_ID: " + row.getInteger("value")); + }); + } + }); + } + + private static void test2(ClickhouseNativeConnection conn) { + conn.prepare("select RESOURCE, MGR_ID from amazon_train limit 5", ar1 -> { + LOG.info("prepare succeeded: " + ar1.succeeded(), ar1.cause()); + if (ar1.succeeded()) { + PreparedStatement pq = ar1.result(); + } + }); + } + + private static void selectTest(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "SHOW TABLES FROM system LIKE '%user%'" + //String query = "select RESOURCE, MGR_ID from amazon_train limit 5"; + //String query = "select RESOURCE, MGR_ID, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2 from amazon_train limit 5"; + //String query = "SELECT CAST(4, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST('abcdef', 'FixedString(6)') AS str_col2 " + + // "UNION ALL " + + // "SELECT CAST(255, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST(NULL, 'Nullable(FixedString(6))') AS str_col2 "; + //String query = "SELECT array(array(1,2), array(3,NULL)) AS RESOURCE, 'aa' AS str_col2"; + //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))')"; + //String query = "select CAST(4, 'LowCardinality(Nullable(UInt8))') AS RESOURCE, 'aa' AS str_col1"; + //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))') AS RESOURCE"; + //String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; + //String query = "select CAST('2019-01-01 12:13:14.123456' AS Nullable(DateTime64(6))) AS name, 4 AS value"; + //String query = "select cast('047ae584-b8f3-4d7d-be90-257de2ab35b9', 'UINSERTUID') as name"; + //String query = "select cast(32.2, 'Decimal128(10)') as name"; + //String query = "select CAST('aa', 'Nullable(Enum16(\'aa\' = 1))')" + //String query = "SELECT tuple(1,NULL) AS x, toTypeName(x) as name"; + //String query = "SELECT CAST('bb', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r1' as col_name UNION ALL " + + // " SELECT CAST(NULL, 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r2' as col_name UNION ALL " + + // " SELECT CAST('aa', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r3' as col_name"; + //"Array(Array(LowCardinality(Nullable(String))))" + //String query = "select CAST('aa', 'LowCardinality(Nullable(String))') as name, 'r1' as col_name UNION ALL " + + // " select CAST(NULL, 'LowCardinality(Nullable(String))') as name, 'r2' as col_name UNION ALL " + + // " select CAST('bb', 'LowCardinality(Nullable(String))') as name, 'r3' as col_name"; + //String query = "INSERT INTO insert_select_testtable (*) VALUES"; + //String query = "SELECT array(array('A', 'B'), array('C', 'D', 'E', 'F', NULL)) AS name, 'r1' AS col_name"; + //String query = "SELECT array('A', 'B') AS name, 'r1' as col_name"; + //String query = "SELECT array(array(),array(4, NULL)) AS name, 'r1' as col_name"; + //String query = "select 0.9 as name, Inf as v2, NaN as v3, 'r1' as col_name"; + //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; + //String query = "SELECT test_int_2,test_int_4,test_int_8,test_float_4,test_float_8,test_numeric,test_decimal,test_boolean,test_char,test_varchar,test_date from basicdatatype where id = 1"; + //String query = "SELECT CAST('1999-12-31', 'Date') as test_numeric"; + //SELECT toTypeName(INTERVAL 4 DAY) //interval test + //select * from system.data_type_families where name like 'Interval%'; + //String query = "select toIPv6('2a02:aa08:ecolValue2000:3100::2') as col1, toIPv4('255.168.21.255') as col2"; + //String query = "select nullable_array3_lc_t from test_insert_string where id=1 limit 1";"; + //String query = "SELECT CAST('[[[\\'1_str1_1\\',\\'str1_2\\',NULL], [NULL]], [[\\'str1_3\\',\\'str1_4\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + + // "SELECT CAST('[[[\\'2_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + + // "SELECT CAST('[[[\\'3_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))')"; + //String query = "select CAST('2019-01-01 00:01:01.123456789', 'DateTime64(9, \\'Europe/Moscow\\')')"; + //String query = "select simple_t from vertx_test_enum8 order by id"; + //String query = "select * from (select [[[]],[[]]] as a UNION ALL select [[[]],[[]]] as a) t1;"; + String query = "select arrayJoin(x), x from (select groupArray(number) as x from (select * from system.numbers limit 10000) as t) limit 3000"; + long start = System.currentTimeMillis(); + conn.query(query).execute(ret1 -> { + LOG.info("query succeeded: " + ret1.succeeded()); + if (ret1.succeeded()) { + RowSet rSet = ret1.result(); + LOG.info("rowDesc: " + rSet.columnDescriptors() + " row count: " + rSet.rowCount()); + for (Row row : rSet) { + Object colValue1 = row.get(long[].class, 1); + //Object colValue2 = row.getValue(1); + //Object v2 = row.getValue("v2"); + //Object v3 = row.getValue("v3"); + LOG.info("got row: \"" + colValue1 + "\"; tp: " + (colValue1 == null ? null : colValue1.getClass())); + } + } + //81037 if read elements on arrival + LOG.info("closing vertx, total time: " + (System.currentTimeMillis() - start) + " millis"); + conn.close(); + vertx.close(); + }); + } + + private static void prepareQueryTest(ClickhouseNativeConnection conn, Vertx vertx) { + //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; + //String query = "SELECT test_date FROM basicdatatype WHERE id = 1"; + String query = "SELECT test_float_8 FROM basicdatatype WHERE id = 1"; + conn.preparedQuery(query) + .execute(result -> { + if (result.failed()) { + LOG.error("error executing query", result.cause()); + vertx.close(); + } + Row row = result.result().iterator().next(); + LOG.info("col1: " + row.getValue(0)); + vertx.close(); + }); + } +} From 4eff81e8800772d952aad09d6397818f0f105595 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sat, 8 May 2021 10:01:26 +0300 Subject: [PATCH 154/176] removed TestRunner Signed-off-by: vladimir --- .../clickhousenativeclient/TestRunner.java | 319 ------------------ 1 file changed, 319 deletions(-) delete mode 100644 vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java deleted file mode 100644 index 10ccfaf26c..0000000000 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/TestRunner.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - -package io.vertx.clickhousenativeclient; - -import com.fasterxml.jackson.core.Base64Variants; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; -import io.vertx.core.Vertx; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.sqlclient.*; -import io.vertx.sqlclient.impl.ArrayTuple; -import net.jpountz.lz4.LZ4Compressor; -import net.jpountz.lz4.LZ4Factory; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class TestRunner { - private static final Logger LOG = LoggerFactory.getLogger(TestRunner.class); - - - public static void main(String[] args) throws Throwable { - //deserializeBlock(); - //System.exit(0); - - //testCompression(); - //System.exit(1); - - //ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.PARANOID); - ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions( - new SqlConnectOptions() - .setPort(9000) - .setHost("localhost") - .setUser("default") - .setPassword("default") - .setDatabase("default") - .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") - //.addProperty(ClickhouseConstants.OPTION_COMPRESSOR, "lz4_safe") - .addProperty(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "bhorse") - .addProperty(ClickhouseConstants.OPTION_SEND_LOGS_LEVEL, "debug") - .addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, "jython-driver") - .addProperty(ClickhouseConstants.OPTION_DEFAULT_ZONE_ID, "Europe/Oslo") - ); - Vertx vertx = Vertx.vertx(); - ClickhouseNativeConnection.connect(vertx, opts, ar0 -> { - LOG.info("conn succeeded: " + ar0.succeeded(), ar0.cause()); - if (ar0.succeeded()) { - selectTest(ar0.result(), vertx); - } - }); - //Thread.sleep(25 * 1000); - //vertx.close(r -> LOG.info("vertx closed")); - } - - private static void deserializeBlock() throws IOException { - String filename = "/tmp/forged_nested.bin"; - try (InputStream os = new FileInputStream(filename)) { - byte[] buf = new byte[(int) new File(filename).length()]; - System.err.println("len: " + buf.length); - int nRead = os.read(buf); - System.err.println(nRead); - System.err.println("serialized:"); - System.err.println(Base64Variants.MIME.encode(buf).replace("\\n", "\n")); - } - } - - private static void serializeBlock() throws IOException { - String src1 = "AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi\n" + - " YXNlYCBkb2Vzbid0IGV4aXN0pwQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhmOGJi\n" + - " NmRmIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhm\n" + - " OGNiZWM5IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u\n" + - " ZWN0aW9uOjpzdGFydCgpIEAgMHgxMWY4MDFhZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv\n" + - " Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDExZjgxYmMxIGluIC91c3Iv\n" + - " YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTIwYjgyZTkg\n" + - " aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5\n" + - " KHZvaWQqKSBAIDB4MTIwYjQxNGEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl\n" + - " YWQgQCAweDhlYTcgaW4gL2xpYi94ODZfNjQtbGludXgtZ251L2xpYnB0aHJlYWQtMi4zMS5zbwo3\n" + - " LiBfX2Nsb25lIEAgMHhmZGRlZiBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy0yLjMxLnNv\n" + - " CgA="; - String src = src1.replace(" ", "").replace("\n", ""); - byte[] bytes = Base64Variants.MIME.decode(src1); - try (OutputStream os = new FileOutputStream("/tmp/forged_nested.bin")) { - os.write(bytes); - } - String encoded = Base64Variants.MIME.encode(bytes); - System.err.println("src"); - System.err.println(src); - System.err.println("encoded:"); - System.err.println(encoded); - System.err.println(encoded.equals(src)); - } - - private static void testCompression() throws IOException { - int nItems = 256; - int[] b1 = new int[nItems]; - for (int i = 0; i < nItems; ++i) { - b1[i] = Integer.MAX_VALUE - 512 + i; - } - - ByteBuf buf = Unpooled.wrappedBuffer(new byte[b1.length * Integer.BYTES]); - buf.writerIndex(0); - Arrays.stream(b1).forEach(buf::writeIntLE); - - compressAndPrintStats(buf.array()); - String s = Arrays.stream(b1).boxed().map(Object::toString).collect(Collectors.joining(",")); - compressAndPrintStats(s.getBytes(StandardCharsets.US_ASCII)); - }; - - private static void compressAndPrintStats(byte[] bytes) { - LZ4Factory factory = LZ4Factory.unsafeInstance(); - LZ4Compressor compr = factory.fastCompressor(); - byte[] compressed = compr.compress(bytes); - System.err.printf("uncompr: %d, compressed: %d%n", bytes.length, compressed.length); - } - - private static void insert_test2(ClickhouseNativeConnection conn, Vertx vertx) { - List batch1 = Arrays.asList( - Tuple.of(1, (Object) new Object[][][]{ {{"str1_1", "str1_2", null}, {null}}, {{"str1_3", "str1_4", null}, {null}} }), - Tuple.of(2, (Object) new Object[][][]{ {{"str2_1", "str2_2", null}, {null}} }), - Tuple.of(3, (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}} }) - ); - - List batch2 = Arrays.asList( - Tuple.of(1, (Object) new Object[] { "str1_1", "str1_2", null }), - Tuple.of(2, (Object) new Object[] { "str2_1", "str2_2", null, null }), - Tuple.of(3, (Object) new Object[] { "str3_1", "str3_2", null, null }) - ); - - OffsetDateTime dt = OffsetDateTime.of(2019, 1, 1, 0, 1, 1, 1234, ZoneOffset.ofHours(3)); - List batch3 = Arrays.asList(Tuple.of(1, dt)); - - List batch4 = Arrays.asList(Tuple.of(1, 0)); - - - conn.preparedQuery("INSERT INTO vertx_test_string (id, nullable_array3_lc_t) VALUES").executeBatch(batch1, result -> { - LOG.info("result: " + result.succeeded()); - if (result.failed()) { - LOG.error("error inserting", result.cause()); - } - conn.close(); - vertx.close(); - }); - } - - private static void insert_test(ClickhouseNativeConnection conn, Vertx vertx) { - List batch = Arrays.asList(Tuple.of(1, "a", 1), Tuple.of(null, "b", 2), Tuple.of(3, null, 3), Tuple.of(4, "", 4)); - conn.preparedQuery("INSERT INTO insert_select_testtable (a, b, c) VALUES (1, 'a', 1)").execute(result -> { - LOG.info("result: " + result.succeeded()); - if (result.failed()) { - LOG.error("error inserting", result.cause()); - } - conn.close(); - vertx.close(); - }); - } - - private static void test4(ClickhouseNativeConnection conn, Vertx vertx) { - List types = Stream.of("Int8", "Int16") - .flatMap(el -> Stream.of("Nullable(" + el + ")", "Nullable(U" + el + ")")) - .map(nm -> ClickhouseColumns.columnDescriptorForSpec(nm, "fake_name")) - .collect(Collectors.toList()); - List typeNames = types.stream() - .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); - Iterator typesIter = types.iterator(); - ClickhouseNativeColumnDescriptor type = typesIter.next(); - String query = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - type.getMinValue(), type.getUnparsedNativeType(), type.getMaxValue(), type.getUnparsedNativeType()); - conn.query(query).execute( - res -> { - ClickhouseNativeColumnDescriptor type2 = typesIter.next(); - String query2 = String.format("SELECT CAST(%s, '%s') as min_val, CAST(%s, '%s') as max_val", - type2.getMinValue(), type2.getUnparsedNativeType(), type2.getMaxValue(), type2.getUnparsedNativeType()); - conn.query(query2).execute(res2 -> { - conn.close(); - vertx.close(); - }); - } - ); - } - - private static void test3(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "select RESOURCE, MGR_ID from amazon_train limit 55"; - String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; - AtomicLong l = new AtomicLong(0); - conn.prepare(query, ar1 -> { - if (ar1.succeeded()) { - PreparedStatement pq = ar1.result(); - // Fetch 50 rows at a time - RowStream stream = pq.createStream(50, ArrayTuple.EMPTY); - // Use the stream - stream.exceptionHandler(err -> { - System.out.println("Error: " + err.getMessage()); - }); - stream.endHandler(v -> { - System.out.println("got End of stream"); - vertx.close(); - }); - stream.handler(row -> { - long val = l.incrementAndGet(); - System.out.println("val: " + val + "; RESOURCE: " + row.getString("name") + "; MGR_ID: " + row.getInteger("value")); - }); - } - }); - } - - private static void test2(ClickhouseNativeConnection conn) { - conn.prepare("select RESOURCE, MGR_ID from amazon_train limit 5", ar1 -> { - LOG.info("prepare succeeded: " + ar1.succeeded(), ar1.cause()); - if (ar1.succeeded()) { - PreparedStatement pq = ar1.result(); - } - }); - } - - private static void selectTest(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "SHOW TABLES FROM system LIKE '%user%'" - //String query = "select RESOURCE, MGR_ID from amazon_train limit 5"; - //String query = "select RESOURCE, MGR_ID, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2 from amazon_train limit 5"; - //String query = "SELECT CAST(4, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST('abcdef', 'FixedString(6)') AS str_col2 " + - // "UNION ALL " + - // "SELECT CAST(255, 'Nullable(UInt64)') AS RESOURCE, 'aa' AS str_col1, CAST(NULL, 'Nullable(FixedString(6))') AS str_col2 "; - //String query = "SELECT array(array(1,2), array(3,NULL)) AS RESOURCE, 'aa' AS str_col2"; - //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))')"; - //String query = "select CAST(4, 'LowCardinality(Nullable(UInt8))') AS RESOURCE, 'aa' AS str_col1"; - //String query = "select CAST(array(4), 'Array(LowCardinality(Nullable(UInt8)))') AS RESOURCE"; - //String query = "select name, value from (SELECT name, value from vertx_cl_test_table limit 55) t1 order by name desc"; - //String query = "select CAST('2019-01-01 12:13:14.123456' AS Nullable(DateTime64(6))) AS name, 4 AS value"; - //String query = "select cast('047ae584-b8f3-4d7d-be90-257de2ab35b9', 'UINSERTUID') as name"; - //String query = "select cast(32.2, 'Decimal128(10)') as name"; - //String query = "select CAST('aa', 'Nullable(Enum16(\'aa\' = 1))')" - //String query = "SELECT tuple(1,NULL) AS x, toTypeName(x) as name"; - //String query = "SELECT CAST('bb', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r1' as col_name UNION ALL " + - // " SELECT CAST(NULL, 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r2' as col_name UNION ALL " + - // " SELECT CAST('aa', 'Nullable(Enum16(\\'aa\\' = 1,\\'bb\\' = 2))') as name, 'r3' as col_name"; - //"Array(Array(LowCardinality(Nullable(String))))" - //String query = "select CAST('aa', 'LowCardinality(Nullable(String))') as name, 'r1' as col_name UNION ALL " + - // " select CAST(NULL, 'LowCardinality(Nullable(String))') as name, 'r2' as col_name UNION ALL " + - // " select CAST('bb', 'LowCardinality(Nullable(String))') as name, 'r3' as col_name"; - //String query = "INSERT INTO insert_select_testtable (*) VALUES"; - //String query = "SELECT array(array('A', 'B'), array('C', 'D', 'E', 'F', NULL)) AS name, 'r1' AS col_name"; - //String query = "SELECT array('A', 'B') AS name, 'r1' as col_name"; - //String query = "SELECT array(array(),array(4, NULL)) AS name, 'r1' as col_name"; - //String query = "select 0.9 as name, Inf as v2, NaN as v3, 'r1' as col_name"; - //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; - //String query = "SELECT test_int_2,test_int_4,test_int_8,test_float_4,test_float_8,test_numeric,test_decimal,test_boolean,test_char,test_varchar,test_date from basicdatatype where id = 1"; - //String query = "SELECT CAST('1999-12-31', 'Date') as test_numeric"; - //SELECT toTypeName(INTERVAL 4 DAY) //interval test - //select * from system.data_type_families where name like 'Interval%'; - //String query = "select toIPv6('2a02:aa08:ecolValue2000:3100::2') as col1, toIPv4('255.168.21.255') as col2"; - //String query = "select nullable_array3_lc_t from test_insert_string where id=1 limit 1";"; - //String query = "SELECT CAST('[[[\\'1_str1_1\\',\\'str1_2\\',NULL], [NULL]], [[\\'str1_3\\',\\'str1_4\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + - // "SELECT CAST('[[[\\'2_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))') UNION ALL " + - // "SELECT CAST('[[[\\'3_str2_1\\',\\'str2_2\\',NULL],[NULL]] ]', 'Array(Array(Array(Nullable(String))))')"; - //String query = "select CAST('2019-01-01 00:01:01.123456789', 'DateTime64(9, \\'Europe/Moscow\\')')"; - //String query = "select simple_t from vertx_test_enum8 order by id"; - //String query = "select * from (select [[[]],[[]]] as a UNION ALL select [[[]],[[]]] as a) t1;"; - String query = "select arrayJoin(x), x from (select groupArray(number) as x from (select * from system.numbers limit 10000) as t) limit 3000"; - long start = System.currentTimeMillis(); - conn.query(query).execute(ret1 -> { - LOG.info("query succeeded: " + ret1.succeeded()); - if (ret1.succeeded()) { - RowSet rSet = ret1.result(); - LOG.info("rowDesc: " + rSet.columnDescriptors() + " row count: " + rSet.rowCount()); - for (Row row : rSet) { - Object colValue1 = row.get(long[].class, 1); - //Object colValue2 = row.getValue(1); - //Object v2 = row.getValue("v2"); - //Object v3 = row.getValue("v3"); - LOG.info("got row: \"" + colValue1 + "\"; tp: " + (colValue1 == null ? null : colValue1.getClass())); - } - } - //81037 if read elements on arrival - LOG.info("closing vertx, total time: " + (System.currentTimeMillis() - start) + " millis"); - conn.close(); - vertx.close(); - }); - } - - private static void prepareQueryTest(ClickhouseNativeConnection conn, Vertx vertx) { - //String query = "SELECT test_char FROM basicdatatype WHERE id = 1"; - //String query = "SELECT test_date FROM basicdatatype WHERE id = 1"; - String query = "SELECT test_float_8 FROM basicdatatype WHERE id = 1"; - conn.preparedQuery(query) - .execute(result -> { - if (result.failed()) { - LOG.error("error executing query", result.cause()); - vertx.close(); - } - Row row = result.result().iterator().next(); - LOG.info("col1: " + row.getValue(0)); - vertx.close(); - }); - } -} From 009ec4d7e903a009b93d484a098fcb98b63465aa Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 9 May 2021 22:30:40 +0300 Subject: [PATCH 155/176] rebasing onto master Signed-off-by: vladimir --- vertx-clickhouse-native-client/pom.xml | 2 +- .../ClickhouseNativePool.java | 4 ++-- .../ClickhouseNativeConnectionFactory.java | 19 ++++++++++-------- .../impl/ClickhouseNativeConnectionImpl.java | 2 +- .../impl/ClickhouseNativePoolImpl.java | 20 +++++++++---------- .../ClickhouseNativeSocketConnection.java | 2 +- 6 files changed, 26 insertions(+), 23 deletions(-) diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-native-client/pom.xml index 667aa0cff9..7e33378c9d 100644 --- a/vertx-clickhouse-native-client/pom.xml +++ b/vertx-clickhouse-native-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.0.3-SNAPSHOT + 4.1.0-SNAPSHOT vertx-clickhouse-native-client diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java index 4e67f117c5..725c4602df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java @@ -29,11 +29,11 @@ static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); - return ClickhouseNativePoolImpl.create(vertx.getOrCreateContext(), true, connectOptions, poolOptions); + return ClickhouseNativePoolImpl.create(vertx, true, connectOptions, poolOptions); } static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseNativePoolImpl.create(((VertxInternal)vertx).getOrCreateContext(), false, connectOptions, poolOptions); + return ClickhouseNativePoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java index b85aadf24a..a9e839481f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java @@ -18,6 +18,8 @@ import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.VertxInternal; +import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; @@ -34,8 +36,8 @@ public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase private final LZ4Factory lz4Factory; - ClickhouseNativeConnectionFactory(EventLoopContext context, ClickhouseNativeConnectOptions options) { - super(context, options); + ClickhouseNativeConnectionFactory(VertxInternal vertx, ClickhouseNativeConnectOptions options) { + super(vertx, options); this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); } @@ -68,7 +70,8 @@ protected void configureNetClientOptions(NetClientOptions netClientOptions) { @Override protected void doConnectInternal(Promise promise) { - doConnect().flatMap(conn -> { + PromiseInternal promiseInternal = (PromiseInternal) promise; + doConnect(ConnectionFactory.asEventLoopContext(promiseInternal.context())).flatMap(conn -> { ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; socket.init(); return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) @@ -76,19 +79,19 @@ protected void doConnectInternal(Promise promise) { }).onComplete(promise); } - private Future doConnect() { + private Future doConnect(EventLoopContext ctx) { Future soFut; try { soFut = netClient.connect(socketAddress, (String) null); } catch (Exception e) { // Client is closed - return context.failedFuture(e); + return ctx.failedFuture(e); } - return soFut.map(so -> newSocketConnection((NetSocketInternal) so)); + return soFut.map(so -> newSocketConnection(ctx, (NetSocketInternal) so)); } - private ClickhouseNativeSocketConnection newSocketConnection(NetSocketInternal socket) { + private ClickhouseNativeSocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, - preparedStatementCacheSqlFilter, context, lz4Factory); + preparedStatementCacheSqlFilter, ctx, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java index 20359a0887..87e5149741 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java @@ -31,7 +31,7 @@ public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { ClickhouseNativeConnectionFactory client; try { - client = new ClickhouseNativeConnectionFactory(ConnectionFactory.asEventLoopContext(ctx), options); + client = new ClickhouseNativeConnectionFactory(ctx.owner(), options); } catch (Exception e) { return ctx.failedFuture(e); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java index 702f335e2c..fd1675dfd5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java @@ -18,6 +18,7 @@ import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.EventLoopContext; +import io.vertx.core.impl.VertxInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; @@ -28,29 +29,28 @@ import io.vertx.sqlclient.impl.tracing.QueryTracer; public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { - public static ClickhouseNativePoolImpl create(ContextInternal context, boolean closeVertx, + public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean closeVertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); - VertxMetrics vertxMetrics = context.owner().metricsSPI(); + QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), connectOptions); + VertxMetrics vertxMetrics = vertx.metricsSPI(); ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), "sql", connectOptions.getMetricsName()) : null; - EventLoopContext eventLoopContext = ConnectionFactory.asEventLoopContext(context); - ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(eventLoopContext, - new ClickhouseNativeConnectionFactory(eventLoopContext, connectOptions), tracer, metrics, poolOptions); + ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(vertx, + new ClickhouseNativeConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { - closeFuture.onComplete(ar -> context.owner().close()); + closeFuture.future().onComplete(ar -> vertx.close()); } else { - context.addCloseHook(closeFuture); + vertx.addCloseHook(closeFuture); } return pool; } private final ClickhouseNativeConnectionFactory factory; - private ClickhouseNativePoolImpl(EventLoopContext context, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, ClientMetrics metrics, PoolOptions poolOptions) { - super(context, factory, tracer, metrics, poolOptions); + super(vertx, factory, tracer, metrics, 1, poolOptions); this.factory = factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java index fdfe2337c7..73c39a8b77 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java @@ -56,7 +56,7 @@ public void init() { void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { InitCommand cmd = new InitCommand(this, username, password, database, properties); - schedule(cmd, completionHandler); + schedule(context, cmd).onComplete(completionHandler); } public void setDatabaseMetadata(ClickhouseNativeDatabaseMetadata md) { From 8724b8274f4c1592c6a35d1353c137864382d920 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 9 May 2021 22:39:29 +0300 Subject: [PATCH 156/176] rebasing onto master Signed-off-by: vladimir --- ...ckhouseNativeBinaryDataTypeDecodeTest.java | 21 ++++++++++++++++- ...ckhouseNativeBinaryDataTypeEncodeTest.java | 23 +++++++++++++++++++ ...lickhouseNativeTextDataTypeDecodeTest.java | 23 +++++++++++++++++++ .../tck/ClickhouseNativeTransactionTest.java | 23 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java index cc9d4d8a2d..e7140867ad 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java @@ -33,7 +33,26 @@ public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDeco public static ClickhouseResource rule = new ClickhouseResource(); public ClickhouseNativeBinaryDataTypeDecodeTest() { - NUMERIC_TYPE = JDBCType.DECIMAL; + } + + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java index 540ffd626f..89c148d0c1 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java @@ -19,18 +19,41 @@ import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.BinaryDataTypeEncodeTestBase; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java index 9c016ccb8e..95edd2a034 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java @@ -16,17 +16,40 @@ import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.TextDataTypeDecodeTestBase; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java index bb4c246f55..40f47e8d0e 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java @@ -16,16 +16,39 @@ import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.data.Numeric; import io.vertx.sqlclient.tck.DataTypeTestBase; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; +import java.sql.JDBCType; + @RunWith(VertxUnitRunner.class) public class ClickhouseNativeTransactionTest extends DataTypeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Override + protected JDBCType getNumericJDBCType() { + return JDBCType.DECIMAL; + } + + @Override + protected Class getNumericClass() { + return Numeric.class; + } + + @Override + protected Number getNumericValue(Number value) { + return Numeric.create(value); + } + + @Override + protected Number getNumericValue(String value) { + return Numeric.parse(value); + } + @Override protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); From 77f21e6ec8caeb895f91f5ba3567b4962ef2270b Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 10 May 2021 09:51:25 +0300 Subject: [PATCH 157/176] throw ClassCastException in get(Class type, int position) if can't cast to requested type Signed-off-by: vladimir --- .../clickhousenative/impl/ClickhouseNativeRowImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 43a33ddd23..8415c667a5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -18,9 +18,7 @@ import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; -import java.sql.JDBCType; import java.util.List; -import java.util.Objects; public class ClickhouseNativeRowImpl implements Row { private final int rowNo; @@ -63,10 +61,13 @@ public T get(Class type, int position) { throw new IllegalArgumentException("Accessor type can not be null"); } Object value = getValue(position, type); - if (value != null && type.isAssignableFrom(value.getClass())) { + if (value == null) { + return null; + } + if (type.isAssignableFrom(value.getClass())) { return type.cast(value); } - return null; + throw new ClassCastException("can't cast value " + value + " of class " + value.getClass().getName() + " to class " + type.getName()); } @Override From 39714dd988085305b5e8baef0b12fa4fa76ee3ec Mon Sep 17 00:00:00 2001 From: vladimir Date: Mon, 10 May 2021 11:23:11 +0300 Subject: [PATCH 158/176] added column index into ClassCastException message Signed-off-by: vladimir --- .../clickhousenative/impl/ClickhouseNativeRowImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java index 8415c667a5..d805b64078 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java @@ -67,7 +67,7 @@ public T get(Class type, int position) { if (type.isAssignableFrom(value.getClass())) { return type.cast(value); } - throw new ClassCastException("can't cast value " + value + " of class " + value.getClass().getName() + " to class " + type.getName()); + throw new ClassCastException("can't cast value " + value + " at position " + position + " of class " + value.getClass().getName() + " to class " + type.getName()); } @Override From 9a076bc8535b2450a6d4ad45f4ed36722af42ca6 Mon Sep 17 00:00:00 2001 From: vladimir Date: Tue, 11 May 2021 23:17:24 +0300 Subject: [PATCH 159/176] replaced confusing 'native' to 'binary' Signed-off-by: vladimir --- .../pom.xml | 0 ...ickhouseBinaryConnectOptionsConverter.java | 14 +- .../main/java/examples/SqlClientExamples.java | 4 +- .../ClickhouseBinaryConnectOptions.java | 22 +- .../binary/ClickhouseBinaryConnection.java | 14 +- .../binary/ClickhouseBinaryPool.java | 14 +- .../binary}/ClickhouseConstants.java | 2 +- .../clickhouse/binary}/impl/BaseBlock.java | 26 +- .../clickhouse/binary}/impl/BlockInfo.java | 6 +- .../ClickhouseBinaryConnectionFactory.java | 18 +- .../impl/ClickhouseBinaryConnectionImpl.java | 21 +- .../ClickhouseBinaryConnectionUriParser.java | 6 +- .../ClickhouseBinaryDatabaseMetadata.java | 6 +- .../binary/impl/ClickhouseBinaryPoolImpl.java | 24 +- .../binary/impl/ClickhouseBinaryRowDesc.java | 10 +- .../binary/impl/ClickhouseBinaryRowImpl.java | 10 +- .../ClickhouseBinarySocketConnection.java | 18 +- .../impl/ClickhouseServerException.java | 2 +- .../binary}/impl/ColumnOrientedBlock.java | 18 +- .../binary}/impl/RowOrientedBlock.java | 20 +- .../impl/codec/BlockStreamProfileInfo.java | 2 +- .../codec/BlockStreamProfileInfoReader.java | 2 +- .../binary}/impl/codec/ByteBufUtils.java | 2 +- .../impl/codec/ClickhouseBinaryCodec.java | 20 +- .../ClickhouseBinaryColumnDescriptor.java | 26 +- .../codec/ClickhouseBinaryCommandCodec.java | 10 +- .../impl/codec/ClickhouseBinaryDecoder.java | 16 +- .../impl/codec/ClickhouseBinaryEncoder.java | 24 +- .../impl/codec/ClickhouseBinaryParamDesc.java | 8 +- .../ClickhouseBinaryPreparedStatement.java | 13 +- ...ClickhouseBinaryQueryCommandBaseCodec.java | 6 +- .../impl/codec/ClickhouseExceptionReader.java | 4 +- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../codec/ClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/ClientInfo.java | 63 ++++ .../binary}/impl/codec/ClientPacketTypes.java | 2 +- .../codec/CloseConnectionCommandCodec.java | 6 +- .../impl/codec/CloseCursorCommandCodec.java | 14 +- .../codec/CloseStatementCommandCodec.java | 12 +- .../impl/codec/ColumnOrientedBlockReader.java | 22 +- .../binary}/impl/codec/Compression.java | 2 +- .../impl/codec/DatabaseMetadataReader.java | 10 +- .../impl/codec/ExtendedQueryCommandCodec.java | 31 +- .../binary}/impl/codec/InitCommandCodec.java | 16 +- .../codec/Lz4ClickhouseStreamDataSink.java | 7 +- .../codec/Lz4ClickhouseStreamDataSource.java | 4 +- .../impl/codec/MultistringMessageReader.java | 2 +- .../binary}/impl/codec/PacketForge.java | 19 +- .../binary}/impl/codec/PacketReader.java | 21 +- .../impl/codec/PrepareStatementCodec.java | 20 +- .../binary}/impl/codec/QueryInfo.java | 2 +- .../binary}/impl/codec/QueryParsers.java | 2 +- .../impl/codec/QueryProcessingStage.java | 2 +- .../binary}/impl/codec/QueryProgressInfo.java | 2 +- .../impl/codec/QueryProgressInfoReader.java | 8 +- .../codec/RawClickhouseStreamDataSink.java | 2 +- .../codec/RawClickhouseStreamDataSource.java | 2 +- .../binary}/impl/codec/RowResultDecoder.java | 20 +- .../binary}/impl/codec/ServerPacketType.java | 2 +- .../impl/codec/SimpleQueryCommandCodec.java | 22 +- .../binary}/impl/codec/TableColumns.java | 4 +- .../impl/codec/columns/ArrayColumn.java | 10 +- .../impl/codec/columns/ArrayColumnReader.java | 14 +- .../impl/codec/columns/ArrayColumnWriter.java | 18 +- .../codec/columns/ArrayIntPairIterator.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 8 +- .../codec/columns/ClickhouseColumnReader.java | 12 +- .../codec/columns/ClickhouseColumnWriter.java | 10 +- .../impl/codec/columns/ClickhouseColumns.java | 70 ++-- .../impl/codec/columns/ColumnUtils.java | 6 +- .../impl/codec/columns/DateColumn.java | 6 +- .../impl/codec/columns/DateColumnReader.java | 6 +- .../impl/codec/columns/DateColumnWriter.java | 8 +- .../impl/codec/columns/DateTime64Column.java | 6 +- .../codec/columns/DateTime64ColumnReader.java | 8 +- .../codec/columns/DateTime64ColumnWriter.java | 8 +- .../impl/codec/columns/DateTimeColumn.java | 6 +- .../codec/columns/DateTimeColumnReader.java | 8 +- .../codec/columns/DateTimeColumnWriter.java | 8 +- .../impl/codec/columns/Decimal128Column.java | 6 +- .../impl/codec/columns/Decimal256Column.java | 6 +- .../impl/codec/columns/Decimal32Column.java | 6 +- .../codec/columns/Decimal32ColumnReader.java | 8 +- .../codec/columns/Decimal32ColumnWriter.java | 8 +- .../impl/codec/columns/Decimal64Column.java | 6 +- .../codec/columns/Decimal64ColumnReader.java | 8 +- .../codec/columns/Decimal64ColumnWriter.java | 8 +- .../impl/codec/columns/Enum16Column.java | 6 +- .../codec/columns/Enum16ColumnReader.java | 6 +- .../codec/columns/Enum16ColumnWriter.java | 8 +- .../impl/codec/columns/Enum8Column.java | 6 +- .../impl/codec/columns/Enum8ColumnReader.java | 6 +- .../impl/codec/columns/Enum8ColumnWriter.java | 8 +- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 10 +- .../columns/FixedStringColumnReader.java | 10 +- .../columns/FixedStringColumnWriter.java | 8 +- .../impl/codec/columns/Float32Column.java | 6 +- .../codec/columns/Float32ColumnReader.java | 8 +- .../codec/columns/Float32ColumnWriter.java | 8 +- .../impl/codec/columns/Float64Column.java | 6 +- .../codec/columns/Float64ColumnReader.java | 8 +- .../codec/columns/Float64ColumnWriter.java | 8 +- .../columns/GenericDecimalColumnReader.java | 8 +- .../columns/GenericDecimalColumnWriter.java | 8 +- .../impl/codec/columns/IPv4Column.java | 7 +- .../impl/codec/columns/IPv4ColumnReader.java | 6 +- .../impl/codec/columns/IPv4ColumnWriter.java | 8 +- .../impl/codec/columns/IPv6Column.java | 8 +- .../impl/codec/columns/IPv6ColumnReader.java | 8 +- .../impl/codec/columns/IPv6ColumnWriter.java | 8 +- .../impl/codec/columns/Int128Column.java | 6 +- .../codec/columns/Int128ColumnReader.java | 8 +- .../codec/columns/Int128ColumnWriter.java | 8 +- .../impl/codec/columns/IntPairIterator.java | 2 +- .../impl/codec/columns/IntervalColumn.java | 6 +- .../codec/columns/IntervalColumnReader.java | 6 +- .../codec/columns/ListPairedIterator.java | 2 +- .../codec/columns/LowCardinalityColumn.java | 12 +- .../columns/LowCardinalityColumnReader.java | 14 +- .../columns/LowCardinalityColumnWriter.java | 14 +- .../impl/codec/columns/PairedIterator.java | 2 +- .../impl/codec/columns/StringCache.java | 2 +- .../impl/codec/columns/StringColumn.java | 10 +- .../codec/columns/StringColumnReader.java | 10 +- .../codec/columns/StringColumnWriter.java | 8 +- .../binary}/impl/codec/columns/Triplet.java | 2 +- .../impl/codec/columns/UInt16Column.java | 6 +- .../codec/columns/UInt16ColumnReader.java | 8 +- .../codec/columns/UInt16ColumnWriter.java | 8 +- .../impl/codec/columns/UInt32Column.java | 6 +- .../codec/columns/UInt32ColumnReader.java | 8 +- .../codec/columns/UInt32ColumnWriter.java | 8 +- .../impl/codec/columns/UInt64Column.java | 6 +- .../codec/columns/UInt64ColumnReader.java | 8 +- .../codec/columns/UInt64ColumnWriter.java | 8 +- .../impl/codec/columns/UInt8Column.java | 6 +- .../impl/codec/columns/UInt8ColumnReader.java | 8 +- .../impl/codec/columns/UInt8ColumnWriter.java | 8 +- .../impl/codec/columns/UUIDColumn.java | 6 +- .../impl/codec/columns/UUIDColumnReader.java | 8 +- .../impl/codec/columns/UUIDColumnWriter.java | 8 +- .../clickhouse/binary}/package-info.java | 2 +- .../binary/spi/ClickhouseBinaryDriver.java | 22 +- .../clickhouse/util/ClickHouseCityHash.java | 0 .../src/main/resources/META-INF/MANIFEST.MF | 2 + .../services/io.vertx.sqlclient.spi.Driver | 1 + .../columns/ClickhouseColumnsTestReader.java | 4 +- .../ArraySerDesTest.java | 16 +- .../BasicClickhouseTest.java | 34 +- .../ClickhouseResource.java | 14 +- .../ExtendedClickhouseTest.java | 8 +- .../NestedExceptionsTest.java | 8 +- .../PacketReaderReplayTest.java | 10 +- .../clickhousenativeclient/PacketUtil.java | 0 .../vertx/clickhousenativeclient/Sleep.java | 0 .../SpecialTypesTest.java | 8 +- .../alltypes/AllTypesBase.java | 10 +- .../alltypes/BlobTest.java | 0 .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 0 .../alltypes/Enum8Test.java | 0 .../alltypes/EnumTest.java | 0 .../alltypes/FixedStringTest.java | 0 .../alltypes/Float32Test.java | 0 .../alltypes/Float64Test.java | 0 .../alltypes/HugeDecimalTest.java | 0 .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 3 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 0 .../alltypes/Int32Test.java | 0 .../alltypes/Int64Test.java | 0 .../alltypes/Int8Test.java | 0 .../StringArrayDeduplicationTester.java | 10 +- .../alltypes/StringTest.java | 0 .../alltypes/TestEnum.java | 0 .../alltypes/UInt16Test.java | 0 .../alltypes/UInt32Test.java | 0 .../alltypes/UInt64Test.java | 0 .../alltypes/UInt8Test.java | 0 .../alltypes/UUIDTest.java | 0 .../tck/ClickhouseBinaryCollectorTest.java | 2 +- ...ickhouseBinaryConnectionAutoRetryTest.java | 6 +- .../tck/ClickhouseBinaryConnectionTest.java | 10 +- .../ClickhouseBinaryDataTypeDecodeTest.java | 4 +- .../ClickhouseBinaryDataTypeEncodeTest.java | 2 +- .../tck/ClickhouseBinaryDriverTest.java | 2 +- .../ClickhouseBinaryPreparedBatchTest.java | 2 +- ...ickhouseBinaryPreparedQueryCachedTest.java | 10 +- ...ickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../ClickhouseBinaryPreparedQueryTest.java | 2 +- ...ClickhouseBinaryPreparedQueryTestBase.java | 2 +- ...ClickhouseBinarySimpleQueryPooledTest.java | 2 +- .../tck/ClickhouseBinarySimpleQueryTest.java | 2 +- ...lickhouseBinaryTextDataTypeDecodeTest.java | 2 +- .../tck/ClickhouseBinaryTracingTest.java | 6 +- .../tck/ClickhouseBinaryTransactionTest.java | 2 +- .../tck/ClientConfig.java | 16 +- .../src/test/python/gen_all_types_tables.py | 0 ..._testConcurrentClose_with_compression.yaml | 0 .../resources/forged_nested_exception.yaml | 0 .../src/test/resources/init.sql | 0 .../insert_prepare_with_compression.yaml | 0 .../src/test/resources/log4j2-test.xml | 0 ...able_low_cardinality_with_compression.yaml | 0 ...e_low_cardinality_without_compression.yaml | 0 ...f_nullable_string_without_compression.yaml | 0 ...elect_empty_array_without_compression.yaml | 0 ...ize_and_2_datablocks_with_compression.yaml | 0 .../impl/codec/ClientInfo.java | 64 ---- .../src/main/resources/META-INF/MANIFEST.MF | 2 - .../services/io.vertx.sqlclient.spi.Driver | 1 - .../src/test/python/all_types_table.sql | 354 ------------------ 223 files changed, 847 insertions(+), 1202 deletions(-) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/pom.xml (100%) rename vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java => vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java (57%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/main/java/examples/SqlClientExamples.java (98%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java (53%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java (59%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/ClickhouseConstants.java (98%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/BaseBlock.java (60%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/BlockInfo.java (91%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java (83%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java (63%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java (93%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java (95%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java (66%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java (65%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java (87%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/ClickhouseServerException.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/ColumnOrientedBlock.java (66%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/RowOrientedBlock.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/BlockStreamProfileInfo.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/BlockStreamProfileInfoReader.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ByteBufUtils.java (97%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java (71%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java (87%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java (79%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java (63%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java (82%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java (68%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java (76%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java (65%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseExceptionReader.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseStreamDataSink.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClickhouseStreamDataSource.java (95%) create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ClientPacketTypes.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseConnectionCommandCodec.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseCursorCommandCodec.java (66%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/CloseStatementCommandCodec.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ColumnOrientedBlockReader.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Compression.java (89%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/DatabaseMetadataReader.java (93%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ExtendedQueryCommandCodec.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/InitCommandCodec.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Lz4ClickhouseStreamDataSink.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/Lz4ClickhouseStreamDataSource.java (98%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/MultistringMessageReader.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PacketForge.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PacketReader.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/PrepareStatementCodec.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryInfo.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryParsers.java (99%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProcessingStage.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProgressInfo.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/QueryProgressInfoReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RawClickhouseStreamDataSink.java (96%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RawClickhouseStreamDataSource.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/RowResultDecoder.java (68%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/ServerPacketType.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/SimpleQueryCommandCodec.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/TableColumns.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumn.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumnReader.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayColumnWriter.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ArrayIntPairIterator.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumn.java (73%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnReader.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnWriter.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumns.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ColumnUtils.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumn.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateColumnWriter.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64ColumnReader.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTime64ColumnWriter.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumn.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/DateTimeColumnWriter.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal128Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal256Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32ColumnReader.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal32ColumnWriter.java (76%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64ColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Decimal64ColumnWriter.java (76%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum16ColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Enum8ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnDecoder.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnEncoder.java (97%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/EnumResolutionMethod.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumn.java (73%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/FixedStringColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32Column.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32ColumnReader.java (80%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float32ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64Column.java (83%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64ColumnReader.java (80%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Float64ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/GenericDecimalColumnReader.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/GenericDecimalColumnWriter.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4Column.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4ColumnReader.java (89%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv4ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6Column.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6ColumnReader.java (82%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IPv6ColumnWriter.java (78%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128Column.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128ColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Int128ColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntPairIterator.java (93%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntervalColumn.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/IntervalColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ListPairedIterator.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumn.java (72%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumnReader.java (87%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/LowCardinalityColumnWriter.java (90%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/PairedIterator.java (95%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringCache.java (94%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumn.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumnReader.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/StringColumnWriter.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/Triplet.java (92%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16Column.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt16ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt32ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64Column.java (85%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64ColumnReader.java (88%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt64ColumnWriter.java (75%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8Column.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8ColumnReader.java (86%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UInt8ColumnWriter.java (74%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumn.java (84%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumnReader.java (81%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/UUIDColumnWriter.java (77%) rename {vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary}/package-info.java (91%) rename vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java => vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java (58%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java (100%) create mode 100644 vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF create mode 100644 vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver rename {vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary}/impl/codec/columns/ClickhouseColumnsTestReader.java (94%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java (86%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java (84%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java (85%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java (88%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java (93%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/Sleep.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java (95%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java (95%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java (90%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java (99%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java (88%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java (100%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java (93%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java (87%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java (82%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java (93%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java (90%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java (87%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java (88%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java (97%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java (95%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (96%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java (88%) rename vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java => vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java (96%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java (74%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/python/gen_all_types_tables.py (100%) rename vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml => vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/forged_nested_exception.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/init.sql (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/insert_prepare_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/log4j2-test.xml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/nullable_low_cardinality_with_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/nullable_low_cardinality_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/select_array_of_nullable_string_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/select_empty_array_without_compression.yaml (100%) rename {vertx-clickhouse-native-client => vertx-clickhouse-binary-client}/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml (100%) delete mode 100644 vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java delete mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF delete mode 100644 vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver delete mode 100644 vertx-clickhouse-native-client/src/test/python/all_types_table.sql diff --git a/vertx-clickhouse-native-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml similarity index 100% rename from vertx-clickhouse-native-client/pom.xml rename to vertx-clickhouse-binary-client/pom.xml diff --git a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java similarity index 57% rename from vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java rename to vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java index b9db59e66f..2e95b6fe11 100644 --- a/vertx-clickhouse-native-client/src/main/generated/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptionsConverter.java +++ b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonArray; @@ -7,23 +7,23 @@ import java.time.format.DateTimeFormatter; /** - * Converter and mapper for {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions}. - * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions} original class using Vert.x codegen. + * Converter and mapper for {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. */ -public class ClickhouseNativeConnectOptionsConverter { +public class ClickhouseBinaryConnectOptionsConverter { - public static void fromJson(Iterable> json, ClickhouseNativeConnectOptions obj) { + public static void fromJson(Iterable> json, ClickhouseBinaryConnectOptions obj) { for (java.util.Map.Entry member : json) { switch (member.getKey()) { } } } - public static void toJson(ClickhouseNativeConnectOptions obj, JsonObject json) { + public static void toJson(ClickhouseBinaryConnectOptions obj, JsonObject json) { toJson(obj, json.getMap()); } - public static void toJson(ClickhouseNativeConnectOptions obj, java.util.Map json) { + public static void toJson(ClickhouseBinaryConnectOptions obj, java.util.Map json) { } } diff --git a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java similarity index 98% rename from vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java rename to vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index 8d03702338..d04097aeb9 100644 --- a/vertx-clickhouse-native-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -13,7 +13,7 @@ package examples; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Vertx; import io.vertx.core.tracing.TracingPolicy; import io.vertx.docgen.Source; @@ -278,7 +278,7 @@ public void usingCursors03(SqlConnection connection) { }); } - public void tracing01(ClickhouseNativeConnectOptions options) { + public void tracing01(ClickhouseBinaryConnectOptions options) { options.setTracingPolicy(TracingPolicy.ALWAYS); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java similarity index 53% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java index 30ddeb6c00..b9f39e5dd9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnectOptions.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java @@ -11,35 +11,35 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionUriParser; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; @DataObject(generateConverter = true) -public class ClickhouseNativeConnectOptions extends SqlConnectOptions { +public class ClickhouseBinaryConnectOptions extends SqlConnectOptions { - public static ClickhouseNativeConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { - JsonObject parsedConfiguration = ClickhouseNativeConnectionUriParser.parse(connectionUri); - return new ClickhouseNativeConnectOptions(parsedConfiguration); + public static ClickhouseBinaryConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { + JsonObject parsedConfiguration = ClickhouseBinaryConnectionUriParser.parse(connectionUri); + return new ClickhouseBinaryConnectOptions(parsedConfiguration); } - public ClickhouseNativeConnectOptions() { + public ClickhouseBinaryConnectOptions() { super(); } - public ClickhouseNativeConnectOptions(JsonObject json) { + public ClickhouseBinaryConnectOptions(JsonObject json) { super(json); - ClickhouseNativeConnectOptionsConverter.fromJson(json, this); + ClickhouseBinaryConnectOptionsConverter.fromJson(json, this); } - public ClickhouseNativeConnectOptions(SqlConnectOptions other) { + public ClickhouseBinaryConnectOptions(SqlConnectOptions other) { super(other); } - public ClickhouseNativeConnectOptions(ClickhouseNativeConnectOptions other) { + public ClickhouseBinaryConnectOptions(ClickhouseBinaryConnectOptions other) { super(other); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java similarity index 59% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java index 91dd9f0029..7bae45479e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativeConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeConnectionImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; @@ -23,15 +23,15 @@ import io.vertx.sqlclient.SqlConnection; @VertxGen -public interface ClickhouseNativeConnection extends SqlConnection { - static void connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, Handler> handler) { - Future fut = connect(vertx, connectOptions); +public interface ClickhouseBinaryConnection extends SqlConnection { + static void connect(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, Handler> handler) { + Future fut = connect(vertx, connectOptions); if (handler != null) { fut.onComplete(handler); } } - static Future connect(Vertx vertx, ClickhouseNativeConnectOptions connectOptions) { - return ClickhouseNativeConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); + static Future connect(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions) { + return ClickhouseBinaryConnectionImpl.connect((ContextInternal) vertx.getOrCreateContext(), connectOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java index 725c4602df..9faecb2cce 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseNativePool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativePoolImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; @@ -22,18 +22,18 @@ import io.vertx.sqlclient.PoolOptions; @VertxGen -public interface ClickhouseNativePool extends Pool { - static ClickhouseNativePool pool(ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { +public interface ClickhouseBinaryPool extends Pool { + static ClickhouseBinaryPool pool(ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { if (Vertx.currentContext() != null) { throw new IllegalStateException("Running in a Vertx context => use ClickhouseNativePool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); } VertxOptions vertxOptions = new VertxOptions(); VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); - return ClickhouseNativePoolImpl.create(vertx, true, connectOptions, poolOptions); + return ClickhouseBinaryPoolImpl.create(vertx, true, connectOptions, poolOptions); } - static ClickhouseNativePool pool(Vertx vertx, ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseNativePoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); + static ClickhouseBinaryPool pool(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { + return ClickhouseBinaryPoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java similarity index 98% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java index 94e50719e6..79bae6273a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/ClickhouseConstants.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java similarity index 60% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java index 3de87a8556..96e9d59f93 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BaseBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.util.ArrayList; @@ -22,14 +22,14 @@ import java.util.Map; public class BaseBlock { - private final Map columnsWithTypes; - protected final ClickhouseNativeRowDesc rowDesc; + private final Map columnsWithTypes; + protected final ClickhouseBinaryRowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - protected final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseBinaryDatabaseMetadata md; - public BaseBlock(Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + public BaseBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseBinaryDatabaseMetadata md) { this.columnsWithTypes = columnsWithTypes; this.rowDesc = buildRowDescriptor(columnsWithTypes); this.data = data; @@ -37,7 +37,7 @@ public BaseBlock(Map columnsWithTypes, this.md = md; } - public Map getColumnsWithTypes() { + public Map getColumnsWithTypes() { return columnsWithTypes; } @@ -49,17 +49,17 @@ public BlockInfo getBlockInfo() { return blockInfo; } - public ClickhouseNativeDatabaseMetadata getMd() { + public ClickhouseBinaryDatabaseMetadata getMd() { return md; } - public ClickhouseNativeRowDesc rowDesc() { + public ClickhouseBinaryRowDesc rowDesc() { return rowDesc; } - private ClickhouseNativeRowDesc buildRowDescriptor(Map columnsWithTypes) { + private ClickhouseBinaryRowDesc buildRowDescriptor(Map columnsWithTypes) { List columnNames = new ArrayList<>(columnsWithTypes.keySet()); List columnTypes = new ArrayList<>(columnsWithTypes.values()); - return new ClickhouseNativeRowDesc(columnNames, columnTypes); + return new ClickhouseBinaryRowDesc(columnNames, columnTypes); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java similarity index 91% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java index 2d0a2f11fd..d4f8726a84 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/BlockInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java index a9e839481f..743397ce31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; @@ -31,12 +31,12 @@ import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; import net.jpountz.lz4.LZ4Factory; -public class ClickhouseNativeConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeConnectionFactory.class); +public class ClickhouseBinaryConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryConnectionFactory.class); private final LZ4Factory lz4Factory; - ClickhouseNativeConnectionFactory(VertxInternal vertx, ClickhouseNativeConnectOptions options) { + ClickhouseBinaryConnectionFactory(VertxInternal vertx, ClickhouseBinaryConnectOptions options) { super(vertx, options); this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); } @@ -72,7 +72,7 @@ protected void configureNetClientOptions(NetClientOptions netClientOptions) { protected void doConnectInternal(Promise promise) { PromiseInternal promiseInternal = (PromiseInternal) promise; doConnect(ConnectionFactory.asEventLoopContext(promiseInternal.context())).flatMap(conn -> { - ClickhouseNativeSocketConnection socket = (ClickhouseNativeSocketConnection) conn; + ClickhouseBinarySocketConnection socket = (ClickhouseBinarySocketConnection) conn; socket.init(); return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) .map(conn); @@ -90,8 +90,8 @@ private Future doConnect(EventLoopContext ctx) { return soFut.map(so -> newSocketConnection(ctx, (NetSocketInternal) so)); } - private ClickhouseNativeSocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { - return new ClickhouseNativeSocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, + private ClickhouseBinarySocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { + return new ClickhouseBinarySocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, ctx, lz4Factory); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java similarity index 63% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java index 87e5149741..b1fedcee47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -11,27 +11,26 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; -public class ClickhouseNativeConnectionImpl extends SqlConnectionImpl implements ClickhouseNativeConnection { - private final ClickhouseNativeConnectionFactory factory; +public class ClickhouseBinaryConnectionImpl extends SqlConnectionImpl implements ClickhouseBinaryConnection { + private final ClickhouseBinaryConnectionFactory factory; - public static Future connect(ContextInternal ctx, ClickhouseNativeConnectOptions options) { - ClickhouseNativeConnectionFactory client; + public static Future connect(ContextInternal ctx, ClickhouseBinaryConnectOptions options) { + ClickhouseBinaryConnectionFactory client; try { - client = new ClickhouseNativeConnectionFactory(ctx.owner(), options); + client = new ClickhouseBinaryConnectionFactory(ctx.owner(), options); } catch (Exception e) { return ctx.failedFuture(e); } @@ -40,13 +39,13 @@ public static Future connect(ContextInternal ctx, Cl PromiseInternal promise = ctx.promise(); client.connect(promise); return promise.future().map(conn -> { - ClickhouseNativeConnectionImpl mySQLConnection = new ClickhouseNativeConnectionImpl(client, ctx, conn, tracer, null); + ClickhouseBinaryConnectionImpl mySQLConnection = new ClickhouseBinaryConnectionImpl(client, ctx, conn, tracer, null); conn.init(mySQLConnection); return mySQLConnection; }); } - ClickhouseNativeConnectionImpl(ClickhouseNativeConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { + ClickhouseBinaryConnectionImpl(ClickhouseBinaryConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { super(context, conn, tracer, metrics); this.factory = factory; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java index b5ca1177a8..e9c9f057c3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeConnectionUriParser.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.core.json.JsonObject; @@ -23,7 +23,7 @@ import java.util.stream.Collectors; import java.util.AbstractMap.SimpleImmutableEntry; -public class ClickhouseNativeConnectionUriParser { +public class ClickhouseBinaryConnectionUriParser { public static JsonObject parse(String connectionUri) { try { JsonObject configuration = new JsonObject(); @@ -63,7 +63,7 @@ public static Map queryAsMap(String query) { return Collections.emptyMap(); } return Arrays.stream(query.split("&")) - .map(ClickhouseNativeConnectionUriParser::asEntry) + .map(ClickhouseBinaryConnectionUriParser::asEntry) .collect(Collectors.toMap(SimpleImmutableEntry::getKey, SimpleImmutableEntry::getValue)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java index 09a00fa99e..d4876c2798 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeDatabaseMetadata.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; @@ -20,7 +20,7 @@ import java.time.ZoneId; import java.util.Map; -public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { +public class ClickhouseBinaryDatabaseMetadata implements DatabaseMetadata { private final String productName; private final String fullVersion; private final int major; @@ -39,7 +39,7 @@ public class ClickhouseNativeDatabaseMetadata implements DatabaseMetadata { private final boolean saturateExtraNanos; private final boolean removeTrailingZerosInFixedStrings; - public ClickhouseNativeDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, + public ClickhouseBinaryDatabaseMetadata(String productName, String fullVersion, int major, int minor, int revision, int patchVersion, String displayName, ZoneId serverZoneId, ZoneId defaultZoneId, String fullClientName, Map properties, Charset stringCharset, Duration yearDuration, Duration quarterDuration, Duration monthDuration, diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java similarity index 66% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java index fd1675dfd5..2ce15a2fd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativePoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java @@ -11,32 +11,30 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; -import io.vertx.core.impl.EventLoopContext; import io.vertx.core.impl.VertxInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.ConnectionFactory; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; -public class ClickhouseNativePoolImpl extends PoolBase implements ClickhouseNativePool { - public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean closeVertx, - ClickhouseNativeConnectOptions connectOptions, PoolOptions poolOptions) { +public class ClickhouseBinaryPoolImpl extends PoolBase implements ClickhouseBinaryPool { + public static ClickhouseBinaryPoolImpl create(VertxInternal vertx, boolean closeVertx, + ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), connectOptions); VertxMetrics vertxMetrics = vertx.metricsSPI(); ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), "sql", connectOptions.getMetricsName()) : null; - ClickhouseNativePoolImpl pool = new ClickhouseNativePoolImpl(vertx, - new ClickhouseNativeConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); + ClickhouseBinaryPoolImpl pool = new ClickhouseBinaryPoolImpl(vertx, + new ClickhouseBinaryConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.future().onComplete(ar -> vertx.close()); @@ -46,9 +44,9 @@ public static ClickhouseNativePoolImpl create(VertxInternal vertx, boolean close return pool; } - private final ClickhouseNativeConnectionFactory factory; + private final ClickhouseBinaryConnectionFactory factory; - private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnectionFactory factory, QueryTracer tracer, + private ClickhouseBinaryPoolImpl(VertxInternal vertx, ClickhouseBinaryConnectionFactory factory, QueryTracer tracer, ClientMetrics metrics, PoolOptions poolOptions) { super(vertx, factory, tracer, metrics, 1, poolOptions); this.factory = factory; @@ -56,6 +54,6 @@ private ClickhouseNativePoolImpl(VertxInternal vertx, ClickhouseNativeConnection @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { - return new ClickhouseNativeConnectionImpl(factory, context, conn, tracer, metrics); + return new ClickhouseBinaryConnectionImpl(factory, context, conn, tracer, metrics); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java similarity index 65% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java index 75838ca170..dce90eb334 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; @@ -19,14 +19,14 @@ import java.util.Collections; import java.util.List; -public class ClickhouseNativeRowDesc extends RowDesc { - public static final ClickhouseNativeRowDesc EMPTY = new ClickhouseNativeRowDesc(Collections.emptyList(), Collections.emptyList()); +public class ClickhouseBinaryRowDesc extends RowDesc { + public static final ClickhouseBinaryRowDesc EMPTY = new ClickhouseBinaryRowDesc(Collections.emptyList(), Collections.emptyList()); - public ClickhouseNativeRowDesc(List columnNames) { + public ClickhouseBinaryRowDesc(List columnNames) { super(columnNames); } - public ClickhouseNativeRowDesc(List columnNames, List columnDescriptors) { + public ClickhouseBinaryRowDesc(List columnNames, List columnDescriptors) { super(columnNames, columnDescriptors); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java index d805b64078..a5ccd677b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeRowImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java @@ -11,22 +11,22 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; import java.util.List; -public class ClickhouseNativeRowImpl implements Row { +public class ClickhouseBinaryRowImpl implements Row { private final int rowNo; private final Charset stringCharset; - private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseBinaryRowDesc rowDesc; private final ColumnOrientedBlock block; - public ClickhouseNativeRowImpl(int rowNo, ClickhouseNativeRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseNativeDatabaseMetadata md) { + public ClickhouseBinaryRowImpl(int rowNo, ClickhouseBinaryRowDesc rowDesc, ColumnOrientedBlock block, ClickhouseBinaryDatabaseMetadata md) { this.rowNo = rowNo; this.rowDesc = rowDesc; this.block = block; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java index 73c39a8b77..17bec4badb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/ClickhouseNativeSocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeCodec; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; @@ -28,15 +28,15 @@ import java.util.UUID; import java.util.function.Predicate; -public class ClickhouseNativeSocketConnection extends SocketConnectionBase { - private ClickhouseNativeCodec codec; - private ClickhouseNativeDatabaseMetadata md; +public class ClickhouseBinarySocketConnection extends SocketConnectionBase { + private ClickhouseBinaryCodec codec; + private ClickhouseBinaryDatabaseMetadata md; private UUID psId; private String ourCursorId; private final LZ4Factory lz4Factory; - public ClickhouseNativeSocketConnection(NetSocketInternal socket, + public ClickhouseBinarySocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, int preparedStatementCacheSize, Predicate preparedStatementCacheSqlFilter, @@ -48,7 +48,7 @@ public ClickhouseNativeSocketConnection(NetSocketInternal socket, @Override public void init() { - codec = new ClickhouseNativeCodec(this); + codec = new ClickhouseBinaryCodec(this); ChannelPipeline pipeline = socket.channelHandlerContext().pipeline(); pipeline.addBefore("handler", "codec", codec); super.init(); @@ -59,7 +59,7 @@ void sendStartupMessage(String username, String password, String database, Map columnsWithTypes, - List data, BlockInfo blockInfo, ClickhouseNativeDatabaseMetadata md) { + public ColumnOrientedBlock(Map columnsWithTypes, + List data, BlockInfo blockInfo, ClickhouseBinaryDatabaseMetadata md) { super(columnsWithTypes, data, blockInfo, md); } @@ -41,16 +41,16 @@ public int numRows() { } } - public List rows() { + public List rows() { int numRows = numRows(); - List ret = new ArrayList<>(numRows); + List ret = new ArrayList<>(numRows); for (int i = 0; i < numRows; ++i) { ret.add(row(i)); } return ret; } - public ClickhouseNativeRowImpl row(int rowNo) { - return new ClickhouseNativeRowImpl(rowNo, rowDesc, this, md); + public ClickhouseBinaryRowImpl row(int rowNo) { + return new ClickhouseBinaryRowImpl(rowNo, rowDesc, this, md); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java index 162d53a8c7..2661eb6157 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl; +package io.vertx.clickhouse.clickhouse.binary.impl; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; @@ -27,11 +27,11 @@ public class RowOrientedBlock { private final RowDesc rowDesc; private final List data; private final BlockInfo blockInfo; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private final ClickhouseColumnWriter[] writers; public RowOrientedBlock(RowDesc rowDesc, - List data, ClickhouseNativeDatabaseMetadata md) { + List data, ClickhouseBinaryDatabaseMetadata md) { this.rowDesc = rowDesc; this.data = data; this.blockInfo = new BlockInfo(); @@ -42,7 +42,7 @@ public RowOrientedBlock(RowDesc rowDesc, private ClickhouseColumnWriter[] buildWriters() { ClickhouseColumnWriter[] ret = new ClickhouseColumnWriter[nColumns()]; for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { - ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseBinaryColumnDescriptor descr = (ClickhouseBinaryColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); ClickhouseColumnWriter writer = ClickhouseColumns.columnForSpec(descr, md).writer(data, columnIndex); ret[columnIndex] = writer; } @@ -60,7 +60,7 @@ public void serializeAsBlock(ClickhouseStreamDataSink sink, int fromRow, int toR sink.writeULeb128(nRows); //TODO: maybe serialize into tiny sinks/blocks here, then return to caller for (int columnIndex = 0; columnIndex < nColumns(); ++columnIndex) { - ClickhouseNativeColumnDescriptor descr = (ClickhouseNativeColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); + ClickhouseBinaryColumnDescriptor descr = (ClickhouseBinaryColumnDescriptor) rowDesc.columnDescriptor().get(columnIndex); sink.writePascalString(descr.name()); sink.writePascalString(descr.getUnparsedNativeType()); writers[columnIndex].serializeColumn(sink, fromRow, toRow); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java index 20d00723ed..08f197774e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class BlockStreamProfileInfo { private final int rows; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java index 125b455be7..7a72282b4e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java index baa2df84eb..e60ba5ddf4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java similarity index 71% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java index fe07e5b9a7..dfdcb077a7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -25,15 +25,15 @@ import java.util.ArrayDeque; import java.util.Iterator; -public class ClickhouseNativeCodec extends CombinedChannelDuplexHandler { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeCodec.class); +public class ClickhouseBinaryCodec extends CombinedChannelDuplexHandler { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryCodec.class); - private ArrayDeque> inflight; + private ArrayDeque> inflight; - public ClickhouseNativeCodec(ClickhouseNativeSocketConnection conn) { + public ClickhouseBinaryCodec(ClickhouseBinarySocketConnection conn) { inflight = new ArrayDeque<>(); - ClickhouseNativeEncoder encoder = new ClickhouseNativeEncoder(inflight, conn); - ClickhouseNativeDecoder decoder = new ClickhouseNativeDecoder(inflight, conn); + ClickhouseBinaryEncoder encoder = new ClickhouseBinaryEncoder(inflight, conn); + ClickhouseBinaryDecoder decoder = new ClickhouseBinaryDecoder(inflight, conn); init(decoder, encoder); } @@ -44,8 +44,8 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E } private void fail(ChannelHandlerContext ctx, Throwable cause) { - for (Iterator> it = inflight.iterator(); it.hasNext();) { - ClickhouseNativeCommandCodec codec = it.next(); + for (Iterator> it = inflight.iterator(); it.hasNext();) { + ClickhouseBinaryCommandCodec codec = it.next(); it.remove(); CommandResponse failure = CommandResponse.failure(cause); failure.cmd = (CommandBase) codec.cmd; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index 345eb05e16..cce4542c24 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.math.BigInteger; import java.sql.JDBCType; -public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { +public class ClickhouseBinaryColumnDescriptor implements ColumnDescriptor { public static final int NOSIZE = -1; private final String name; @@ -37,9 +37,9 @@ public class ClickhouseNativeColumnDescriptor implements ColumnDescriptor { private final Integer scale; private final int arrayDimensionsCount; - private final ClickhouseNativeColumnDescriptor nested; + private final ClickhouseBinaryColumnDescriptor nested; - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue) { @@ -47,16 +47,16 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, minValue, maxValue, null, null, -1, null); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, - int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseBinaryColumnDescriptor nested) { this(name, unparsedNativeType, nestedType, isArray, elementSize, jdbcType, nullable, unsigned, lowCardinality, minValue, maxValue, null, null, arrayDimensionsCount, nested); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, @@ -65,12 +65,12 @@ public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, minValue, maxValue, precision, scale, -1, null); } - public ClickhouseNativeColumnDescriptor(String name, String unparsedNativeType, String nestedType, + public ClickhouseBinaryColumnDescriptor(String name, String unparsedNativeType, String nestedType, boolean isArray, int elementSize, JDBCType jdbcType, boolean nullable, boolean unsigned, boolean lowCardinality, Number minValue, Number maxValue, Integer precision, Integer scale, - int arrayDimensionsCount, ClickhouseNativeColumnDescriptor nested) { + int arrayDimensionsCount, ClickhouseBinaryColumnDescriptor nested) { this.name = name; this.unparsedNativeType = unparsedNativeType; this.nestedType = nestedType; @@ -146,7 +146,7 @@ public String getNestedType() { return nestedType; } - public ClickhouseNativeColumnDescriptor getNestedDescr() { + public ClickhouseBinaryColumnDescriptor getNestedDescr() { return nested; } @@ -158,12 +158,12 @@ public Integer getScale() { return scale; } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { - return new ClickhouseNativeColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, + public ClickhouseBinaryColumnDescriptor copyWithModifiers(boolean newArray, boolean newLowCardinality, boolean newNullable) { + return new ClickhouseBinaryColumnDescriptor(name, unparsedNativeType, nestedType, newArray, elementSize, jdbcType, newNullable, unsigned, newLowCardinality, minValue, maxValue, precision, scale, arrayDimensionsCount, nested); } - public ClickhouseNativeColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { + public ClickhouseBinaryColumnDescriptor copyWithModifiers(boolean newLowCardinality, boolean newNullable) { return copyWithModifiers(isArray, newLowCardinality, newNullable); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java similarity index 79% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java index ef02f4843d..1216082603 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -19,16 +19,16 @@ import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.impl.command.CommandResponse; -abstract class ClickhouseNativeCommandCodec> { - protected ClickhouseNativeEncoder encoder; +abstract class ClickhouseBinaryCommandCodec> { + protected ClickhouseBinaryEncoder encoder; protected Handler> completionHandler; protected final C cmd; - protected ClickhouseNativeCommandCodec(C cmd) { + protected ClickhouseBinaryCommandCodec(C cmd) { this.cmd = cmd; } - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { this.encoder = encoder; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java similarity index 63% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java index 08b7cea9c4..29db476266 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -11,31 +11,31 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; import java.util.List; -public class ClickhouseNativeDecoder extends ByteToMessageDecoder { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeDecoder.class); +public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryDecoder.class); - private final ArrayDeque> inflight; - private final ClickhouseNativeSocketConnection conn; - public ClickhouseNativeDecoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + private final ArrayDeque> inflight; + private final ClickhouseBinarySocketConnection conn; + public ClickhouseBinaryDecoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; this.conn = conn; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - ClickhouseNativeCommandCodec codec = inflight.peek(); + ClickhouseBinaryCommandCodec codec = inflight.peek(); codec.decode(ctx, in); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java index 4154d71ed1..805f7f8b47 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -11,32 +11,32 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; -public class ClickhouseNativeEncoder extends ChannelOutboundHandlerAdapter { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseNativeEncoder.class); +public class ClickhouseBinaryEncoder extends ChannelOutboundHandlerAdapter { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryEncoder.class); - private final ArrayDeque> inflight; - private final ClickhouseNativeSocketConnection conn; + private final ArrayDeque> inflight; + private final ClickhouseBinarySocketConnection conn; private ChannelHandlerContext chctx; - public ClickhouseNativeEncoder(ArrayDeque> inflight, ClickhouseNativeSocketConnection conn) { + public ClickhouseBinaryEncoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; this.conn = conn; } - ClickhouseNativeSocketConnection getConn() { + ClickhouseBinarySocketConnection getConn() { return conn; } @@ -69,9 +69,9 @@ void write(CommandBase cmd) { if (LOG.isDebugEnabled()) { LOG.debug("got command: " + cmd.getClass()); } - ClickhouseNativeCommandCodec codec = wrap(cmd); + ClickhouseBinaryCommandCodec codec = wrap(cmd); codec.completionHandler = resp -> { - ClickhouseNativeCommandCodec c = inflight.poll(); + ClickhouseBinaryCommandCodec c = inflight.poll(); resp.cmd = (CommandBase) c.cmd; chctx.fireChannelRead(resp); }; @@ -79,7 +79,7 @@ void write(CommandBase cmd) { codec.encode(this); } - private ClickhouseNativeCommandCodec wrap(CommandBase cmd) { + private ClickhouseBinaryCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { @@ -94,7 +94,7 @@ void write(CommandBase cmd) { ExtendedQueryCommand ecmd = (ExtendedQueryCommand) cmd; QueryInfo queryInfo; if (ecmd.preparedStatement() != null) { - queryInfo = ((ClickhouseNativePreparedStatement) ecmd.preparedStatement()).queryInfo(); + queryInfo = ((ClickhouseBinaryPreparedStatement) ecmd.preparedStatement()).queryInfo(); } else { queryInfo = QueryInfo.parse(ecmd.sql()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java similarity index 68% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java index 0f4922ab87..5fe13ea7d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeParamDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; import java.util.List; -public class ClickhouseNativeParamDesc extends ParamDesc { - private final List paramDescr; +public class ClickhouseBinaryParamDesc extends ParamDesc { + private final List paramDescr; - public ClickhouseNativeParamDesc(List paramDescr) { + public ClickhouseBinaryParamDesc(List paramDescr) { this.paramDescr = paramDescr; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java index 32bc02019f..aad4ed18c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativePreparedStatement.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java @@ -11,26 +11,25 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.impl.ParamDesc; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.RowDesc; import io.vertx.sqlclient.impl.TupleInternal; -import java.util.Map; import java.util.UUID; -public class ClickhouseNativePreparedStatement implements PreparedStatement { +public class ClickhouseBinaryPreparedStatement implements PreparedStatement { private final String sql; - private final ClickhouseNativeParamDesc paramDesc; - private final ClickhouseNativeRowDesc rowDesc; + private final ClickhouseBinaryParamDesc paramDesc; + private final ClickhouseBinaryRowDesc rowDesc; private final QueryInfo queryInfo; private final boolean sentQuery; private final UUID psId; - public ClickhouseNativePreparedStatement(String sql, ClickhouseNativeParamDesc paramDesc, ClickhouseNativeRowDesc rowDesc, + public ClickhouseBinaryPreparedStatement(String sql, ClickhouseBinaryParamDesc paramDesc, ClickhouseBinaryRowDesc rowDesc, QueryInfo queryInfo, boolean sentQuery, UUID psId) { this.sql = sql; this.paramDesc = paramDesc; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java similarity index 65% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java index c85f55cfe1..d1432047fb 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseNativeQueryCommandBaseCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; -abstract class ClickhouseNativeQueryCommandBaseCodec > extends ClickhouseNativeCommandCodec{ - protected ClickhouseNativeQueryCommandBaseCodec(C cmd) { +abstract class ClickhouseBinaryQueryCommandBaseCodec> extends ClickhouseBinaryCommandCodec { + protected ClickhouseBinaryQueryCommandBaseCodec(C cmd) { super(cmd); } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java index 066e7cd411..a1872467a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java index 787dad8205..ca77bb7ac4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public interface ClickhouseStreamDataSink { void writeULeb128(int value); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java index a041808b51..2ee1387744 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java new file mode 100644 index 0000000000..bfc5d11aee --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java @@ -0,0 +1,63 @@ +/* + * + * Copyright (c) 2021 Vladimir Vishnevskii + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + * + */ + +package io.vertx.clickhouse.clickhouse.binary.impl.codec; + +import io.netty.buffer.ByteBuf; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; + +import java.util.Map; + +public class ClientInfo { + public static final int NO_QUERY = 0; + public static final int INITIAL_QUERY = 1; + + private final ClickhouseBinaryDatabaseMetadata meta; + + public ClientInfo(ClickhouseBinaryDatabaseMetadata meta) { + this.meta = meta; + } + + public void serializeTo(ByteBuf buf) { + int serverRevision = meta.getRevision(); + if (serverRevision < ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { + throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", + serverRevision, ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO)); + } + buf.writeByte(INITIAL_QUERY); + Map properties = meta.getProperties(); + + //initial_user + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_USER, ""), buf); + //initial_query_id + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_QUERY_ID, ""), buf); + //initial_address + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); + //interface: TCP + buf.writeByte(1); + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_USER, System.getProperty("user.name")), buf); + ByteBufUtils.writePascalString(properties.getOrDefault(ClickhouseConstants.OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); + ByteBufUtils.writePascalString(meta.getFullClientName(), buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MAJOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_MINOR, buf); + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_REVISION, buf); + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { + //quota_key + ByteBufUtils.writePascalString("", buf); + } + if (serverRevision >= ClickhouseConstants.DBMS_MIN_REVISION_WITH_VERSION_PATCH) { + ByteBufUtils.writeULeb128(ClickhouseConstants.CLIENT_VERSION_PATCH, buf); + } + } +} diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java index ba9b652a03..a8486e3fe8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class ClientPacketTypes { public static final int HELLO = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java index 72d7270798..a42476b556 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -21,7 +21,7 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CloseConnectionCommand; -public class CloseConnectionCommandCodec extends ClickhouseNativeCommandCodec { +public class CloseConnectionCommandCodec extends ClickhouseBinaryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(CloseConnectionCommandCodec.class); protected CloseConnectionCommandCodec(CloseConnectionCommand cmd) { @@ -33,7 +33,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } @Override - public void encode(ClickhouseNativeEncoder encoder) { + public void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); if (LOG.isDebugEnabled()) { LOG.debug("closing channel"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java similarity index 66% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java index ab4641a871..d662c6efee 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java @@ -11,24 +11,24 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseCursorCommandCodec extends ClickhouseNativeCommandCodec{ - private final ClickhouseNativeSocketConnection conn; +public class CloseCursorCommandCodec extends ClickhouseBinaryCommandCodec { + private final ClickhouseBinarySocketConnection conn; - protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseNativeSocketConnection conn) { + protected CloseCursorCommandCodec(CloseCursorCommand cmd, ClickhouseBinarySocketConnection conn) { super(cmd); this.conn = conn; } - void encode(ClickhouseNativeEncoder encoder) { - conn.releaseCursor(((ClickhouseNativePreparedStatement)cmd.statement()).getPsId(), cmd.id()); + void encode(ClickhouseBinaryEncoder encoder) { + conn.releaseCursor(((ClickhouseBinaryPreparedStatement)cmd.statement()).getPsId(), cmd.id()); super.encode(encoder); completionHandler.handle(CommandResponse.success(null)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java index 466516bbd0..b460a7dc12 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java @@ -11,22 +11,22 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseStatementCommand; import io.vertx.sqlclient.impl.command.CommandResponse; -public class CloseStatementCommandCodec extends ClickhouseNativeCommandCodec { - public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseNativeSocketConnection conn) { +public class CloseStatementCommandCodec extends ClickhouseBinaryCommandCodec { + public CloseStatementCommandCodec(CloseStatementCommand cmd, ClickhouseBinarySocketConnection conn) { super(cmd); } - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); - ClickhouseNativePreparedStatement stmt = (ClickhouseNativePreparedStatement) cmd.statement(); + ClickhouseBinaryPreparedStatement stmt = (ClickhouseBinaryPreparedStatement) cmd.statement(); if (stmt.isSentQuery()) { encoder.getConn().releasePs(stmt.getPsId()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java index 55e91bc56c..e44bcffec1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.BlockInfo; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.impl.BlockInfo; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -31,21 +31,21 @@ public class ColumnOrientedBlockReader { private static final Logger LOG = LoggerFactory.getLogger(ColumnOrientedBlockReader.class); private final int serverRevision; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private String tempTableInfo; private BlockInfo blockInfo; private Integer nColumns; private Integer nRows; - private Map colWithTypes; + private Map colWithTypes; private List data; private String colName; private String colType; private ClickhouseColumnReader columnData; - private ClickhouseNativeColumnDescriptor columnDescriptor; + private ClickhouseBinaryColumnDescriptor columnDescriptor; - public ColumnOrientedBlockReader(ClickhouseNativeDatabaseMetadata md) { + public ColumnOrientedBlockReader(ClickhouseBinaryDatabaseMetadata md) { assert(md != null); this.md = md; this.serverRevision = md.getRevision(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java similarity index 89% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java index 897e1f3218..0d701a5e07 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/Compression.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class Compression { public static final int DISABLED = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java index 939b638eb1..44f9fad5cf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -42,7 +42,7 @@ public DatabaseMetadataReader(String fullClientName, Map propert this.properties = properties; } - public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { + public ClickhouseBinaryDatabaseMetadata readFrom(ByteBuf in) { if (productName == null) { productName = ByteBufUtils.readPascalString(in, StandardCharsets.UTF_8); if (productName == null) { @@ -98,7 +98,7 @@ public ClickhouseNativeDatabaseMetadata readFrom(ByteBuf in) { String extraNanos = properties.getOrDefault(ClickhouseConstants.OPTION_DATETIME64_EXTRA_NANOS_MODE, "throw"); boolean saturateExtraNanos = "saturate".equals(extraNanos); boolean removeTrailingZerosInFixedStringsStr = Boolean.parseBoolean(properties.getOrDefault(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true")); - return new ClickhouseNativeDatabaseMetadata(productName, + return new ClickhouseBinaryDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos, removeTrailingZerosInFixedStringsStr); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java index 9d0e3fad1b..1162b8561f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java @@ -11,14 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeSocketConnection; -import io.vertx.clickhouse.clickhousenative.impl.RowOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; @@ -31,12 +32,10 @@ import java.util.Map; import java.util.Objects; -import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.OPTION_MAX_BLOCK_SIZE; - public class ExtendedQueryCommandCodec extends SimpleQueryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); - public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseNativeSocketConnection conn) { + public ExtendedQueryCommandCodec(QueryInfo queryInfo, ExtendedQueryCommand cmd, ClickhouseBinarySocketConnection conn) { super(queryInfo, cmd.paramsList() == null ? 0 : cmd.paramsList().size(), cmd, conn, cmd.fetch() > 0); } @@ -50,26 +49,26 @@ protected String sql() { } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { ExtendedQueryCommand ecmd = ecmd(); String ourCursorId = ecmd.cursorId(); if (ourCursorId != null) { - conn.lockCursorOrThrow(((ClickhouseNativePreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); + conn.lockCursorOrThrow(((ClickhouseBinaryPreparedStatement)ecmd.preparedStatement()).getPsId(), ourCursorId); } PreparedStatement ps = ecmd.preparedStatement(); - if (ps != null && ((ClickhouseNativePreparedStatement)ps).isSentQuery()) { + if (ps != null && ((ClickhouseBinaryPreparedStatement)ps).isSentQuery()) { this.encoder = encoder; ByteBuf buf = allocateBuffer(); try { ChannelHandlerContext chctx = encoder.chctx(); PacketForge forge = new PacketForge(encoder.getConn(), chctx); - ClickhouseNativeDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); + ClickhouseBinaryDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); List paramsList = ecmd.paramsList(); if (paramsList != null && !paramsList.isEmpty()) { RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), paramsList, md); forge.sendColumns(block, buf, null); } - forge.sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md),""); + forge.sendData(buf, new RowOrientedBlock(ClickhouseBinaryRowDesc.EMPTY, Collections.emptyList(), md),""); chctx.writeAndFlush(buf, chctx.voidPromise()); if (LOG.isDebugEnabled()) { LOG.debug("sent columns"); @@ -87,14 +86,14 @@ void encode(ClickhouseNativeEncoder encoder) { protected Map settings() { String fetchSize = Integer.toString(ecmd().fetch()); Map defaultSettings = super.settings(); - String defaultFetchSize = defaultSettings.get(OPTION_MAX_BLOCK_SIZE); + String defaultFetchSize = defaultSettings.get(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE); if (!"0".equals(fetchSize)) { if (!Objects.equals(defaultFetchSize, fetchSize)) { if (LOG.isWarnEnabled() && defaultFetchSize != null) { - LOG.warn("overriding " + OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(OPTION_MAX_BLOCK_SIZE)); + LOG.warn("overriding " + ClickhouseConstants.OPTION_MAX_BLOCK_SIZE + " option with new value " + fetchSize + ", was " + defaultSettings.get(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE)); } defaultSettings = new HashMap<>(defaultSettings); - defaultSettings.put(OPTION_MAX_BLOCK_SIZE, fetchSize); + defaultSettings.put(ClickhouseConstants.OPTION_MAX_BLOCK_SIZE, fetchSize); } } return defaultSettings; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java index 47f2bab8dc..bfb76cbeae 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; -public class InitCommandCodec extends ClickhouseNativeCommandCodec { +public class InitCommandCodec extends ClickhouseBinaryCommandCodec { private static final Logger LOG = LoggerFactory.getLogger(InitCommandCodec.class); private PacketReader packetReader; @@ -35,7 +35,7 @@ public class InitCommandCodec extends ClickhouseNativeCommandCodec= ClickhouseConstants.DBMS_MIN_REVISION_WITH_CLIENT_INFO) { ClientInfo clInfo = new ClientInfo(meta); @@ -79,12 +82,12 @@ public void writeSettings(Map settings, boolean settingsAsString } public void sendExternalTables(ByteBuf buf, Collection blocks) { - ClickhouseNativeDatabaseMetadata md = conn.getDatabaseMetaData(); + ClickhouseBinaryDatabaseMetadata md = conn.getDatabaseMetaData(); for (RowOrientedBlock block : blocks) { //TODO implement external tables support sendData(buf, block, null); } - sendData(buf, new RowOrientedBlock(ClickhouseNativeRowDesc.EMPTY, Collections.emptyList(), md), ""); + sendData(buf, new RowOrientedBlock(ClickhouseBinaryRowDesc.EMPTY, Collections.emptyList(), md), ""); } public void sendData(ByteBuf buf, RowOrientedBlock block, String tableName) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java index f5912be302..1d41a09c66 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java @@ -11,13 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; @@ -33,7 +36,7 @@ public class PacketReader { private static final Logger LOG = LoggerFactory.getLogger(PacketReader.class); - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private final String fullClientName; private final Map properties; private final LZ4Factory lz4Factory; @@ -54,7 +57,7 @@ public class PacketReader { private boolean endOfStream; - public PacketReader(ClickhouseNativeDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { + public PacketReader(ClickhouseBinaryDatabaseMetadata md, String fullClientName, Map properties, LZ4Factory lz4Factory) { this.md = md; this.fullClientName = fullClientName; this.properties = properties; @@ -113,10 +116,10 @@ private void traceServerLogs(ColumnOrientedBlock block) { //TODO: find a way to expose logs to the calling app if (LOG.isDebugEnabled()) { LOG.debug("server log: [" + block.numColumns() + "; " + block.numRows() + "]"); - List rows = block.rows(); + List rows = block.rows(); LOG.debug("rows: "); StringBuilder bldr = new StringBuilder(); - for (ClickhouseNativeRowImpl row : rows) { + for (ClickhouseBinaryRowImpl row : rows) { bldr.append(rowAsString(row, block.rowDesc())).append("\n"); } LOG.debug(bldr); @@ -163,11 +166,11 @@ private TableColumns receiveTableColumns(ByteBufAllocator alloc, ByteBuf in, Ser return ret; } - private ClickhouseNativeDatabaseMetadata readServerHelloBlock(ByteBuf in) { + private ClickhouseBinaryDatabaseMetadata readServerHelloBlock(ByteBuf in) { if (metadataReader == null) { metadataReader = new DatabaseMetadataReader(fullClientName, properties); } - ClickhouseNativeDatabaseMetadata md = metadataReader.readFrom(in); + ClickhouseBinaryDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { if (LOG.isDebugEnabled()) { LOG.debug("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java index 91ac21047a..8b81df304c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; @@ -27,7 +27,7 @@ import java.util.Map; import java.util.UUID; -public class PrepareStatementCodec extends ClickhouseNativeCommandCodec { +public class PrepareStatementCodec extends ClickhouseBinaryCommandCodec { private final QueryInfo queryInfo; private final UUID psId; private PacketReader packetReader; @@ -39,7 +39,7 @@ protected PrepareStatementCodec(PrepareStatementCommand cmd, QueryInfo queryInfo } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { super.encode(encoder); String sql = cmd.sql(); boolean realInsertBatch = queryInfo.isInsert() && queryInfo.hasValues(); @@ -57,8 +57,8 @@ void encode(ClickhouseNativeEncoder encoder) { throw t; } } else { - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(sql, new ClickhouseNativeParamDesc(Collections.emptyList()), - new ClickhouseNativeRowDesc(Collections.emptyList()), queryInfo, false, psId))); + completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(sql, new ClickhouseBinaryParamDesc(Collections.emptyList()), + new ClickhouseBinaryRowDesc(Collections.emptyList()), queryInfo, false, psId))); } } @@ -72,13 +72,13 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; if (packet.getClass() == TableColumns.class) { TableColumns columns = (TableColumns)packet; - Map data = columns.columnDefinition().getColumnsWithTypes(); + Map data = columns.columnDefinition().getColumnsWithTypes(); List columnNames = new ArrayList<>(data.keySet()); List columnTypes = new ArrayList<>(data.values()); - ClickhouseNativeRowDesc rowDesc = new ClickhouseNativeRowDesc(columnNames, columnTypes); - completionHandler.handle(CommandResponse.success(new ClickhouseNativePreparedStatement(cmd.sql(), - new ClickhouseNativeParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); + ClickhouseBinaryRowDesc rowDesc = new ClickhouseBinaryRowDesc(columnNames, columnTypes); + completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(cmd.sql(), + new ClickhouseBinaryParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); } else if (packet instanceof Throwable) { cmd.fail((Throwable) packet); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java index e4141b6a73..64c690501e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java similarity index 99% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java index 1776043180..dc13492ee2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java index 3f58e8f66c..6d1a94c50a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class QueryProcessingStage { public static final int FETCH_COLUMNS = 0; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java index ce9805c6ca..a7e43611a4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; public class QueryProgressInfo { private final int rows; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java index 697cece47d..7532e65d00 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; public class QueryProgressInfoReader { private final int serverRevision; @@ -26,7 +26,7 @@ public class QueryProgressInfoReader { private Integer writtenRows; private Integer writtenBytes; - public QueryProgressInfoReader(ClickhouseNativeDatabaseMetadata md) { + public QueryProgressInfoReader(ClickhouseBinaryDatabaseMetadata md) { this.serverRevision = md.getRevision(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java index 93cc636fb3..0acec8c0ca 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java index 75b85cb4cd..2459890995 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java similarity index 68% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java index 3f59f0d182..6b9fa7148a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowImpl; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeRowDesc; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; @@ -28,12 +28,12 @@ class RowResultDecoder extends RowDecoder { private static final Logger LOG = LoggerFactory.getLogger(RowResultDecoder.class); - private final ClickhouseNativeRowDesc rowDesc; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryRowDesc rowDesc; + private final ClickhouseBinaryDatabaseMetadata md; private ColumnOrientedBlock block; private int rowNo; - protected RowResultDecoder(Collector collector, ClickhouseNativeRowDesc rowDesc, ClickhouseNativeDatabaseMetadata md) { + protected RowResultDecoder(Collector collector, ClickhouseBinaryRowDesc rowDesc, ClickhouseBinaryDatabaseMetadata md) { super(collector); this.rowDesc = rowDesc; this.md = md; @@ -41,7 +41,7 @@ protected RowResultDecoder(Collector collector, ClickhouseNativeRowDe @Override protected Row decodeRow(int len, ByteBuf in) { - ClickhouseNativeRowImpl row = block.row(rowNo); + ClickhouseBinaryRowImpl row = block.row(rowNo); ++rowNo; return row; } @@ -56,7 +56,7 @@ public void generateRows(ColumnOrientedBlock block) { this.rowNo = 0; } - public ClickhouseNativeRowDesc getRowDesc() { + public ClickhouseBinaryRowDesc getRowDesc() { return rowDesc; } } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java index f1b47cbd2f..67ebe88a02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java index 8898234631..bbbfdca1d9 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java @@ -11,11 +11,13 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhousenative.impl.*; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CommandResponse; @@ -24,7 +26,7 @@ import java.util.Collections; import java.util.Map; -public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBaseCodec>{ +public class SimpleQueryCommandCodec extends ClickhouseBinaryQueryCommandBaseCodec> { private static final Logger LOG = LoggerFactory.getLogger(SimpleQueryCommandCodec.class); private final boolean commandRequiresUpdatesDelivery; protected final QueryInfo queryInfo; @@ -33,12 +35,12 @@ public class SimpleQueryCommandCodec extends ClickhouseNativeQueryCommandBase private RowResultDecoder rowResultDecoder; private PacketReader packetReader; private int dataPacketNo; - protected final ClickhouseNativeSocketConnection conn; + protected final ClickhouseBinarySocketConnection conn; - protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseNativeSocketConnection conn) { + protected SimpleQueryCommandCodec(QueryCommandBase cmd, ClickhouseBinarySocketConnection conn) { this(null, 0, cmd, conn, false); } - protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseNativeSocketConnection conn, boolean requireUpdatesDelivery) { + protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryCommandBase cmd, ClickhouseBinarySocketConnection conn, boolean requireUpdatesDelivery) { super(cmd); this.queryInfo = queryInfo; this.batchSize = batchSize; @@ -47,7 +49,7 @@ protected SimpleQueryCommandCodec(QueryInfo queryInfo, int batchSize, QueryComma } @Override - void encode(ClickhouseNativeEncoder encoder) { + void encode(ClickhouseBinaryEncoder encoder) { checkIfBusy(); super.encode(encoder); if (!isSuspended()) { @@ -96,7 +98,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.debug("decoded packet " + dataPacketNo + ": " + block + " row count " + block.numRows()); } if (dataPacketNo == 0) { - ClickhouseNativeRowDesc rowDesc = block.rowDesc(); + ClickhouseBinaryRowDesc rowDesc = block.rowDesc(); rowResultDecoder = new RowResultDecoder<>(cmd.collector(), rowDesc, conn.getDatabaseMetaData()); } packetReader = null; @@ -138,9 +140,9 @@ private void notifyOperationUpdate(int updateCount, boolean hasMoreResults, Thro cmd.resultHandler().handleResult(updateCount, size, rowResultDecoder.getRowDesc(), result, failure); } else { if (queryInfo != null && queryInfo.isInsert()) { - rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseNativeRowDesc.EMPTY, conn.getDatabaseMetaData()); + rowResultDecoder = new RowResultDecoder<>(cmd.collector(), ClickhouseBinaryRowDesc.EMPTY, conn.getDatabaseMetaData()); failure = rowResultDecoder.complete(); - cmd.resultHandler().handleResult(batchSize, 0, ClickhouseNativeRowDesc.EMPTY, rowResultDecoder.result(), failure); + cmd.resultHandler().handleResult(batchSize, 0, ClickhouseBinaryRowDesc.EMPTY, rowResultDecoder.result(), failure); } } if (t != null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java index 387566f487..eff3093b7c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/TableColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec; +package io.vertx.clickhouse.clickhouse.binary.impl.codec; -import io.vertx.clickhouse.clickhousenative.impl.ColumnOrientedBlock; +import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; import java.util.List; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java index 2834938b04..51cb75aaa1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java @@ -11,18 +11,18 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class ArrayColumn extends ClickhouseColumn { - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; - public ArrayColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md) { super(descriptor); this.md = md; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java index 5de51fb593..6fc93b14e8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java @@ -11,19 +11,19 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; public class ArrayColumnReader extends ClickhouseColumnReader { private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseBinaryDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor elementTypeDescr; private int[][][] perRowsSlice; @@ -36,7 +36,7 @@ public class ArrayColumnReader extends ClickhouseColumnReader { private Integer curLevelSliceSize; - public ArrayColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public ArrayColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descr); this.md = md; this.elementTypeDescr = descr.getNestedDescr(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java index 9878d74d43..e568480bd0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.ArrayList; @@ -25,11 +25,11 @@ import java.util.stream.Collectors; public class ArrayColumnWriter extends ClickhouseColumnWriter { - private final ClickhouseNativeDatabaseMetadata md; - private final ClickhouseNativeColumnDescriptor elementTypeDescr; + private final ClickhouseBinaryDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor elementTypeDescr; private final ClickhouseColumn elementTypeColumn; - public ArrayColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public ArrayColumnWriter(List data, ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, int columnIndex) { super(data, descriptor, columnIndex); this.md = md; this.elementTypeDescr = descriptor.getNestedDescr(); @@ -43,7 +43,7 @@ protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, writeElementData(sink, 0, columnDescriptor, data, fromRow, toRow, columnIndex); } - private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, ClickhouseBinaryColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } @@ -60,7 +60,7 @@ private void writeElementData(ClickhouseStreamDataSink sink, int localDepth, Cli localWriter.serializeDataInternal(sink, fromRow, toRow); } - private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseNativeColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { + private void writeNullsInfo(ClickhouseStreamDataSink sink, int localDepth, ClickhouseBinaryColumnDescriptor descr, List localData, int fromRow, int toRow, int colIndex) { if (localDepth != 0 && descr.isArray() && elementTypeDescr.isNullable() && localData == null) { localData = Collections.emptyList(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java index 242159d97e..a90f68fe5f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ArrayIntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public class ArrayIntPairIterator implements IntPairIterator { private final int[] src; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java index ede12a11f9..85b98dbf31 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public abstract class ClickhouseColumn { - protected ClickhouseNativeColumnDescriptor descriptor; + protected ClickhouseBinaryColumnDescriptor descriptor; - public ClickhouseColumn(ClickhouseNativeColumnDescriptor descriptor) { + public ClickhouseColumn(ClickhouseBinaryColumnDescriptor descriptor) { this.descriptor = descriptor; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java index 2b23a3808d..8a1e304189 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; public abstract class ClickhouseColumnReader { @@ -22,16 +22,16 @@ public abstract class ClickhouseColumnReader { private static final Object NOP_STATE = new Object(); protected final int nRows; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final ClickhouseBinaryColumnDescriptor columnDescriptor; protected BitSet nullsMap; protected Object itemsArray; - protected ClickhouseColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected ClickhouseColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { this.columnDescriptor = columnDescriptor; this.nRows = nRows; } - public ClickhouseNativeColumnDescriptor columnDescriptor() { + public ClickhouseBinaryColumnDescriptor columnDescriptor() { return columnDescriptor; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java index dbe0daee03..d9dc6ca42b 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public abstract class ClickhouseColumnWriter { protected final List data; - protected final ClickhouseNativeColumnDescriptor columnDescriptor; + protected final ClickhouseBinaryColumnDescriptor columnDescriptor; protected final int columnIndex; - public ClickhouseColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public ClickhouseColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { this.data = data; this.columnDescriptor = columnDescriptor; this.columnIndex = columnIndex; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java index da678db3f0..05916ef8b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; @@ -61,12 +61,12 @@ private static Map buildConstDurationMultipliers() { } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { + public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String name) { String spec = unparsedSpec; Map.Entry arrayDimensionsInfo = maybeUnwrapArrayDimensions(spec); if (arrayDimensionsInfo.getKey() > 0) { - ClickhouseNativeColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseNativeColumnDescriptor.NOSIZE, + ClickhouseBinaryColumnDescriptor nested = columnDescriptorForSpec(arrayDimensionsInfo.getValue(), name); + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, true, ClickhouseBinaryColumnDescriptor.NOSIZE, JDBCType.ARRAY, false, false, false, null, null, arrayDimensionsInfo.getKey(), nested); } boolean isLowCardinality = false; @@ -91,75 +91,75 @@ private static Map.Entry maybeUnwrapArrayDimensions(String spec return new AbstractMap.SimpleEntry<>(arrayDepth, spec); } - public static ClickhouseNativeColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, + public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String unparsedSpec, String spec, String name, boolean nullable, boolean isArray, boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); if (spec.equals("UInt8") || spec.equals("Int8")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Int128Column.ELEMENT_SIZE, JDBCType.BIGINT, nullable, false, isLowCardinality, Int128Column.INT128_MIN_VALUE, Int128Column.INT128_MAX_VALUE); } else if (spec.equals("String")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseNativeColumnDescriptor.NOSIZE, JDBCType.VARCHAR, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, ClickhouseBinaryColumnDescriptor.NOSIZE, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(FIXED_STRING_PREFIX)) { String lengthStr = spec.substring(FIXED_STRING_PREFIX_LENGTH, spec.length() - 1); int bytesLength = Integer.parseInt(lengthStr); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, bytesLength, JDBCType.VARCHAR, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith("DateTime64")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, DateTime64Column.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith("DateTime")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, DateTimeColumnReader.ELEMENT_SIZE, spec.endsWith(")") ? JDBCType.TIMESTAMP_WITH_TIMEZONE : JDBCType.TIMESTAMP, nullable, false, isLowCardinality, null, null); } else if (spec.equals("UUID")) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UUIDColumn.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null); } else if (spec.startsWith(DECIMAL_PREFIX)) { String decimalModifiers = spec.substring(DECIMAL_PREFIX_LENGTH, spec.length() - 1); String[] modifiersTokens = decimalModifiers.split(","); int precision = Integer.parseInt(modifiersTokens[0].trim()); int scale = Integer.parseInt(modifiersTokens[1].trim()); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, decimalSize(precision), JDBCType.DECIMAL, nullable, false, isLowCardinality, null, null, precision, scale); } else if (spec.startsWith(ENUM_PREFIX)) { int openBracketPos = spec.indexOf('(', ENUM_PREFIX_LENGTH); int enumBitsSize = Integer.parseInt(spec.substring(ENUM_PREFIX_LENGTH, openBracketPos)); - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("Nothing".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float32".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, JDBCType.REAL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float64".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); } else if ("Date".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, 0, 65535, null, null); } else if (spec.startsWith(INTERVAL_PREFIX)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("IPv4".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } else if ("IPv6".equals(spec)) { - return new ClickhouseNativeColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, IPv6Column.ELEMENT_SIZE, JDBCType.OTHER, nullable, true, isLowCardinality, null, null, null, null); } throw new IllegalArgumentException("unknown column spec: '" + spec + "'"); @@ -179,20 +179,20 @@ private static int decimalSize(int precision) { } } - public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseBinaryDatabaseMetadata md) { return columnForSpec(spec, name, md, false); } - public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); + public static ClickhouseColumn columnForSpec(String spec, String name, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { + ClickhouseBinaryColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec(spec, name); return columnForSpec(descr, md, enableStringCache); } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public static ClickhouseColumn columnForSpec(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { return columnForSpec(descr, md, false); } - public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + public static ClickhouseColumn columnForSpec(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { if (descr.isArray()) { return new ArrayColumn(descr, md); } @@ -213,7 +213,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de return new Int128Column(descr); } } else if (jdbcType == JDBCType.VARCHAR) { - if (descr.getElementSize() == ClickhouseNativeColumnDescriptor.NOSIZE) { + if (descr.getElementSize() == ClickhouseBinaryColumnDescriptor.NOSIZE) { return new StringColumn(descr, md, enableStringCache); } else { return new FixedStringColumn(descr, md, enableStringCache); @@ -286,7 +286,7 @@ public static ClickhouseColumn columnForSpec(ClickhouseNativeColumnDescriptor de throw new IllegalArgumentException("no column type for jdbc type " + jdbcType + " (raw type: '" + descr.getUnparsedNativeType() + "')"); } - private static Duration getDurationMultiplier(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + private static Duration getDurationMultiplier(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { String durationStr = descr.getNestedType().substring(INTERVAL_PREFIX.length()); Duration multiplier = CONST_DURATION_MULTIPLIERS.get(durationStr); if (multiplier == null) { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java index e27fa6b8f0..d3ff7d1940 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.math.BigDecimal; @@ -35,7 +35,7 @@ public static int getLastNonZeroPos(byte[] bytes) { } //TODO: maybe rework checks - public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseNativeColumnDescriptor columnDescriptor) { + public static void bigDecimalFitsOrThrow(BigDecimal bd, ClickhouseBinaryColumnDescriptor columnDescriptor) { if (columnDescriptor.getScale() < bd.scale()) { throw new IllegalArgumentException("possible loss of scale: max " + columnDescriptor.getScale() + ", got " + bd.scale()); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java index 66e2585958..983cf20b3f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class DateColumn extends UInt16Column { - public DateColumn(ClickhouseNativeColumnDescriptor descriptor) { + public DateColumn(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java index a951ad69b9..c247a8ef75 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.LocalDate; @@ -23,7 +23,7 @@ public class DateColumnReader extends UInt16ColumnReader { public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); public static final LocalDate MAX_VALUE = MIN_VALUE.plusDays(65535); - public DateColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public DateColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java index 53b289adca..3e2303a9d2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.LocalDate; @@ -24,7 +24,7 @@ public class DateColumnWriter extends UInt16ColumnWriter { public static final long MAX_VALUE = 65535; - public DateColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public DateColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java index 988e20243c..4b629a23c0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -29,7 +29,7 @@ public class DateTime64Column extends ClickhouseColumn { private final ZoneId zoneId; private boolean saturateExtraNanos; - public DateTime64Column(ClickhouseNativeColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { + public DateTime64Column(ClickhouseBinaryColumnDescriptor descriptor, Integer precision, boolean saturateExtraNanos, ZoneId zoneId) { super(descriptor); this.precision = precision; this.zoneId = zoneId; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java index 2de3b7312d..f5b487b6b5 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; import java.time.Instant; @@ -26,7 +26,7 @@ public class DateTime64ColumnReader extends ClickhouseColumnReader { private final ZoneId zoneId; private final BigInteger invTickSize; - public DateTime64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId) { + public DateTime64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Integer precision, ZoneId zoneId) { super(nRows, descr); this.zoneId = zoneId; this.invTickSize = BigInteger.TEN.pow(precision); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java index 48384cd421..5c10c25bcf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -28,7 +28,7 @@ public class DateTime64ColumnWriter extends ClickhouseColumnWriter { private final ZoneId zoneId; private final boolean saturateExtraNanos; - public DateTime64ColumnWriter(List data, ClickhouseNativeColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { + public DateTime64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor descr, Integer precision, ZoneId zoneId, boolean saturateExtraNanos, int columnIndex) { super(data, descr, columnIndex); this.zoneId = zoneId; this.invTickSize = BigInteger.TEN.pow(precision); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java index 53e4ee4d96..cdae818fbf 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -27,7 +27,7 @@ public class DateTimeColumn extends ClickhouseColumn { private final ZoneId zoneId; private final OffsetDateTime nullValue; - public DateTimeColumn(ClickhouseNativeColumnDescriptor descriptor, ZoneId zoneId) { + public DateTimeColumn(ClickhouseBinaryColumnDescriptor descriptor, ZoneId zoneId) { super(descriptor); this.zoneId = zoneId; this.nullValue = Instant.EPOCH.atZone(zoneId).toOffsetDateTime(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java index 15a6737d8d..268a7336f8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; import java.time.OffsetDateTime; @@ -27,7 +27,7 @@ public class DateTimeColumnReader extends ClickhouseColumnReader { private final ZoneId zoneId; - public DateTimeColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ZoneId zoneId) { + public DateTimeColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ZoneId zoneId) { super(nRows, descr); this.zoneId = zoneId; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java index c377239f08..352b3be14a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.Instant; @@ -25,7 +25,7 @@ public class DateTimeColumnWriter extends ClickhouseColumnWriter { public final OffsetDateTime maxValue; - public DateTimeColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { + public DateTimeColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, ZoneId zoneId, int columnIndex) { super(data, columnDescriptor, columnIndex); this.maxValue = Instant.ofEpochSecond(DateTimeColumnReader.MAX_EPOCH_SECOND).atZone(zoneId).toOffsetDateTime(); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java index cce44f7e36..99d42c4951 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -31,7 +31,7 @@ public class Decimal128Column extends ClickhouseColumn { public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); private final Numeric zeroValue; - public Decimal128Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal128Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java index 284c136be7..75df301530 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -31,7 +31,7 @@ public class Decimal256Column extends ClickhouseColumn { private final Numeric zeroValue; - public Decimal256Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal256Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java index ce45b1a1ba..754393375e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -30,7 +30,7 @@ public class Decimal32Column extends ClickhouseColumn { private final Numeric zeroValue; - public Decimal32Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java index dfff0877ef..2d47c1f478 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class Decimal32ColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected Decimal32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mc) { + protected Decimal32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mc) { super(nRows, columnDescriptor); this.mc = mc; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java index b1a6a877a7..130f97c16d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -23,7 +23,7 @@ import java.util.List; public class Decimal32ColumnWriter extends ClickhouseColumnWriter { - public Decimal32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Decimal32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java index 7e9df4f024..f95e841235 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -29,7 +29,7 @@ public class Decimal64Column extends ClickhouseColumn { public static final MathContext MATH_CONTEXT = new MathContext(MAX_PRECISION, RoundingMode.HALF_EVEN); private final Numeric zeroValue; - public Decimal64Column(ClickhouseNativeColumnDescriptor descriptor) { + public Decimal64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); zeroValue = Numeric.create(new BigDecimal(BigInteger.ZERO, descriptor.getPrecision(), MATH_CONTEXT)); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java index 2dbe9fb847..54d2a22fdd 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class Decimal64ColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected Decimal64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { + protected Decimal64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); this.mc = mathContext; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java similarity index 76% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java index 8f68b0dbcb..4de35beaf0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -23,7 +23,7 @@ import java.util.List; public class Decimal64ColumnWriter extends ClickhouseColumnWriter { - public Decimal64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Decimal64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java index e8b046db0a..6ce63d5b02 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum16Column extends UInt16Column { private final Map enumVals; private final EnumResolutionMethod resolutionMethod; - public Enum16Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum16Column(ClickhouseBinaryColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; this.resolutionMethod = resolutionMethod; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java index 75c9f9458f..052c382774 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; @@ -21,7 +21,7 @@ public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumn public static final int ELEMENT_SIZE = 2; private final EnumColumnDecoder columnRecoder; - public Enum16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java index f3353e9500..f1d25ad459 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum16ColumnWriter extends UInt16ColumnWriter { private final EnumColumnEncoder columnEncoder; - public Enum16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + public Enum16ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex, Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java index 17162b0fcf..e281a7099d 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum8Column extends UInt8Column { private final Map enumVals; private final EnumResolutionMethod resolutionMethod; - public Enum8Column(ClickhouseNativeColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum8Column(ClickhouseBinaryColumnDescriptor descriptor, Map enumVals, EnumResolutionMethod resolutionMethod) { super(descriptor); this.enumVals = enumVals; this.resolutionMethod = resolutionMethod; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java index a9165743a3..1d53478694 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; @@ -21,7 +21,7 @@ public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnRe public static final int ELEMENT_SIZE = 1; private final EnumColumnDecoder columnRecoder; - public Enum8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { + public Enum8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, Map enumVals, EnumResolutionMethod resolutionMethod) { super(nRows, descr); this.columnRecoder = new EnumColumnDecoder(enumVals, resolutionMethod); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java index aaed4cdaea..6e0eff6911 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -23,7 +23,7 @@ public class Enum8ColumnWriter extends UInt8ColumnWriter { private final EnumColumnEncoder columnEncoder; - public Enum8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex, + public Enum8ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex, Map enumVals, EnumResolutionMethod resolutionMethod) { super(data, columnDescriptor, columnIndex); this.columnEncoder = new EnumColumnEncoder(enumVals, resolutionMethod); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java index 77ca75f915..246c4ae248 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java similarity index 97% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java index 96a473ccb0..1c21f46c64 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java index 552d7da6bb..a68100cab4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public interface EnumColumnReader { Object[] recodeValues(Object[] src, Class desired); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java index d714ed2324..eff99571d4 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.Arrays; import java.util.Map; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java similarity index 73% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java index 04e5ed1842..2054b13de8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java @@ -11,19 +11,19 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class FixedStringColumn extends ClickhouseColumn { - protected final ClickhouseNativeDatabaseMetadata md; + protected final ClickhouseBinaryDatabaseMetadata md; private final boolean enableStringCache; - public FixedStringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + public FixedStringColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; this.enableStringCache = enableStringCache; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java index 16b0a948a1..7c766bfbb6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; @@ -29,7 +29,7 @@ public class FixedStringColumnReader extends ClickhouseColumnReader { private List elements; - protected FixedStringColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { + protected FixedStringColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, boolean enableStringCache, ClickhouseBinaryDatabaseMetadata md) { super(nRows, columnDescriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java index ea5d7c5205..99da8811b0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; @@ -23,7 +23,7 @@ public class FixedStringColumnWriter extends ClickhouseColumnWriter { private final Charset charset; - public FixedStringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public FixedStringColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, columnIndex); this.charset = charset; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java index 3d339a58b6..63b02d4b97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class Float32Column extends ClickhouseColumn { public static final Float[] EMPTY_FLOAT_ARRAY = new Float[0]; public static final Float ZERO_VALUE = 0.0f; - public Float32Column(ClickhouseNativeColumnDescriptor descriptor) { + public Float32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java similarity index 80% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java index 37bf1eee81..49a263a243 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class Float32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; - protected Float32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Float32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java index 9ace358514..9df1cde405 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class Float32ColumnWriter extends ClickhouseColumnWriter { - public Float32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Float32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java similarity index 83% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java index 15bf6b50e3..5883af01d1 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class Float64Column extends ClickhouseColumn { public static final Double[] EMPTY_FLOAT_ARRAY = new Double[0]; public static final Double ZERO_DOUBLE = 0d; - public Float64Column(ClickhouseNativeColumnDescriptor descriptor) { + public Float64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java similarity index 80% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java index cf6343ff15..df741363a8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class Float64ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 8; - protected Float64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Float64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java index 6a697008ac..db0a7c3067 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class Float64ColumnWriter extends ClickhouseColumnWriter { - public Float64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Float64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java index 1069276929..344c6b1320 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; @@ -24,7 +24,7 @@ public class GenericDecimalColumnReader extends ClickhouseColumnReader { private final MathContext mc; - protected GenericDecimalColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, MathContext mathContext) { + protected GenericDecimalColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, MathContext mathContext) { super(nRows, columnDescriptor); this.mc = mathContext; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java index 0cbb486f12..0ab90b8694 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -25,7 +25,7 @@ public class GenericDecimalColumnWriter extends ClickhouseColumnWriter { private final BigInteger negAddon; - public GenericDecimalColumnWriter(List data, ClickhouseNativeColumnDescriptor descriptor, int columnIndex) { + public GenericDecimalColumnWriter(List data, ClickhouseBinaryColumnDescriptor descriptor, int columnIndex) { super(data, descriptor, columnIndex); this.negAddon = BigInteger.ONE.shiftLeft(columnDescriptor.getElementSize() * 8); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java index 388dc54fff..6faa6f0a58 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java @@ -11,13 +11,12 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; -import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; @@ -37,7 +36,7 @@ private static Inet4Address ipv4(byte[] src) { } } - public IPv4Column(ClickhouseNativeColumnDescriptor descr) { + public IPv4Column(ClickhouseBinaryColumnDescriptor descr) { super(descr); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java similarity index 89% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java index 85f39cfdd3..f328b51425 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet4Address; import java.net.InetAddress; @@ -21,7 +21,7 @@ public class IPv4ColumnReader extends UInt32ColumnReader { - public IPv4ColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor) { + public IPv4ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor) { super(nRows, descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java index 5ff5256c4a..cc9c96d919 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; import java.util.List; public class IPv4ColumnWriter extends UInt32ColumnWriter { - public IPv4ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public IPv4ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java index 7fd2701421..bf4167b732 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; @@ -47,7 +47,7 @@ private static Inet6Address ipv6(byte[] src) { } } - public IPv6Column(ClickhouseNativeColumnDescriptor descr, ClickhouseNativeDatabaseMetadata md) { + public IPv6Column(ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryDatabaseMetadata md) { super(descr, md, false); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java similarity index 82% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java index ae720858dd..67ac74a737 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet6Address; import java.net.InetAddress; @@ -22,7 +22,7 @@ public class IPv6ColumnReader extends FixedStringColumnReader { - protected IPv6ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md) { + protected IPv6ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor, ClickhouseBinaryDatabaseMetadata md) { super(nRows, columnDescriptor, false, md); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java similarity index 78% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java index d1992a865c..7ce48bfc23 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; @@ -22,7 +22,7 @@ import java.util.List; public class IPv6ColumnWriter extends FixedStringColumnWriter { - public IPv6ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public IPv6ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, charset, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java index 7e43cbbe07..db7717f4b2 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; @@ -27,7 +27,7 @@ public class Int128Column extends ClickhouseColumn { public static final BigInteger INT128_MIN_VALUE = new BigInteger("-170141183460469231731687303715884105728"); public static final BigInteger INT128_MAX_VALUE = new BigInteger( "170141183460469231731687303715884105727"); - public Int128Column(ClickhouseNativeColumnDescriptor descriptor) { + public Int128Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java index b50576222f..6dba11b4ec 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; //experimental support at the moment public class Int128ColumnReader extends ClickhouseColumnReader { - protected Int128ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected Int128ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java index 27bc846a52..d766becf0a 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; import java.util.List; public class Int128ColumnWriter extends ClickhouseColumnWriter { - public Int128ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public Int128ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java similarity index 93% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java index ef2877d174..9f5e7ba760 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public interface IntPairIterator { IntPairIterator EMPTY = new IntPairIterator() { diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java index 3b179cc9b1..8dd972e2b8 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Duration; @@ -25,7 +25,7 @@ public class IntervalColumn extends ClickhouseColumn { public static final Duration ZERO_VALUE = Duration.ZERO; private final Duration multiplier; - public IntervalColumn(ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + public IntervalColumn(ClickhouseBinaryColumnDescriptor descriptor, Duration multiplier) { super(descriptor); this.multiplier = multiplier; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java index 0c91436277..5d01f8e650 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.Duration; public class IntervalColumnReader extends UInt64ColumnReader { private final Duration multiplier; - public IntervalColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, Duration multiplier) { + public IntervalColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor, Duration multiplier) { super(nRows, descriptor); this.multiplier = multiplier; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java index 120527a9ff..d05d97457e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ListPairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.AbstractMap; import java.util.Iterator; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java similarity index 72% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java index c2ab321e91..e7d95619df 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java @@ -11,20 +11,20 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; public class LowCardinalityColumn extends ClickhouseColumn { - private final ClickhouseNativeColumnDescriptor indexDescriptor; + private final ClickhouseBinaryColumnDescriptor indexDescriptor; private final ClickhouseColumn indexColumn; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; - public LowCardinalityColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md) { super(descriptor); this.md = md; this.indexDescriptor = descriptor.copyWithModifiers(false, false); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java similarity index 87% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java index 93807c59f6..2df335c4e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; @@ -30,8 +30,8 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { }; public static final Object[] EMPTY_ARRAY = new Object[0]; - private final ClickhouseNativeColumnDescriptor indexDescr; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryColumnDescriptor indexDescr; + private final ClickhouseBinaryDatabaseMetadata md; private ClickhouseColumnReader indexColumn; private Long serType; private Long indexSize; @@ -40,7 +40,7 @@ public class LowCardinalityColumnReader extends ClickhouseColumnReader { private ClickhouseColumnReader keysColumn; - public LowCardinalityColumnReader(int nRows, ClickhouseNativeColumnDescriptor descr, ClickhouseNativeColumnDescriptor indexColumn, ClickhouseNativeDatabaseMetadata md) { + public LowCardinalityColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descr, ClickhouseBinaryColumnDescriptor indexColumn, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descr); this.indexDescr = indexColumn; this.md = md; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java similarity index 90% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java index 823506e75b..37f1db4840 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.*; @@ -32,12 +32,12 @@ public class LowCardinalityColumnWriter extends ClickhouseColumnWriter { public static final int NEED_UPDATE_DICTIONARY = 1 << 10; public static final int SERIALIZATION_TYPE = HAS_ADDITIONAL_KEYS_BIT | NEED_UPDATE_DICTIONARY; - private final ClickhouseNativeDatabaseMetadata md; + private final ClickhouseBinaryDatabaseMetadata md; private Map dictionaryIndex; private List keys; private int nullAddon; - public LowCardinalityColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, ClickhouseNativeDatabaseMetadata md, int columnIndex) { + public LowCardinalityColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, ClickhouseBinaryDatabaseMetadata md, int columnIndex) { super(data, columnDescriptor, columnIndex); this.md = md; } @@ -51,7 +51,7 @@ protected void serializeStatePrefix(ClickhouseStreamDataSink sink, int fromRow, protected void serializeDataInternal(ClickhouseStreamDataSink sink, int fromRow, int toRow) { dictionaryIndex = new LinkedHashMap<>(); keys = new ArrayList<>(); - ClickhouseNativeColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); + ClickhouseBinaryColumnDescriptor dictionaryWriterDescr = columnDescriptor.copyWithModifiers(false, false); ClickhouseColumn dictionaryColumn = ClickhouseColumns.columnForSpec(dictionaryWriterDescr, md); nullAddon = columnDescriptor.isNullable() ? 1 : 0; super.serializeDataInternal(sink, fromRow, toRow); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java similarity index 95% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java index 828661bd29..cc032e5386 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java similarity index 94% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java index 26f023b4b8..e292f20ad6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; import java.lang.ref.SoftReference; import java.util.function.Supplier; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java index e4b8936a8d..a280e7cc40 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -24,8 +24,8 @@ public class StringColumn extends ClickhouseColumn { public static final byte[] ZERO_VALUE = new byte[0]; private final boolean enableStringCache; - private final ClickhouseNativeDatabaseMetadata md; - public StringColumn(ClickhouseNativeColumnDescriptor descriptor, ClickhouseNativeDatabaseMetadata md, boolean enableStringCache) { + private final ClickhouseBinaryDatabaseMetadata md; + public StringColumn(ClickhouseBinaryColumnDescriptor descriptor, ClickhouseBinaryDatabaseMetadata md, boolean enableStringCache) { super(descriptor); this.md = md; this.enableStringCache = enableStringCache; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java index 502b45dede..60caebba4f 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; @@ -28,7 +28,7 @@ public class StringColumnReader extends ClickhouseColumnReader { private final boolean enableStringCache; private final StringCache cache; - protected StringColumnReader(int nRows, ClickhouseNativeColumnDescriptor descriptor, boolean enableStringCache, ClickhouseNativeDatabaseMetadata md) { + protected StringColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor, boolean enableStringCache, ClickhouseBinaryDatabaseMetadata md) { super(nRows, descriptor); this.elements = new ArrayList<>(nRows); this.charset = md.getStringCharset(); diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java index 58e472fe9c..a04be22888 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; @@ -22,7 +22,7 @@ public class StringColumnWriter extends ClickhouseColumnWriter { private final Charset charset; - public StringColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { + public StringColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, Charset charset, int columnIndex) { super(data, columnDescriptor, columnIndex); this.charset = charset; } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java similarity index 92% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java index 636a91c3c7..a31517e4d7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; public class Triplet { private final L left; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java index 8182ff172f..950ef17396 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -22,7 +22,7 @@ public class UInt16Column extends ClickhouseColumn { public static final Integer[] EMPTY_INT_ARRAY = new Integer[0]; public static final Short[] EMPTY_SHORT_ARRAY = new Short[0]; - public UInt16Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt16Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java index 6e9ee79115..2b552cff58 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt16ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 2; - public UInt16ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java index 34efca451e..d82b82acf0 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt16ColumnWriter extends ClickhouseColumnWriter { - public UInt16ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt16ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java index 03dce40cf1..41064396b3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -21,7 +21,7 @@ public class UInt32Column extends ClickhouseColumn { public static final Long[] EMPTY_LONG_ARRAY = new Long[0]; - public UInt32Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt32Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java index 38e928e87e..1add1ebcad 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; - public UInt32ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java index b8c2e04166..1e0eec91d6 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt32ColumnWriter extends ClickhouseColumnWriter { - public UInt32ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt32ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java similarity index 85% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java index ff1e010a37..57480fdb30 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; @@ -24,7 +24,7 @@ public class UInt64Column extends ClickhouseColumn { public static final Numeric[] EMPTY_NUMERIC_ARRAY = new Numeric[0]; public static final Numeric UINT64_MIN = Numeric.create(BigInteger.ZERO); - public UInt64Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt64Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java similarity index 88% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java index 098566d801..78a9115a08 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; @@ -22,7 +22,7 @@ public class UInt64ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 8; - public UInt64ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java similarity index 75% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java index 7480b176c4..828e5eb67c 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt64ColumnWriter extends ClickhouseColumnWriter { - public UInt64ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt64ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java index 2e98d58ddc..2204d167e3 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -21,7 +21,7 @@ public class UInt8Column extends ClickhouseColumn { public static final Byte[] EMPTY_BYTE_ARRAY = new Byte[0]; - public UInt8Column(ClickhouseNativeColumnDescriptor descriptor) { + public UInt8Column(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java similarity index 86% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java index 00cff5cffc..f22055ecdc 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; - public UInt8ColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + public UInt8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java similarity index 74% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java index b061c8c76d..0903f2fe97 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; public class UInt8ColumnWriter extends ClickhouseColumnWriter { - public UInt8ColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UInt8ColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java similarity index 84% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java index b505b002d7..469d90c122 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; @@ -25,7 +25,7 @@ public class UUIDColumn extends ClickhouseColumn { public static final UUID ZERO_UUID = new UUID(0, 0); public static final int ELEMENT_SIZE = 16; - public UUIDColumn(ClickhouseNativeColumnDescriptor descriptor) { + public UUIDColumn(ClickhouseBinaryColumnDescriptor descriptor) { super(descriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java similarity index 81% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java index a81dc5ed7d..c666f622f7 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; import java.util.UUID; public class UUIDColumnReader extends ClickhouseColumnReader { - protected UUIDColumnReader(int nRows, ClickhouseNativeColumnDescriptor columnDescriptor) { + protected UUIDColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java similarity index 77% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java index 9454a93c9f..a43d218c5e 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; import java.util.UUID; public class UUIDColumnWriter extends ClickhouseColumnWriter { - public UUIDColumnWriter(List data, ClickhouseNativeColumnDescriptor columnDescriptor, int columnIndex) { + public UUIDColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { super(data, columnDescriptor, columnIndex); } diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java similarity index 91% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java index af66fd07fd..c78f412786 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java @@ -12,6 +12,6 @@ */ @ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") -package io.vertx.clickhouse.clickhousenative; +package io.vertx.clickhouse.clickhouse.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java similarity index 58% rename from vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java index 35d994a556..401f1a7095 100644 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/spi/ClickhouseNativeDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java @@ -11,37 +11,37 @@ * */ -package io.vertx.clickhouse.clickhousenative.spi; +package io.vertx.clickhouse.clickhouse.binary.spi; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.spi.Driver; -public class ClickhouseNativeDriver implements Driver { +public class ClickhouseBinaryDriver implements Driver { @Override public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseNativePool.pool(wrap(options), poolOptions); + return ClickhouseBinaryPool.pool(wrap(options), poolOptions); } @Override public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseNativePool.pool(vertx, wrap(options), poolOptions); + return ClickhouseBinaryPool.pool(vertx, wrap(options), poolOptions); } @Override public boolean acceptsOptions(SqlConnectOptions options) { - return options instanceof ClickhouseNativeConnectOptions || SqlConnectOptions.class.equals(options.getClass()); + return options instanceof ClickhouseBinaryConnectOptions || SqlConnectOptions.class.equals(options.getClass()); } - private static ClickhouseNativeConnectOptions wrap(SqlConnectOptions options) { - if (options instanceof ClickhouseNativeConnectOptions) { - return (ClickhouseNativeConnectOptions) options; + private static ClickhouseBinaryConnectOptions wrap(SqlConnectOptions options) { + if (options instanceof ClickhouseBinaryConnectOptions) { + return (ClickhouseBinaryConnectOptions) options; } else { - return new ClickhouseNativeConnectOptions(options); + return new ClickhouseBinaryConnectOptions(options); } } } diff --git a/vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java b/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java similarity index 100% rename from vertx-clickhouse-native-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java rename to vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..9750371bf9 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Automatic-Module-Name: io.vertx.client.sql.clickhouse.binary + diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver new file mode 100644 index 0000000000..29ad5b1ceb --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -0,0 +1 @@ +io.vertx.clickhouse.clickhouse.binary.spi.ClickhouseBinaryDriver diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 94% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java index becae96044..c9bcad9c15 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhouse/clickhousenative/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhousenative.impl.codec.columns; +package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhousenative.impl.codec.QueryParsers; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java similarity index 86% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java index 6bb0ef7556..48ea406572 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java @@ -16,12 +16,12 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.buffer.UnpooledByteBufAllocator; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.*; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.*; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; @@ -50,8 +50,8 @@ public ArraySerDesTest(String nm, ClickhouseColumn col, List data) { @Parameterized.Parameters(name = "{0}") public static Iterable dataForTest() { - ClickhouseNativeColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + ClickhouseBinaryColumnDescriptor descr = ClickhouseColumns.columnDescriptorForSpec("Array(Array(Array(LowCardinality(Nullable(String)))))", "name"); + ClickhouseBinaryDatabaseMetadata md = new ClickhouseBinaryDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); ClickhouseColumn col = ClickhouseColumns.columnForSpec(descr, md); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java similarity index 84% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java index 380ba259e5..b3a76f2577 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java @@ -13,10 +13,10 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.impl.codec.ClickhouseNativeColumnDescriptor; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -45,7 +45,7 @@ public class BasicClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; @Before @@ -61,36 +61,36 @@ public void teardDown(TestContext ctx) { @Test public void baseConnectTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(SqlClient::close)); } @Test public void loginFailureTest(TestContext ctx) { - ClickhouseNativeConnectOptions opts = new ClickhouseNativeConnectOptions(options); + ClickhouseBinaryConnectOptions opts = new ClickhouseBinaryConnectOptions(options); opts.setPassword("wrong-password"); - ClickhouseNativeConnection.connect(vertx, opts, ctx.asyncAssertFailure()); + ClickhouseBinaryConnection.connect(vertx, opts, ctx.asyncAssertFailure()); } @Test public void testIntegerRanges(TestContext ctx) { - List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") + List types = Stream.of("Int8", "Int16", "Int32", "Int64", "Int128") .flatMap(el -> "Int128".equals(el) ? Stream.of(el, "Nullable(" + el + ")") : Stream.of(el, "U" + el, "LowCardinality(Nullable(" + el + "))", "Nullable(U" + el + ")", "LowCardinality(Nullable(U" + el + "))")) .map(spec -> ClickhouseColumns.columnDescriptorForSpec(spec, "fake_name")) .collect(Collectors.toList()); List typeNames = types.stream() - .map(ClickhouseNativeColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); + .map(ClickhouseBinaryColumnDescriptor::getUnparsedNativeType).collect(Collectors.toList()); LOG.info("integer columns: " + typeNames); - Iterator typesIter = types.iterator(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + Iterator typesIter = types.iterator(); + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { scheduleIntTypeQuery(ctx, typesIter, conn); })); } - private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseNativeConnection conn) { + private void scheduleIntTypeQuery(TestContext ctx, Iterator typeIterator, ClickhouseBinaryConnection conn) { if (typeIterator.hasNext()) { - ClickhouseNativeColumnDescriptor descr = typeIterator.next(); + ClickhouseBinaryColumnDescriptor descr = typeIterator.next(); String nativeType = descr.getUnparsedNativeType(); //looks like Nullable(UInt128) is broken for min/max at the moment, hence add/subtract BigInteger minValue = descr.getMinValue().add(BigInteger.ONE); @@ -144,7 +144,7 @@ public void nonEmptyLowCardinalityArrayTest(TestContext ctx) { } private void arrayTest(TestContext ctx, String query, List expected) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(res1.size(), expected.size()); @@ -163,7 +163,7 @@ private void arrayTest(TestContext ctx, String query, List expected) { @Test public void baseQueryTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("select 4 as resource, 'aa' as str_col1, CAST('abcdef', 'FixedString(6)') as str_col2").execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(1, res1.size()); @@ -175,7 +175,7 @@ public void baseQueryTest(TestContext ctx) { @Test public void blobTest(TestContext ctx) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("select 'abcd'").execute( ctx.asyncAssertSuccess(res1 -> { ctx.assertEquals(1, res1.size()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java similarity index 85% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java index d7cc0539bc..cdf5655b7d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import org.junit.rules.ExternalResource; import org.testcontainers.containers.ClickHouseContainer; import org.testcontainers.utility.DockerImageName; @@ -24,12 +24,12 @@ public class ClickhouseResource extends ExternalResource { private static final String tlsConnectionUri = System.getProperty("tls.connection.uri"); private ClickHouseContainer server; - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; @Override protected void before() throws Throwable { if (isTestingWithExternalDatabase()) { - this.options = ClickhouseNativeConnectOptions.fromUri(connectionUri); + this.options = ClickhouseBinaryConnectOptions.fromUri(connectionUri); return; } if (this.server != null) { @@ -38,7 +38,7 @@ protected void before() throws Throwable { DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag(clickhouseVersion()); server = new ClickHouseContainer(imageName); server.start(); - this.options = (ClickhouseNativeConnectOptions) new ClickhouseNativeConnectOptions() + this.options = (ClickhouseBinaryConnectOptions) new ClickhouseBinaryConnectOptions() .setPort(server.getMappedPort(ClickHouseContainer.NATIVE_PORT)) .setHost(server.getContainerIpAddress()) .setUser(server.getUsername()) @@ -66,8 +66,8 @@ protected void after() { } } - public ClickhouseNativeConnectOptions options() { - return new ClickhouseNativeConnectOptions(options); + public ClickhouseBinaryConnectOptions options() { + return new ClickhouseBinaryConnectOptions(options); } public static boolean isTestingWithExternalDatabase() { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java index 361aa93f5f..fe004d4cf2 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -39,7 +39,7 @@ public class ExtendedClickhouseTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; private String query; @@ -59,7 +59,7 @@ public void extendedQueryTest(TestContext ctx) { Async async = ctx.async(); LongAdder adder = new LongAdder(); final long limit = 55; - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { query = String.format("select name, value from (SELECT name, value from vertx_cl_test_table limit %s) t1 order by name desc", limit); conn .prepare(query, ctx.asyncAssertSuccess(ps -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java index bbaa6b71bb..73fb38384b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java @@ -18,9 +18,9 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; @@ -46,7 +46,7 @@ public void checkExceptions() throws IOException { } PooledByteBufAllocator allocator = new PooledByteBufAllocator(); - ClickhouseNativeDatabaseMetadata md = new ClickhouseNativeDatabaseMetadata("a", "b", + ClickhouseBinaryDatabaseMetadata md = new ClickhouseBinaryDatabaseMetadata("a", "b", 0, 0,0, 0, "dname", ZoneId.systemDefault(), ZoneId.systemDefault(), "client", Collections.emptyMap(), StandardCharsets.UTF_8, null, null, null, true, true); PacketReader rdr = new PacketReader(md, "none", Collections.emptyMap(), null); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java index 8251d9b552..0c5bd4e66a 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java @@ -19,9 +19,9 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; -import io.vertx.clickhouse.clickhousenative.impl.codec.PacketReader; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; @@ -62,7 +62,7 @@ public static Iterable dataForTest() throws IOException { "/nullable_low_cardinality_without_compression.yaml", "/select_array_of_nullable_string_without_compression.yaml", "/select_empty_array_without_compression.yaml", - "/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" + "/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); @@ -111,7 +111,7 @@ public void doReplayTest() { private void readConnInteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); - ClickhouseNativeDatabaseMetadata md = (ClickhouseNativeDatabaseMetadata)rdr.receivePacket(allocator, buf); + ClickhouseBinaryDatabaseMetadata md = (ClickhouseBinaryDatabaseMetadata)rdr.receivePacket(allocator, buf); do { rdr = new PacketReader(md, fullName, props, lz4Factory); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java index c071763cda..5c828136b9 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -34,7 +34,7 @@ public class SpecialTypesTest { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - private ClickhouseNativeConnectOptions options; + private ClickhouseBinaryConnectOptions options; private Vertx vertx; @Before @@ -141,7 +141,7 @@ public void testIntervalSecondArray(TestContext ctx) { } private void runQuery(TestContext ctx, String query, Class desiredCls, Optional expected) { - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query(query).execute( ctx.asyncAssertSuccess(res -> { ctx.assertEquals(1, res.size()); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java index d1cd0385b6..66ce8f0257 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.clickhousenativeclient.Sleep; import io.vertx.core.Vertx; @@ -46,7 +46,7 @@ public abstract class AllTypesBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - protected ClickhouseNativeConnectOptions options; + protected ClickhouseBinaryConnectOptions options; protected Vertx vertx; public AllTypesBase(String tableSuffix, MyColumnChecker checker) { @@ -63,7 +63,7 @@ public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasL public void setup(TestContext ctx) { options = rule.options(); vertx = Vertx.vertx(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName()).execute(ctx.asyncAssertSuccess()); })); } @@ -95,7 +95,7 @@ private List columnsList(boolean hasLowCardinality) { protected void doTest(TestContext ctx, List batch) { String tableName = tableName(); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { List columnsList = columnsList(hasLowCardinality); String columnsStr = String.join(", ", columnsList); String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java index 157a52cf43..cca6bf6c42 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java index 15c0635ff4..169752de52 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java index 9c6367a5bf..e5c6596869 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java index 9ccf25338f..27f0774820 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal128Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java index 2341a46ac1..6ae41401b3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal256Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java index 2ef3994dcc..e35d01c098 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal32Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java index 4d71673796..58f16b4bcb 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Decimal64Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java index 9197f7249c..e252c4ed81 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java index 05687f698f..1bf329cc6c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java @@ -13,8 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv4Column; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.IPv6Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java index b8d1c494c4..5aaf4c5c62 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.impl.codec.columns.Int128Column; +import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java index d8e90bcaa2..37f6eb00f3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.alltypes; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.Row; @@ -26,10 +26,10 @@ public class StringArrayDeduplicationTester { private final String tableName; - private final ClickhouseNativeConnectOptions options; + private final ClickhouseBinaryConnectOptions options; private final Vertx vertx; - public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseNativeConnectOptions options) { + public StringArrayDeduplicationTester(String tableName, Vertx vertx, ClickhouseBinaryConnectOptions options) { this.tableName = tableName; this.options = options; this.vertx = vertx; @@ -41,7 +41,7 @@ public void test(TestContext ctx) { Tuple.of(2, "val", (Object) new Object[][][]{ {{"str2_1", "str2_2", null, "dedup2"}, {null, "dedup1"}} }), Tuple.of(3, "dedup", (Object) new Object[][][]{ {{"str3_1", "str3_2", null}, {null}, {"dedup3"}} }) ); - ClickhouseNativeConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { + ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.preparedQuery(String.format("INSERT INTO %s (id, nullable_lc_t, nullable_array3_lc_t) VALUES", tableName)).executeBatch(batch, ctx.asyncAssertSuccess(result -> { conn.query("SELECT nullable_lc_t, nullable_array3_lc_t FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java similarity index 100% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java index 1eae44db34..ff98cdf9b5 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java @@ -20,7 +20,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeCollectorTest extends CollectorTestBase { +public class ClickhouseBinaryCollectorTest extends CollectorTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 87% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 80ecb15fba..2e1f20ca6f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -23,7 +23,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { +public class ClickhouseBinaryConnectionAutoRetryTest extends ConnectionAutoRetryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -42,7 +42,7 @@ public void tearDown(TestContext ctx) { @Override protected void initialConnector(int proxyPort) { - SqlConnectOptions proxyOptions = new ClickhouseNativeConnectOptions(options); + SqlConnectOptions proxyOptions = new ClickhouseBinaryConnectOptions(options); proxyOptions.setPort(proxyPort); proxyOptions.setHost("localhost"); connectionConnector = ClientConfig.CONNECT.connect(vertx, proxyOptions); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java similarity index 82% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java index 3341001077..a5032138dc 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -26,7 +26,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeConnectionTest extends ConnectionTestBase { +public class ClickhouseBinaryConnectionTest extends ConnectionTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -36,9 +36,9 @@ public class ClickhouseNativeConnectionTest extends ConnectionTestBase { @Override public void setUp() throws Exception { super.setUp(); - options = new ClickhouseNativeConnectOptions(rule.options()); + options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java index e7140867ad..d9d31da23d 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -28,11 +28,11 @@ import java.time.LocalDate; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { +public class ClickhouseBinaryDataTypeDecodeTest extends BinaryDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); - public ClickhouseNativeBinaryDataTypeDecodeTest() { + public ClickhouseBinaryDataTypeDecodeTest() { } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java index 89c148d0c1..a9fd7a01bf 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -29,7 +29,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { +public class ClickhouseBinaryDataTypeEncodeTest extends BinaryDataTypeEncodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java similarity index 93% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java index 7332ce665d..872544c34b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java @@ -21,7 +21,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeDriverTest extends DriverTestBase { +public class ClickhouseBinaryDriverTest extends DriverTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java index 386615fd5c..4d94e796e3 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java @@ -27,7 +27,7 @@ import java.util.List; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedBatchTest extends PreparedBatchTestBase { +public class ClickhouseBinaryPreparedBatchTest extends PreparedBatchTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 90% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java index 7459610c58..cbee9abe14 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -13,8 +13,8 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseConstants; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; @@ -27,7 +27,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCachedTestBase { +public class ClickhouseBinaryPreparedQueryCachedTest extends PreparedQueryCachedTestBase { @Rule public TestName name = new TestName(); @@ -37,9 +37,9 @@ public class ClickhouseNativePreparedQueryCachedTest extends PreparedQueryCached @Override protected void initConnector() { - options = new ClickhouseNativeConnectOptions(rule.options()); + options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseNativePreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 87% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java index d0127b306a..22640735b7 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -18,7 +18,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryPooledTest extends ClickhouseNativePreparedQueryTestBase { +public class ClickhouseBinaryPreparedQueryPooledTest extends ClickhouseBinaryPreparedQueryTestBase { @Override protected void initConnector() { options = rule.options(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java index 6aead392be..e1bea9513b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java @@ -17,7 +17,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativePreparedQueryTest extends ClickhouseNativePreparedQueryTestBase { +public class ClickhouseBinaryPreparedQueryTest extends ClickhouseBinaryPreparedQueryTestBase { @Override protected void initConnector() { options = rule.options(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 97% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java index 676284f29f..cd43d6faa0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativePreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -20,7 +20,7 @@ import org.junit.Ignore; import org.junit.Test; -public abstract class ClickhouseNativePreparedQueryTestBase extends PreparedQueryTestBase { +public abstract class ClickhouseBinaryPreparedQueryTestBase extends PreparedQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java index 9345c9ead0..40be0be2a0 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -24,7 +24,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeSimpleQueryPooledTest extends SimpleQueryTestBase { +public class ClickhouseBinarySimpleQueryPooledTest extends SimpleQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java similarity index 95% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java index cbd8888dfb..2b0103fb1f 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeSimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java @@ -24,7 +24,7 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeSimpleQueryTest extends SimpleQueryTestBase { +public class ClickhouseBinarySimpleQueryTest extends SimpleQueryTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 95edd2a034..2f26004848 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -26,7 +26,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { +public class ClickhouseBinaryTextDataTypeDecodeTest extends TextDataTypeDecodeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java similarity index 88% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java index bad07a71bd..623a17755b 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java @@ -13,7 +13,7 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.clickhousenativeclient.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; @@ -27,13 +27,13 @@ import org.junit.runner.RunWith; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTracingTest extends TracingTestBase { +public class ClickhouseBinaryTracingTest extends TracingTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @Override protected Pool createPool(Vertx vertx) { - return ClickhouseNativePool.pool(vertx, rule.options(), new PoolOptions()); + return ClickhouseBinaryPool.pool(vertx, rule.options(), new PoolOptions()); } @Override diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java similarity index 96% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java index 40f47e8d0e..f9241aa1db 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseNativeTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java @@ -25,7 +25,7 @@ import java.sql.JDBCType; @RunWith(VertxUnitRunner.class) -public class ClickhouseNativeTransactionTest extends DataTypeTestBase { +public class ClickhouseBinaryTransactionTest extends DataTypeTestBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); diff --git a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java similarity index 74% rename from vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java index bac8b75b43..7c6be23a8c 100644 --- a/vertx-clickhouse-native-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java @@ -13,9 +13,9 @@ package io.vertx.clickhousenativeclient.tck; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnectOptions; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativeConnection; -import io.vertx.clickhouse.clickhousenative.ClickhouseNativePool; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; @@ -28,11 +28,11 @@ public enum ClientConfig { CONNECT() { @Override - Connector connect(Vertx vertx, SqlConnectOptions options) { - return new Connector() { + Connector connect(Vertx vertx, SqlConnectOptions options) { + return new Connector() { @Override - public void connect(Handler> handler) { - ClickhouseNativeConnection.connect(vertx, new ClickhouseNativeConnectOptions(options.toJson()), ar -> { + public void connect(Handler> handler) { + ClickhouseBinaryConnection.connect(vertx, new ClickhouseBinaryConnectOptions(options.toJson()), ar -> { if (ar.succeeded()) { handler.handle(Future.succeededFuture(ar.result())); } else { @@ -50,7 +50,7 @@ public void close() { POOLED() { @Override Connector connect(Vertx vertx, SqlConnectOptions options) { - ClickhouseNativePool pool = ClickhouseNativePool.pool(vertx, new ClickhouseNativeConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); + ClickhouseBinaryPool pool = ClickhouseBinaryPool.pool(vertx, new ClickhouseBinaryConnectOptions(options.toJson()), new PoolOptions().setMaxSize(1)); return new Connector() { @Override public void connect(Handler> handler) { diff --git a/vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py similarity index 100% rename from vertx-clickhouse-native-client/src/test/python/gen_all_types_tables.py rename to vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py diff --git a/vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/ClickhouseNativePreparedQueryCachedTest_testConcurrentClose_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml b/vertx-clickhouse-binary-client/src/test/resources/forged_nested_exception.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/forged_nested_exception.yaml rename to vertx-clickhouse-binary-client/src/test/resources/forged_nested_exception.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/init.sql b/vertx-clickhouse-binary-client/src/test/resources/init.sql similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/init.sql rename to vertx-clickhouse-binary-client/src/test/resources/init.sql diff --git a/vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/insert_prepare_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/insert_prepare_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/insert_prepare_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml b/vertx-clickhouse-binary-client/src/test/resources/log4j2-test.xml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/log4j2-test.xml rename to vertx-clickhouse-binary-client/src/test/resources/log4j2-test.xml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/nullable_low_cardinality_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/nullable_low_cardinality_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/select_array_of_nullable_string_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/select_empty_array_without_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/select_empty_array_without_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/select_empty_array_without_compression.yaml diff --git a/vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml similarity index 100% rename from vertx-clickhouse-native-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml rename to vertx-clickhouse-binary-client/src/test/resources/with_max_block_size_and_2_datablocks_with_compression.yaml diff --git a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java b/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java deleted file mode 100644 index 660576f56b..0000000000 --- a/vertx-clickhouse-native-client/src/main/java/io/vertx/clickhouse/clickhousenative/impl/codec/ClientInfo.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * - * Copyright (c) 2021 Vladimir Vishnevskii - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - */ - -package io.vertx.clickhouse.clickhousenative.impl.codec; - -import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhousenative.impl.ClickhouseNativeDatabaseMetadata; - -import java.util.Map; - -import static io.vertx.clickhouse.clickhousenative.ClickhouseConstants.*; - -public class ClientInfo { - public static final int NO_QUERY = 0; - public static final int INITIAL_QUERY = 1; - - private final ClickhouseNativeDatabaseMetadata meta; - - public ClientInfo(ClickhouseNativeDatabaseMetadata meta) { - this.meta = meta; - } - - public void serializeTo(ByteBuf buf) { - int serverRevision = meta.getRevision(); - if (serverRevision < DBMS_MIN_REVISION_WITH_CLIENT_INFO) { - throw new IllegalStateException(String.format("server revision %d < DBMS_MIN_REVISION_WITH_CLIENT_INFO(%d)", - serverRevision, DBMS_MIN_REVISION_WITH_CLIENT_INFO)); - } - buf.writeByte(INITIAL_QUERY); - Map properties = meta.getProperties(); - - //initial_user - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, ""), buf); - //initial_query_id - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_QUERY_ID, ""), buf); - //initial_address - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_ADDRESS, "0.0.0.0:0"), buf); - //interface: TCP - buf.writeByte(1); - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_USER, System.getProperty("user.name")), buf); - ByteBufUtils.writePascalString(properties.getOrDefault(OPTION_INITIAL_HOSTNAME, "unknown-hostname"), buf); - ByteBufUtils.writePascalString(meta.getFullClientName(), buf); - ByteBufUtils.writeULeb128(CLIENT_VERSION_MAJOR, buf); - ByteBufUtils.writeULeb128(CLIENT_VERSION_MINOR, buf); - ByteBufUtils.writeULeb128(CLIENT_REVISION, buf); - if (serverRevision >= DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) { - //quota_key - ByteBufUtils.writePascalString("", buf); - } - if (serverRevision >= DBMS_MIN_REVISION_WITH_VERSION_PATCH) { - ByteBufUtils.writeULeb128(CLIENT_VERSION_PATCH, buf); - } - } -} diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF b/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 40f000bfbe..0000000000 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Automatic-Module-Name: io.vertx.client.sql.clickhouse.native - diff --git a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver deleted file mode 100644 index 860bd992e9..0000000000 --- a/vertx-clickhouse-native-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ /dev/null @@ -1 +0,0 @@ -io.vertx.clickhouse.clickhousenative.spi.ClickhouseNativeDriver diff --git a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql b/vertx-clickhouse-native-client/src/test/python/all_types_table.sql deleted file mode 100644 index c92839a52f..0000000000 --- a/vertx-clickhouse-native-client/src/test/python/all_types_table.sql +++ /dev/null @@ -1,354 +0,0 @@ -set allow_suspicious_low_cardinality_types=true; -set allow_experimental_bigint_types=true; -DROP TABLE IF EXISTS vertx_test_int8; -CREATE TABLE vertx_test_int8 ( - id Int8, - simple_t Int8, - nullable_t Nullable(Int8), - array_t Array(Int8), - array3_t Array(Array(Array(Int8))), - nullable_array_t Array(Nullable(Int8)), - nullable_array3_t Array(Array(Array(Nullable(Int8)))), - simple_lc_t LowCardinality(Int8), - nullable_lc_t LowCardinality(Nullable(Int8)), - array_lc_t Array(LowCardinality(Int8)), - array3_lc_t Array(Array(Array(LowCardinality(Int8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int8))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint8; -CREATE TABLE vertx_test_uint8 ( - id Int8, - simple_t UInt8, - nullable_t Nullable(UInt8), - array_t Array(UInt8), - array3_t Array(Array(Array(UInt8))), - nullable_array_t Array(Nullable(UInt8)), - nullable_array3_t Array(Array(Array(Nullable(UInt8)))), - simple_lc_t LowCardinality(UInt8), - nullable_lc_t LowCardinality(Nullable(UInt8)), - array_lc_t Array(LowCardinality(UInt8)), - array3_lc_t Array(Array(Array(LowCardinality(UInt8)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt8))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt8))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int16; -CREATE TABLE vertx_test_int16 ( - id Int8, - simple_t Int16, - nullable_t Nullable(Int16), - array_t Array(Int16), - array3_t Array(Array(Array(Int16))), - nullable_array_t Array(Nullable(Int16)), - nullable_array3_t Array(Array(Array(Nullable(Int16)))), - simple_lc_t LowCardinality(Int16), - nullable_lc_t LowCardinality(Nullable(Int16)), - array_lc_t Array(LowCardinality(Int16)), - array3_lc_t Array(Array(Array(LowCardinality(Int16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int16))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint16; -CREATE TABLE vertx_test_uint16 ( - id Int8, - simple_t UInt16, - nullable_t Nullable(UInt16), - array_t Array(UInt16), - array3_t Array(Array(Array(UInt16))), - nullable_array_t Array(Nullable(UInt16)), - nullable_array3_t Array(Array(Array(Nullable(UInt16)))), - simple_lc_t LowCardinality(UInt16), - nullable_lc_t LowCardinality(Nullable(UInt16)), - array_lc_t Array(LowCardinality(UInt16)), - array3_lc_t Array(Array(Array(LowCardinality(UInt16)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt16))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt16))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int32; -CREATE TABLE vertx_test_int32 ( - id Int8, - simple_t Int32, - nullable_t Nullable(Int32), - array_t Array(Int32), - array3_t Array(Array(Array(Int32))), - nullable_array_t Array(Nullable(Int32)), - nullable_array3_t Array(Array(Array(Nullable(Int32)))), - simple_lc_t LowCardinality(Int32), - nullable_lc_t LowCardinality(Nullable(Int32)), - array_lc_t Array(LowCardinality(Int32)), - array3_lc_t Array(Array(Array(LowCardinality(Int32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint32; -CREATE TABLE vertx_test_uint32 ( - id Int8, - simple_t UInt32, - nullable_t Nullable(UInt32), - array_t Array(UInt32), - array3_t Array(Array(Array(UInt32))), - nullable_array_t Array(Nullable(UInt32)), - nullable_array3_t Array(Array(Array(Nullable(UInt32)))), - simple_lc_t LowCardinality(UInt32), - nullable_lc_t LowCardinality(Nullable(UInt32)), - array_lc_t Array(LowCardinality(UInt32)), - array3_lc_t Array(Array(Array(LowCardinality(UInt32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int64; -CREATE TABLE vertx_test_int64 ( - id Int8, - simple_t Int64, - nullable_t Nullable(Int64), - array_t Array(Int64), - array3_t Array(Array(Array(Int64))), - nullable_array_t Array(Nullable(Int64)), - nullable_array3_t Array(Array(Array(Nullable(Int64)))), - simple_lc_t LowCardinality(Int64), - nullable_lc_t LowCardinality(Nullable(Int64)), - array_lc_t Array(LowCardinality(Int64)), - array3_lc_t Array(Array(Array(LowCardinality(Int64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uint64; -CREATE TABLE vertx_test_uint64 ( - id Int8, - simple_t UInt64, - nullable_t Nullable(UInt64), - array_t Array(UInt64), - array3_t Array(Array(Array(UInt64))), - nullable_array_t Array(Nullable(UInt64)), - nullable_array3_t Array(Array(Array(Nullable(UInt64)))), - simple_lc_t LowCardinality(UInt64), - nullable_lc_t LowCardinality(Nullable(UInt64)), - array_lc_t Array(LowCardinality(UInt64)), - array3_lc_t Array(Array(Array(LowCardinality(UInt64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(UInt64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(UInt64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_int128; -CREATE TABLE vertx_test_int128 ( - id Int8, - simple_t Int128, - nullable_t Nullable(Int128), - array_t Array(Int128), - array3_t Array(Array(Array(Int128))), - nullable_array_t Array(Nullable(Int128)), - nullable_array3_t Array(Array(Array(Nullable(Int128)))), - simple_lc_t LowCardinality(Int128), - nullable_lc_t LowCardinality(Nullable(Int128)), - array_lc_t Array(LowCardinality(Int128)), - array3_lc_t Array(Array(Array(LowCardinality(Int128)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Int128))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Int128))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_string; -CREATE TABLE vertx_test_string ( - id Int8, - simple_t String, - nullable_t Nullable(String), - array_t Array(String), - array3_t Array(Array(Array(String))), - nullable_array_t Array(Nullable(String)), - nullable_array3_t Array(Array(Array(Nullable(String)))), - simple_lc_t LowCardinality(String), - nullable_lc_t LowCardinality(Nullable(String)), - array_lc_t Array(LowCardinality(String)), - array3_lc_t Array(Array(Array(LowCardinality(String)))), - nullable_array_lc_t Array(LowCardinality(Nullable(String))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(String))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_fixedstring; -CREATE TABLE vertx_test_fixedstring ( - id Int8, - simple_t FixedString(12), - nullable_t Nullable(FixedString(12)), - array_t Array(FixedString(12)), - array3_t Array(Array(Array(FixedString(12)))), - nullable_array_t Array(Nullable(FixedString(12))), - nullable_array3_t Array(Array(Array(Nullable(FixedString(12))))), - simple_lc_t LowCardinality(FixedString(12)), - nullable_lc_t LowCardinality(Nullable(FixedString(12))), - array_lc_t Array(LowCardinality(FixedString(12))), - array3_lc_t Array(Array(Array(LowCardinality(FixedString(12))))), - nullable_array_lc_t Array(LowCardinality(Nullable(FixedString(12)))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(FixedString(12)))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_datetime; -CREATE TABLE vertx_test_datetime ( - id Int8, - simple_t DateTime, - nullable_t Nullable(DateTime), - array_t Array(DateTime), - array3_t Array(Array(Array(DateTime))), - nullable_array_t Array(Nullable(DateTime)), - nullable_array3_t Array(Array(Array(Nullable(DateTime)))), - simple_lc_t LowCardinality(DateTime), - nullable_lc_t LowCardinality(Nullable(DateTime)), - array_lc_t Array(LowCardinality(DateTime)), - array3_lc_t Array(Array(Array(LowCardinality(DateTime)))), - nullable_array_lc_t Array(LowCardinality(Nullable(DateTime))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(DateTime))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_datetime64; -CREATE TABLE vertx_test_datetime64 ( - id Int8, - simple_t DateTime64(3), - nullable_t Nullable(DateTime64(3)), - array_t Array(DateTime64(3)), - array3_t Array(Array(Array(DateTime64(3)))), - nullable_array_t Array(Nullable(DateTime64(3))), - nullable_array3_t Array(Array(Array(Nullable(DateTime64(3))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_date; -CREATE TABLE vertx_test_date ( - id Int8, - simple_t Date, - nullable_t Nullable(Date), - array_t Array(Date), - array3_t Array(Array(Array(Date))), - nullable_array_t Array(Nullable(Date)), - nullable_array3_t Array(Array(Array(Nullable(Date)))), - simple_lc_t LowCardinality(Date), - nullable_lc_t LowCardinality(Nullable(Date)), - array_lc_t Array(LowCardinality(Date)), - array3_lc_t Array(Array(Array(LowCardinality(Date)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Date))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Date))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_uuid; -CREATE TABLE vertx_test_uuid ( - id Int8, - simple_t UUID, - nullable_t Nullable(UUID), - array_t Array(UUID), - array3_t Array(Array(Array(UUID))), - nullable_array_t Array(Nullable(UUID)), - nullable_array3_t Array(Array(Array(Nullable(UUID)))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal32; -CREATE TABLE vertx_test_decimal32 ( - id Int8, - simple_t Decimal32(4), - nullable_t Nullable(Decimal32(4)), - array_t Array(Decimal32(4)), - array3_t Array(Array(Array(Decimal32(4)))), - nullable_array_t Array(Nullable(Decimal32(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal32(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal64; -CREATE TABLE vertx_test_decimal64 ( - id Int8, - simple_t Decimal64(4), - nullable_t Nullable(Decimal64(4)), - array_t Array(Decimal64(4)), - array3_t Array(Array(Array(Decimal64(4)))), - nullable_array_t Array(Nullable(Decimal64(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal64(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal128; -CREATE TABLE vertx_test_decimal128 ( - id Int8, - simple_t Decimal128(4), - nullable_t Nullable(Decimal128(4)), - array_t Array(Decimal128(4)), - array3_t Array(Array(Array(Decimal128(4)))), - nullable_array_t Array(Nullable(Decimal128(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal128(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_decimal256; -CREATE TABLE vertx_test_decimal256 ( - id Int8, - simple_t Decimal256(4), - nullable_t Nullable(Decimal256(4)), - array_t Array(Decimal256(4)), - array3_t Array(Array(Array(Decimal256(4)))), - nullable_array_t Array(Nullable(Decimal256(4))), - nullable_array3_t Array(Array(Array(Nullable(Decimal256(4))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_enum8; -CREATE TABLE vertx_test_enum8 ( - id Int8, - simple_t Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127), - nullable_t Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array_t Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)), - array3_t Array(Array(Array(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127)))), - nullable_array_t Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))), - nullable_array3_t Array(Array(Array(Nullable(Enum8('v0' = -128, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 127))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_enum16; -CREATE TABLE vertx_test_enum16 ( - id Int8, - simple_t Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767), - nullable_t Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array_t Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)), - array3_t Array(Array(Array(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767)))), - nullable_array_t Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))), - nullable_array3_t Array(Array(Array(Nullable(Enum16('v0' = -32768, 'v1' = -2,'v2' = -1, 'v3' = 0,'v4' = 1, 'v5' = 2, 'v6' = 32767))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_float32; -CREATE TABLE vertx_test_float32 ( - id Int8, - simple_t Float32, - nullable_t Nullable(Float32), - array_t Array(Float32), - array3_t Array(Array(Array(Float32))), - nullable_array_t Array(Nullable(Float32)), - nullable_array3_t Array(Array(Array(Nullable(Float32)))), - simple_lc_t LowCardinality(Float32), - nullable_lc_t LowCardinality(Nullable(Float32)), - array_lc_t Array(LowCardinality(Float32)), - array3_lc_t Array(Array(Array(LowCardinality(Float32)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float32))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float32))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_float64; -CREATE TABLE vertx_test_float64 ( - id Int8, - simple_t Float64, - nullable_t Nullable(Float64), - array_t Array(Float64), - array3_t Array(Array(Array(Float64))), - nullable_array_t Array(Nullable(Float64)), - nullable_array3_t Array(Array(Array(Nullable(Float64)))), - simple_lc_t LowCardinality(Float64), - nullable_lc_t LowCardinality(Nullable(Float64)), - array_lc_t Array(LowCardinality(Float64)), - array3_lc_t Array(Array(Array(LowCardinality(Float64)))), - nullable_array_lc_t Array(LowCardinality(Nullable(Float64))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Float64))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_ipv6; -CREATE TABLE vertx_test_ipv6 ( - id Int8, - simple_t IPv6, - nullable_t Nullable(IPv6), - array_t Array(IPv6), - array3_t Array(Array(Array(IPv6))), - nullable_array_t Array(Nullable(IPv6)), - nullable_array3_t Array(Array(Array(Nullable(IPv6)))), - simple_lc_t LowCardinality(IPv6), - nullable_lc_t LowCardinality(Nullable(IPv6)), - array_lc_t Array(LowCardinality(IPv6)), - array3_lc_t Array(Array(Array(LowCardinality(IPv6)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv6))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv6))))) -) engine = Memory(); -DROP TABLE IF EXISTS vertx_test_ipv4; -CREATE TABLE vertx_test_ipv4 ( - id Int8, - simple_t IPv4, - nullable_t Nullable(IPv4), - array_t Array(IPv4), - array3_t Array(Array(Array(IPv4))), - nullable_array_t Array(Nullable(IPv4)), - nullable_array3_t Array(Array(Array(Nullable(IPv4)))), - simple_lc_t LowCardinality(IPv4), - nullable_lc_t LowCardinality(Nullable(IPv4)), - array_lc_t Array(LowCardinality(IPv4)), - array3_lc_t Array(Array(Array(LowCardinality(IPv4)))), - nullable_array_lc_t Array(LowCardinality(Nullable(IPv4))), - nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(IPv4))))) -) engine = Memory(); From 8b1b28a09990b0390da5c65a80e48a4273862f34 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 15:35:55 +0300 Subject: [PATCH 160/176] replaced confusing 'native' to 'binary' in pom.xml Signed-off-by: vladimir --- pom.xml | 2 +- vertx-clickhouse-binary-client/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0252df0300..25c81b1d78 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,7 @@ vertx-mysql-client vertx-mssql-client vertx-db2-client - vertx-clickhouse-native-client + vertx-clickhouse-binary-client vertx-sql-client-templates vertx-oracle-client diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 7e33378c9d..96ed3a092d 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -25,7 +25,7 @@ 4.1.0-SNAPSHOT - vertx-clickhouse-native-client + vertx-clickhouse-binary-client Vertx Clickhouse native Client https://github.com/eclipse-vertx/vertx-sql-client From 6d3e8e3fea0e1256a48efc5423686cdfe2015403 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:08:59 +0300 Subject: [PATCH 161/176] replaced confusing 'native' to 'binary' in tests and package-info Signed-off-by: vladimir --- .../io/vertx/clickhouse/clickhouse/binary/package-info.java | 2 +- .../ArraySerDesTest.java | 2 +- .../BasicClickhouseTest.java | 2 +- .../ClickhouseResource.java | 2 +- .../ExtendedClickhouseTest.java | 2 +- .../NestedExceptionsTest.java | 2 +- .../PacketReaderReplayTest.java | 2 +- .../PacketUtil.java | 2 +- .../Sleep.java | 2 +- .../SpecialTypesTest.java | 2 +- .../alltypes/AllTypesBase.java | 6 +++--- .../alltypes/BlobTest.java | 2 +- .../alltypes/DateTest.java | 2 +- .../alltypes/DateTime64Test.java | 2 +- .../alltypes/DateTimeTest.java | 2 +- .../alltypes/Decimal128Test.java | 2 +- .../alltypes/Decimal256Test.java | 2 +- .../alltypes/Decimal32Test.java | 2 +- .../alltypes/Decimal64Test.java | 2 +- .../alltypes/Enum16Test.java | 2 +- .../alltypes/Enum8Test.java | 2 +- .../alltypes/EnumTest.java | 2 +- .../alltypes/FixedStringTest.java | 2 +- .../alltypes/Float32Test.java | 2 +- .../alltypes/Float64Test.java | 2 +- .../alltypes/HugeDecimalTest.java | 2 +- .../alltypes/IPv4Test.java | 2 +- .../alltypes/IPv6Test.java | 2 +- .../alltypes/Int128Test.java | 2 +- .../alltypes/Int16Test.java | 2 +- .../alltypes/Int32Test.java | 2 +- .../alltypes/Int64Test.java | 2 +- .../alltypes/Int8Test.java | 2 +- .../alltypes/StringArrayDeduplicationTester.java | 2 +- .../alltypes/StringTest.java | 2 +- .../alltypes/TestEnum.java | 2 +- .../alltypes/UInt16Test.java | 2 +- .../alltypes/UInt32Test.java | 2 +- .../alltypes/UInt64Test.java | 2 +- .../alltypes/UInt8Test.java | 2 +- .../alltypes/UUIDTest.java | 2 +- .../tck/ClickhouseBinaryCollectorTest.java | 4 ++-- .../tck/ClickhouseBinaryConnectionAutoRetryTest.java | 4 ++-- .../tck/ClickhouseBinaryConnectionTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeEncodeTest.java | 6 +++--- .../tck/ClickhouseBinaryDriverTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedBatchTest.java | 6 +++--- .../tck/ClickhouseBinaryPreparedQueryCachedTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTestBase.java | 4 ++-- .../tck/ClickhouseBinarySimpleQueryPooledTest.java | 6 +++--- .../tck/ClickhouseBinarySimpleQueryTest.java | 6 +++--- .../tck/ClickhouseBinaryTextDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryTracingTest.java | 4 ++-- .../tck/ClickhouseBinaryTransactionTest.java | 4 ++-- .../tck/ClientConfig.java | 2 +- 58 files changed, 78 insertions(+), 78 deletions(-) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ArraySerDesTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/BasicClickhouseTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ClickhouseResource.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/ExtendedClickhouseTest.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/NestedExceptionsTest.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/PacketReaderReplayTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/PacketUtil.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/Sleep.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/SpecialTypesTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/AllTypesBase.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/BlobTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTime64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/DateTimeTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal128Test.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal256Test.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Decimal64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Enum16Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Enum8Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/EnumTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/FixedStringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Float32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Float64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/HugeDecimalTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/IPv4Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/IPv6Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int128Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/Int8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/StringArrayDeduplicationTester.java (98%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/StringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/TestEnum.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UInt8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/alltypes/UUIDTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryCollectorTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryConnectionAutoRetryTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryConnectionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDataTypeEncodeTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryDriverTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedBatchTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryCachedTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryPooledTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryPreparedQueryTestBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinarySimpleQueryPooledTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinarySimpleQueryTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTracingTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClickhouseBinaryTransactionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousenativeclient => clickhousebinaryclient}/tck/ClientConfig.java (98%) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java index c78f412786..3ef668416c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java @@ -11,7 +11,7 @@ * */ -@ModuleGen(name = "vertx-clickhousenative-client", groupPackage = "io.vertx") +@ModuleGen(name = "vertx-clickhousebinary-client", groupPackage = "io.vertx") package io.vertx.clickhouse.clickhouse.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java index 48ea406572..18cde58df4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java index b3a76f2577..54bbe3b837 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java index cdf5655b7d..d87115aef1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java index fe004d4cf2..06a6ed82ed 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java index 73fb38384b..6a882dd478 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java index 0c5bd4e66a..907652f71d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java index f53eaf4c47..da45f55aac 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/PacketUtil.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java index 884e90d080..b9475eea86 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/Sleep.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; public class Sleep { //updates may be async even for non-replicated tables; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java index 5c828136b9..5ebe88a09d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient; +package io.vertx.clickhousebinaryclient; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java index 66ce8f0257..9586dbf898 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java index f2f8169a0c..fd9370dc64 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java index cca6bf6c42..0ce83aed5e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java index 169752de52..cdb07a3396 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java index e5c6596869..74c872adac 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java index 27f0774820..de4939436f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java index 6ae41401b3..d7952f7c85 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java index e35d01c098..585a55849c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java index 58f16b4bcb..d11311a486 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java index 47c9ca9cfd..5a3d5347fd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java index 759125f59b..52ea8288d4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java index 6bcaad22ae..f32c404139 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java index ecfbb6addc..5ddae4fbb6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java index 9443ee0be6..24e8889eb8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java index 0df858e0ca..09c4f2823c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java index 42c012f2d9..5f247afe8a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java index e252c4ed81..b069c9f6be 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java index 1bf329cc6c..1e5f66c5c2 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java index 5aaf4c5c62..425b7f3ad6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java index 36b47628e5..f294302b0e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java index a204a07840..c27f00ea38 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java index 9c402df55a..e0d945dd40 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java index c1b8a29438..b5955ae48e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java index 37f6eb00f3..9c876125cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java index 46925a0ab9..77aa9ff526 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/StringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java index 1853465c37..7bf109f73c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; enum TestEnum { v0, v1, v2, v3, v4, v5, v6 diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java index 4434b1dd84..002d375a94 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java index 1158e4820c..faef27decd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java index cec0bd6361..c0e98619dc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java index b2e1f87fc7..47d7b47bdc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java index df8c288eec..20c3d2a13f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.alltypes; +package io.vertx.clickhousebinaryclient.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java index ff98cdf9b5..c495cc2d83 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.CollectorTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 2e1f20ca6f..2d74957077 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java index a5032138dc..bd937d3567 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java index d9d31da23d..42664f48f1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java index a9fd7a01bf..6a920940a8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java index 872544c34b..0a3b3a619a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.DriverTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java index 4d94e796e3..6533c220e3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java index cbee9abe14..91d4d472bb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java index 22640735b7..01ebd21e40 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java index e1bea9513b..c2ed50216e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java index cd43d6faa0..a3d542ce44 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryPreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.tck.PreparedQueryTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java index 40be0be2a0..63d484b143 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java index 2b0103fb1f..486e347735 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinarySimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; -import io.vertx.clickhousenativeclient.Sleep; +import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 2f26004848..6cadfacd34 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java index 623a17755b..4c7f3d14a8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java index f9241aa1db..b3eae566f4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClickhouseBinaryTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; -import io.vertx.clickhousenativeclient.ClickhouseResource; +import io.vertx.clickhousebinaryclient.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java similarity index 98% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java index 7c6be23a8c..7368987ce4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousenativeclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousenativeclient.tck; +package io.vertx.clickhousebinaryclient.tck; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; From 6c9faf1678a708efb1cbf372e4a3591cc64b16a6 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:16:45 +0300 Subject: [PATCH 162/176] replaced confusing 'native' to 'binary' in tests and package-info Signed-off-by: vladimir --- .../ClickhouseBinaryConnectOptionsConverter.java | 6 +++--- .../src/main/java/examples/SqlClientExamples.java | 2 +- .../binary/ClickhouseBinaryConnectOptions.java | 4 ++-- .../binary/ClickhouseBinaryConnection.java | 4 ++-- .../binary/ClickhouseBinaryPool.java | 4 ++-- .../binary/ClickhouseConstants.java | 2 +- .../binary/impl/BaseBlock.java | 6 +++--- .../binary/impl/BlockInfo.java | 6 +++--- .../impl/ClickhouseBinaryConnectionFactory.java | 6 +++--- .../impl/ClickhouseBinaryConnectionImpl.java | 6 +++--- .../impl/ClickhouseBinaryConnectionUriParser.java | 2 +- .../impl/ClickhouseBinaryDatabaseMetadata.java | 2 +- .../binary/impl/ClickhouseBinaryPoolImpl.java | 6 +++--- .../binary/impl/ClickhouseBinaryRowDesc.java | 2 +- .../binary/impl/ClickhouseBinaryRowImpl.java | 4 ++-- .../impl/ClickhouseBinarySocketConnection.java | 4 ++-- .../binary/impl/ClickhouseServerException.java | 2 +- .../binary/impl/ColumnOrientedBlock.java | 6 +++--- .../binary/impl/RowOrientedBlock.java | 12 ++++++------ .../binary/impl/codec/BlockStreamProfileInfo.java | 2 +- .../impl/codec/BlockStreamProfileInfoReader.java | 2 +- .../binary/impl/codec/ByteBufUtils.java | 2 +- .../binary/impl/codec/ClickhouseBinaryCodec.java | 4 ++-- .../codec/ClickhouseBinaryColumnDescriptor.java | 2 +- .../impl/codec/ClickhouseBinaryCommandCodec.java | 2 +- .../binary/impl/codec/ClickhouseBinaryDecoder.java | 4 ++-- .../binary/impl/codec/ClickhouseBinaryEncoder.java | 4 ++-- .../impl/codec/ClickhouseBinaryParamDesc.java | 2 +- .../codec/ClickhouseBinaryPreparedStatement.java | 4 ++-- .../ClickhouseBinaryQueryCommandBaseCodec.java | 2 +- .../impl/codec/ClickhouseExceptionReader.java | 4 ++-- .../impl/codec/ClickhouseStreamDataSink.java | 2 +- .../impl/codec/ClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/ClientInfo.java | 6 +++--- .../binary/impl/codec/ClientPacketTypes.java | 2 +- .../impl/codec/CloseConnectionCommandCodec.java | 2 +- .../binary/impl/codec/CloseCursorCommandCodec.java | 4 ++-- .../impl/codec/CloseStatementCommandCodec.java | 4 ++-- .../impl/codec/ColumnOrientedBlockReader.java | 14 +++++++------- .../binary/impl/codec/Compression.java | 2 +- .../binary/impl/codec/DatabaseMetadataReader.java | 6 +++--- .../impl/codec/ExtendedQueryCommandCodec.java | 12 ++++++------ .../binary/impl/codec/InitCommandCodec.java | 8 ++++---- .../impl/codec/Lz4ClickhouseStreamDataSink.java | 4 ++-- .../impl/codec/Lz4ClickhouseStreamDataSource.java | 4 ++-- .../impl/codec/MultistringMessageReader.java | 2 +- .../binary/impl/codec/PacketForge.java | 12 ++++++------ .../binary/impl/codec/PacketReader.java | 12 ++++++------ .../binary/impl/codec/PrepareStatementCodec.java | 4 ++-- .../binary/impl/codec/QueryInfo.java | 2 +- .../binary/impl/codec/QueryParsers.java | 2 +- .../binary/impl/codec/QueryProcessingStage.java | 2 +- .../binary/impl/codec/QueryProgressInfo.java | 2 +- .../binary/impl/codec/QueryProgressInfoReader.java | 6 +++--- .../impl/codec/RawClickhouseStreamDataSink.java | 2 +- .../impl/codec/RawClickhouseStreamDataSource.java | 2 +- .../binary/impl/codec/RowResultDecoder.java | 10 +++++----- .../binary/impl/codec/ServerPacketType.java | 2 +- .../binary/impl/codec/SimpleQueryCommandCodec.java | 8 ++++---- .../binary/impl/codec/TableColumns.java | 4 ++-- .../binary/impl/codec/columns/ArrayColumn.java | 6 +++--- .../impl/codec/columns/ArrayColumnReader.java | 8 ++++---- .../impl/codec/columns/ArrayColumnWriter.java | 8 ++++---- .../impl/codec/columns/ArrayIntPairIterator.java | 2 +- .../impl/codec/columns/ClickhouseColumn.java | 4 ++-- .../impl/codec/columns/ClickhouseColumnReader.java | 6 +++--- .../impl/codec/columns/ClickhouseColumnWriter.java | 6 +++--- .../impl/codec/columns/ClickhouseColumns.java | 10 +++++----- .../binary/impl/codec/columns/ColumnUtils.java | 4 ++-- .../binary/impl/codec/columns/DateColumn.java | 4 ++-- .../impl/codec/columns/DateColumnReader.java | 4 ++-- .../impl/codec/columns/DateColumnWriter.java | 6 +++--- .../impl/codec/columns/DateTime64Column.java | 4 ++-- .../impl/codec/columns/DateTime64ColumnReader.java | 6 +++--- .../impl/codec/columns/DateTime64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/DateTimeColumn.java | 4 ++-- .../impl/codec/columns/DateTimeColumnReader.java | 6 +++--- .../impl/codec/columns/DateTimeColumnWriter.java | 6 +++--- .../impl/codec/columns/Decimal128Column.java | 4 ++-- .../impl/codec/columns/Decimal256Column.java | 4 ++-- .../binary/impl/codec/columns/Decimal32Column.java | 4 ++-- .../impl/codec/columns/Decimal32ColumnReader.java | 6 +++--- .../impl/codec/columns/Decimal32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Decimal64Column.java | 4 ++-- .../impl/codec/columns/Decimal64ColumnReader.java | 6 +++--- .../impl/codec/columns/Decimal64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Enum16Column.java | 4 ++-- .../impl/codec/columns/Enum16ColumnReader.java | 4 ++-- .../impl/codec/columns/Enum16ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Enum8Column.java | 4 ++-- .../impl/codec/columns/Enum8ColumnReader.java | 4 ++-- .../impl/codec/columns/Enum8ColumnWriter.java | 6 +++--- .../impl/codec/columns/EnumColumnDecoder.java | 2 +- .../impl/codec/columns/EnumColumnEncoder.java | 2 +- .../impl/codec/columns/EnumColumnReader.java | 2 +- .../impl/codec/columns/EnumResolutionMethod.java | 2 +- .../impl/codec/columns/FixedStringColumn.java | 6 +++--- .../codec/columns/FixedStringColumnReader.java | 8 ++++---- .../codec/columns/FixedStringColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Float32Column.java | 4 ++-- .../impl/codec/columns/Float32ColumnReader.java | 6 +++--- .../impl/codec/columns/Float32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Float64Column.java | 4 ++-- .../impl/codec/columns/Float64ColumnReader.java | 6 +++--- .../impl/codec/columns/Float64ColumnWriter.java | 6 +++--- .../codec/columns/GenericDecimalColumnReader.java | 6 +++--- .../codec/columns/GenericDecimalColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IPv4Column.java | 4 ++-- .../impl/codec/columns/IPv4ColumnReader.java | 4 ++-- .../impl/codec/columns/IPv4ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IPv6Column.java | 6 +++--- .../impl/codec/columns/IPv6ColumnReader.java | 6 +++--- .../impl/codec/columns/IPv6ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Int128Column.java | 4 ++-- .../impl/codec/columns/Int128ColumnReader.java | 6 +++--- .../impl/codec/columns/Int128ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/IntPairIterator.java | 2 +- .../binary/impl/codec/columns/IntervalColumn.java | 4 ++-- .../impl/codec/columns/IntervalColumnReader.java | 4 ++-- .../impl/codec/columns/ListPairedIterator.java | 2 +- .../impl/codec/columns/LowCardinalityColumn.java | 6 +++--- .../codec/columns/LowCardinalityColumnReader.java | 8 ++++---- .../codec/columns/LowCardinalityColumnWriter.java | 8 ++++---- .../binary/impl/codec/columns/PairedIterator.java | 2 +- .../binary/impl/codec/columns/StringCache.java | 2 +- .../binary/impl/codec/columns/StringColumn.java | 6 +++--- .../impl/codec/columns/StringColumnReader.java | 8 ++++---- .../impl/codec/columns/StringColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/Triplet.java | 2 +- .../binary/impl/codec/columns/UInt16Column.java | 4 ++-- .../impl/codec/columns/UInt16ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt16ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt32Column.java | 4 ++-- .../impl/codec/columns/UInt32ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt32ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt64Column.java | 4 ++-- .../impl/codec/columns/UInt64ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt64ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UInt8Column.java | 4 ++-- .../impl/codec/columns/UInt8ColumnReader.java | 6 +++--- .../impl/codec/columns/UInt8ColumnWriter.java | 6 +++--- .../binary/impl/codec/columns/UUIDColumn.java | 4 ++-- .../impl/codec/columns/UUIDColumnReader.java | 6 +++--- .../impl/codec/columns/UUIDColumnWriter.java | 6 +++--- .../binary/package-info.java | 2 +- .../binary/spi/ClickhouseBinaryDriver.java | 6 +++--- .../services/io.vertx.sqlclient.spi.Driver | 2 +- .../binary}/ArraySerDesTest.java | 14 +++++++------- .../binary}/BasicClickhouseTest.java | 8 +++----- .../binary}/ClickhouseResource.java | 6 +++--- .../binary}/ExtendedClickhouseTest.java | 4 +--- .../binary}/NestedExceptionsTest.java | 8 ++++---- .../binary}/PacketReaderReplayTest.java | 7 +++---- .../binary}/PacketUtil.java | 2 +- .../binary}/Sleep.java | 2 +- .../binary}/SpecialTypesTest.java | 4 +--- .../binary}/alltypes/AllTypesBase.java | 10 +++++----- .../binary}/alltypes/BlobTest.java | 2 +- .../binary}/alltypes/DateTest.java | 4 ++-- .../binary}/alltypes/DateTime64Test.java | 4 ++-- .../binary}/alltypes/DateTimeTest.java | 4 ++-- .../binary}/alltypes/Decimal128Test.java | 4 ++-- .../binary}/alltypes/Decimal256Test.java | 4 ++-- .../binary}/alltypes/Decimal32Test.java | 4 ++-- .../binary}/alltypes/Decimal64Test.java | 4 ++-- .../binary}/alltypes/Enum16Test.java | 2 +- .../binary}/alltypes/Enum8Test.java | 2 +- .../binary}/alltypes/EnumTest.java | 2 +- .../binary}/alltypes/FixedStringTest.java | 2 +- .../binary}/alltypes/Float32Test.java | 2 +- .../binary}/alltypes/Float64Test.java | 2 +- .../binary}/alltypes/HugeDecimalTest.java | 2 +- .../binary}/alltypes/IPv4Test.java | 4 ++-- .../binary}/alltypes/IPv6Test.java | 4 ++-- .../binary}/alltypes/Int128Test.java | 4 ++-- .../binary}/alltypes/Int16Test.java | 2 +- .../binary}/alltypes/Int32Test.java | 2 +- .../binary}/alltypes/Int64Test.java | 2 +- .../binary}/alltypes/Int8Test.java | 2 +- .../alltypes/StringArrayDeduplicationTester.java | 6 +++--- .../binary}/alltypes/StringTest.java | 2 +- .../binary}/alltypes/TestEnum.java | 2 +- .../binary}/alltypes/UInt16Test.java | 2 +- .../binary}/alltypes/UInt32Test.java | 2 +- .../binary}/alltypes/UInt64Test.java | 2 +- .../binary}/alltypes/UInt8Test.java | 2 +- .../binary}/alltypes/UUIDTest.java | 2 +- .../codec/columns/ClickhouseColumnsTestReader.java | 4 ++-- .../binary}/tck/ClickhouseBinaryCollectorTest.java | 4 ++-- .../ClickhouseBinaryConnectionAutoRetryTest.java | 6 +++--- .../tck/ClickhouseBinaryConnectionTest.java | 8 ++++---- .../tck/ClickhouseBinaryDataTypeDecodeTest.java | 4 ++-- .../tck/ClickhouseBinaryDataTypeEncodeTest.java | 6 +++--- .../binary}/tck/ClickhouseBinaryDriverTest.java | 4 ++-- .../tck/ClickhouseBinaryPreparedBatchTest.java | 6 +++--- .../ClickhouseBinaryPreparedQueryCachedTest.java | 8 ++++---- .../ClickhouseBinaryPreparedQueryPooledTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTest.java | 2 +- .../tck/ClickhouseBinaryPreparedQueryTestBase.java | 4 ++-- .../tck/ClickhouseBinarySimpleQueryPooledTest.java | 6 +++--- .../tck/ClickhouseBinarySimpleQueryTest.java | 6 +++--- .../ClickhouseBinaryTextDataTypeDecodeTest.java | 4 ++-- .../binary}/tck/ClickhouseBinaryTracingTest.java | 6 +++--- .../tck/ClickhouseBinaryTransactionTest.java | 4 ++-- .../binary}/tck/ClientConfig.java | 8 ++++---- 205 files changed, 468 insertions(+), 475 deletions(-) rename vertx-clickhouse-binary-client/src/main/generated/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnectOptionsConverter.java (74%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnectOptions.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryConnection.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseBinaryPool.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/ClickhouseConstants.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/BaseBlock.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/BlockInfo.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionFactory.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionImpl.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryConnectionUriParser.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryDatabaseMetadata.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryPoolImpl.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryRowDesc.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinaryRowImpl.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseBinarySocketConnection.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ClickhouseServerException.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/ColumnOrientedBlock.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/RowOrientedBlock.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/BlockStreamProfileInfo.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/BlockStreamProfileInfoReader.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ByteBufUtils.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryCodec.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java (99%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryCommandCodec.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryDecoder.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryEncoder.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryParamDesc.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryPreparedStatement.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseExceptionReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseStreamDataSink.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClickhouseStreamDataSource.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClientInfo.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ClientPacketTypes.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseConnectionCommandCodec.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseCursorCommandCodec.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/CloseStatementCommandCodec.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ColumnOrientedBlockReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Compression.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/DatabaseMetadataReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ExtendedQueryCommandCodec.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/InitCommandCodec.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Lz4ClickhouseStreamDataSink.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/Lz4ClickhouseStreamDataSource.java (98%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/MultistringMessageReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PacketForge.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PacketReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/PrepareStatementCodec.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryInfo.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryParsers.java (99%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProcessingStage.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProgressInfo.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/QueryProgressInfoReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RawClickhouseStreamDataSink.java (96%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RawClickhouseStreamDataSource.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/RowResultDecoder.java (81%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/ServerPacketType.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/SimpleQueryCommandCodec.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/TableColumns.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumn.java (83%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumnReader.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayColumnWriter.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ArrayIntPairIterator.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnReader.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnWriter.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumns.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ColumnUtils.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumn.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateColumnWriter.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64ColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTime64ColumnWriter.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumn.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/DateTimeColumnWriter.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal128Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal256Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal32ColumnWriter.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Decimal64ColumnWriter.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum16ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Enum8ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnDecoder.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnEncoder.java (97%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/EnumResolutionMethod.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/FixedStringColumnWriter.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32ColumnReader.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float32ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64ColumnReader.java (84%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Float64ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/GenericDecimalColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/GenericDecimalColumnWriter.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4Column.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4ColumnReader.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv4ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6ColumnReader.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IPv6ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128ColumnReader.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Int128ColumnWriter.java (82%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntPairIterator.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntervalColumn.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/IntervalColumnReader.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ListPairedIterator.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumn.java (86%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumnReader.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/LowCardinalityColumnWriter.java (93%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/PairedIterator.java (95%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringCache.java (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumn.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/StringColumnWriter.java (87%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/Triplet.java (92%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16Column.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt16ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32Column.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt32ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64Column.java (90%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64ColumnReader.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt64ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8Column.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8ColumnReader.java (89%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UInt8ColumnWriter.java (80%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumn.java (88%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumnReader.java (85%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/UUIDColumnWriter.java (81%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/package-info.java (91%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/spi/ClickhouseBinaryDriver.java (88%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ArraySerDesTest.java (88%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/BasicClickhouseTest.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ClickhouseResource.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/ExtendedClickhouseTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/NestedExceptionsTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/PacketReaderReplayTest.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/PacketUtil.java (95%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/Sleep.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/SpecialTypesTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/AllTypesBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/BlobTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTime64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/DateTimeTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal128Test.java (85%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal256Test.java (85%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Decimal64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Enum16Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Enum8Test.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/EnumTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/FixedStringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Float32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Float64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/HugeDecimalTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/IPv4Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/IPv6Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int128Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/Int8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/StringArrayDeduplicationTester.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/StringTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/TestEnum.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt16Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt32Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt64Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UInt8Test.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/alltypes/UUIDTest.java (99%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhouse/clickhouse => clickhouseclient}/binary/impl/codec/columns/ClickhouseColumnsTestReader.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryCollectorTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryConnectionAutoRetryTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryConnectionTest.java (87%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDataTypeDecodeTest.java (97%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDataTypeEncodeTest.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryDriverTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedBatchTest.java (92%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryCachedTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryPooledTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryPreparedQueryTestBase.java (96%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinarySimpleQueryPooledTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinarySimpleQueryTest.java (90%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTextDataTypeDecodeTest.java (93%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTracingTest.java (89%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClickhouseBinaryTransactionTest.java (94%) rename vertx-clickhouse-binary-client/src/test/java/io/vertx/{clickhousebinaryclient => clickhouseclient/binary}/tck/ClientConfig.java (89%) diff --git a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java similarity index 74% rename from vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java rename to vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java index 2e95b6fe11..19713b0555 100644 --- a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptionsConverter.java +++ b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java @@ -1,4 +1,4 @@ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonArray; @@ -7,8 +7,8 @@ import java.time.format.DateTimeFormatter; /** - * Converter and mapper for {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions}. - * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. + * Converter and mapper for {@link io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions}. + * NOTE: This class has been automatically generated from the {@link io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions} original class using Vert.x codegen. */ public class ClickhouseBinaryConnectOptionsConverter { diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index d04097aeb9..d8d974dbdc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -13,7 +13,7 @@ package examples; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Vertx; import io.vertx.core.tracing.TracingPolicy; import io.vertx.docgen.Source; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java index b9f39e5dd9..933785622d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnectOptions.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionUriParser; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionUriParser; import io.vertx.codegen.annotations.DataObject; import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java index 7bae45479e..2286fb7212 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnection.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryConnectionImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.AsyncResult; import io.vertx.core.Future; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java index 9faecb2cce..3a88270b24 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseBinaryPool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryPoolImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java index 79bae6273a..6b6f9e9c4f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/ClickhouseConstants.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseConstants.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java index 96e9d59f93..d2b1f1ac15 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BaseBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.desc.ColumnDescriptor; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java index d4f8726a84..01e7a2bd10 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/BlockInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BlockInfo.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java index 743397ce31..793cfd830d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java index b1fedcee47..a3d6babf3e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.future.PromiseInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java index e9c9f057c3..6bab120db6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryConnectionUriParser.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.core.json.JsonObject; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java index d4876c2798..54742b2577 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryDatabaseMetadata.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java index 2ce15a2fd0..a3b04f4298 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryPoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.VertxInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java index dce90eb334..389274f9fb 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java index a5ccd677b0..5242dfb804 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinaryRowImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java index 17bec4badb..6d51e9830d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseBinarySocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; import io.netty.channel.ChannelPipeline; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryCodec; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryCodec; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java index 1ca2e5e663..6668bd0680 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; public class ClickhouseServerException extends RuntimeException { private final int code; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java index aba4768701..2bf023f7c2 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/ColumnOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ColumnOrientedBlock.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import java.util.ArrayList; import java.util.Collection; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java index 2661eb6157..e4790ec37f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/RowOrientedBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/RowOrientedBlock.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl; +package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java index 08f197774e..f5e3d8e177 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class BlockStreamProfileInfo { private final int rows; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java index 7a72282b4e..88f13158f7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java index e60ba5ddf4..6cab2cedbf 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ByteBufUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ByteBufUtils.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java index dfdcb077a7..63cfcfeda8 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.CombinedChannelDuplexHandler; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.NoStackTraceThrowable; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java similarity index 99% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index cce4542c24..1d52912d6b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.desc.ColumnDescriptor; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java index 1216082603..0341c7723f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index 29db476266..b99b88b0e1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index 805f7f8b47..a2816cb9a5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.*; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java index 5fe13ea7d9..cfc3903fd9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryParamDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryParamDesc.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.impl.ParamDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java index aad4ed18c0..cf00015657 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryPreparedStatement.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryPreparedStatement.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.impl.ParamDesc; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.RowDesc; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java index d1432047fb..76a6de4efc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryQueryCommandBaseCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.impl.command.QueryCommandBase; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java index a1872467a4..c759549524 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseExceptionReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseExceptionReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java index ca77bb7ac4..17fe21f11f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public interface ClickhouseStreamDataSink { void writeULeb128(int value); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java index 2ee1387744..68740315b4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java index bfc5d11aee..62b06cddd5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientInfo.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java index a8486e3fe8..e10aae2259 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ClientPacketTypes.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClientPacketTypes.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class ClientPacketTypes { public static final int HELLO = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java index a42476b556..e3aae1203a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseConnectionCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseConnectionCommandCodec.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java index d662c6efee..63713edd44 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseCursorCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseCursorCommandCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseCursorCommand; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java index b460a7dc12..4812f375fe 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/CloseStatementCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/CloseStatementCommandCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.sqlclient.impl.command.CloseStatementCommand; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java index e44bcffec1..183851389d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java @@ -11,14 +11,14 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; -import io.vertx.clickhouse.clickhouse.binary.impl.BlockInfo; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.BlockInfo; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java index 0d701a5e07..6260df9d07 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Compression.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Compression.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class Compression { public static final int DISABLED = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java index 44f9fad5cf..24cf8930a4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java index 1162b8561f..625175cb5c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index bfb76cbeae..0648104bc7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java index d80afe549f..1b30a9514f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSink.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Compressor; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java similarity index 98% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java index 87fadef2d4..46737eb285 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java index 8e244584cd..9ffff81b2d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/MultistringMessageReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/MultistringMessageReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java index 178d10c85e..e9629d0c7d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketForge.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketForge.java @@ -11,15 +11,15 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.RowOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.RowOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java index 1d41a09c66..46809c43e9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.ByteBufUtil; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java index 8b81df304c..c81adc9861 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; import io.vertx.sqlclient.desc.ColumnDescriptor; import io.vertx.sqlclient.impl.PreparedStatement; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java index 64c690501e..66f81d953a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java similarity index 99% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java index dc13492ee2..ba7da9ff97 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryParsers.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryParsers.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java index 6d1a94c50a..7f599aa375 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProcessingStage.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProcessingStage.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class QueryProcessingStage { public static final int FETCH_COLUMNS = 0; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java index a7e43611a4..bf4c0fb570 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfo.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; public class QueryProgressInfo { private final int rows; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java index 7532e65d00..af035986d1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; public class QueryProgressInfoReader { private final int serverRevision; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java similarity index 96% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java index 0acec8c0ca..2a42ab5703 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSink.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSink.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java index 2459890995..d5c48a9b37 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java similarity index 81% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java index 6b9fa7148a..0ace9003a8 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/RowResultDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RowResultDecoder.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowImpl; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowImpl; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java index 67ebe88a02..21cd7c23a1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java index bbbfdca1d9..924460383d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java @@ -11,13 +11,13 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryRowDesc; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryRowDesc; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.command.CommandResponse; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java index eff3093b7c..d4a368919f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/TableColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/TableColumns.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec; +package io.vertx.clickhouseclient.binary.impl.codec; -import io.vertx.clickhouse.clickhouse.binary.impl.ColumnOrientedBlock; +import io.vertx.clickhouseclient.binary.impl.ColumnOrientedBlock; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java similarity index 83% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java index 51cb75aaa1..f8a0f69444 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java index 6fc93b14e8..83489b2e06 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java index e568480bd0..5d70e93696 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java index a90f68fe5f..4baa75622d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ArrayIntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayIntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public class ArrayIntPairIterator implements IntPairIterator { private final int[] src; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java index 85b98dbf31..bc9402c2b5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java index 8a1e304189..52be5e83df 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; public abstract class ClickhouseColumnReader { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java index d9dc6ca42b..2408d8c269 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java index 05916ef8b0..bb904e0347 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.QueryParsers; import java.math.BigInteger; import java.sql.JDBCType; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java index d3ff7d1940..67d575e793 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ColumnUtils.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ColumnUtils.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java index 983cf20b3f..0339a202d0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java index c247a8ef75..3a56b4219b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.LocalDate; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java index 3e2303a9d2..ae8217d54f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.LocalDate; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java index 4b629a23c0..91976da596 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java index f5b487b6b5..36736deb2e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java index 5c10c25bcf..339548c36f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTime64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java index cdae818fbf..a941791752 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java index 268a7336f8..8521c5b0a6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.time.Instant; import java.time.OffsetDateTime; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java index 352b3be14a..f315db02e3 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/DateTimeColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTimeColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.time.Instant; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java index 99d42c4951..108f8a4c7c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java index 75df301530..fa5886efb0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal256Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal256Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java index 754393375e..8d87167c62 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java index 2d47c1f478..20d805e615 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java index 130f97c16d..c17dc2d29e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java index f95e841235..3d9e54cb3a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java index 54d2a22fdd..7c346b4c3e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java index 4de35beaf0..dcd317708e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Decimal64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Decimal64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java index 6ce63d5b02..41e4a33c6e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java index 052c382774..8c8ae5762e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java index f1d25ad459..89e8025845 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java index e281a7099d..b5344b0b9a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java index 1d53478694..13c21f766b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java index 6e0eff6911..ea518220e9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Enum8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java index 246c4ae248..686e680c46 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnDecoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java similarity index 97% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java index 1c21f46c64..ab5fc33028 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnEncoder.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.HashMap; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java index a68100cab4..e324651d0d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumColumnReader.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public interface EnumColumnReader { Object[] recodeValues(Object[] src, Class desired); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java index eff99571d4..2c97d2a271 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/EnumResolutionMethod.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/EnumResolutionMethod.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.Arrays; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java index 2054b13de8..624ea84079 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java index 7c766bfbb6..13018f368c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java index 99da8811b0..a6b2f3d0bb 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/FixedStringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/FixedStringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java index 63b02d4b97..d07a9e3caf 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java index 49a263a243..f6cc6f4d98 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class Float32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java index 9df1cde405..b74a82b539 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java index 5883af01d1..4f540dc7e6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java similarity index 84% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java index df741363a8..e42264c94c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class Float64ColumnReader extends ClickhouseColumnReader { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java index db0a7c3067..a60bde6933 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Float64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Float64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java index 344c6b1320..8f28560f25 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java index 0ab90b8694..da07fc5560 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/GenericDecimalColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/GenericDecimalColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java index 6faa6f0a58..fef8da9724 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java index f328b51425..5e5e2c9cc3 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet4Address; import java.net.InetAddress; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java index cc9c96d919..f3744fb634 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv4ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet4Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java index bf4167b732..9aa5cb1731 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6Column.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java index 67ac74a737..929eceecf7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.net.Inet6Address; import java.net.InetAddress; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java index 7ce48bfc23..a76d37bd28 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IPv6ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv6ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.net.Inet6Address; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java index db7717f4b2..f1c0051be4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java index 6dba11b4ec..8842d339e1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java similarity index 82% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java index d766becf0a..b5306e1f9c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Int128ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Int128ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java index 9f5e7ba760..c75d0ba0d5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntPairIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntPairIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public interface IntPairIterator { IntPairIterator EMPTY = new IntPairIterator() { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java index 8dd972e2b8..ab174a4d7f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.time.Duration; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java index 5d01f8e650..ac745f2bd0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import java.time.Duration; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java index d05d97457e..0144eabb39 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ListPairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ListPairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.AbstractMap; import java.util.Iterator; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java similarity index 86% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java index e7d95619df..e6283b125a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java index 2df335c4e3..6039fbd2b6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.BitSet; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java similarity index 93% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java index 37f1db4840..2e1e8b86ad 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/LowCardinalityColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/LowCardinalityColumnWriter.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.*; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java similarity index 95% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java index cc032e5386..ada29f101b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/PairedIterator.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/PairedIterator.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.util.Arrays; import java.util.Collections; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java index e292f20ad6..481e9b0567 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringCache.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringCache.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; import java.lang.ref.SoftReference; import java.util.function.Supplier; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java index a280e7cc40..5d8ff74d95 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumn.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java index 60caebba4f..d9f9c36fb1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnReader.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.nio.charset.Charset; import java.util.ArrayList; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java similarity index 87% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java index a04be22888..f0b179b695 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/StringColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/StringColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.nio.charset.Charset; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java similarity index 92% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java index a31517e4d7..a38664649b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/Triplet.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Triplet.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; public class Triplet { private final L left; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java index 950ef17396..6d17ed2b88 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java index 2b552cff58..9ece8f3574 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt16ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 2; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java index d82b82acf0..33522d87fe 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt16ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java index 41064396b3..0815f8323d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java index 1add1ebcad..3fe9a064c1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java index 1e0eec91d6..3e1e785530 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt32ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java similarity index 90% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java index 57480fdb30..132f283f60 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java index 78a9115a08..04123f8400 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java index 828e5eb67c..1092b57dce 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt64ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java index 2204d167e3..3688b2c195 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java similarity index 89% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java index f22055ecdc..6caef1943f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; public class UInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java similarity index 80% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java index 0903f2fe97..d9b45f9b9c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UInt8ColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java index 469d90c122..d1a1ba9705 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumn.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java similarity index 85% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java index c666f622f7..ee4615f8d5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnReader.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; import java.util.UUID; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java similarity index 81% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java index a43d218c5e..6e8cef3077 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/UUIDColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UUIDColumnWriter.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; import io.vertx.sqlclient.Tuple; import java.util.List; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java similarity index 91% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java index 3ef668416c..af8cf1930a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/package-info.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/package-info.java @@ -12,6 +12,6 @@ */ @ModuleGen(name = "vertx-clickhousebinary-client", groupPackage = "io.vertx") -package io.vertx.clickhouse.clickhouse.binary; +package io.vertx.clickhouseclient.binary; import io.vertx.codegen.annotations.ModuleGen; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java similarity index 88% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java index 401f1a7095..17be970381 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouse/clickhouse/binary/spi/ClickhouseBinaryDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.spi; +package io.vertx.clickhouseclient.binary.spi; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.Vertx; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; diff --git a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver index 29ad5b1ceb..cabf3f74eb 100644 --- a/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver +++ b/vertx-clickhouse-binary-client/src/main/resources/META-INF/services/io.vertx.sqlclient.spi.Driver @@ -1 +1 @@ -io.vertx.clickhouse.clickhouse.binary.spi.ClickhouseBinaryDriver +io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java similarity index 88% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java index 18cde58df4..b64684d74d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ArraySerDesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ArraySerDesTest.java @@ -11,17 +11,17 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.buffer.UnpooledByteBufAllocator; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.*; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumn; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnReader; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumnWriter; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.*; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumn; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnWriter; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java index 54bbe3b837..1e7906da38 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/BasicClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/BasicClickhouseTest.java @@ -11,12 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.ClickhouseColumns; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumns; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java index d87115aef1..ddacf9f601 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import org.junit.rules.ExternalResource; import org.testcontainers.containers.ClickHouseContainer; import org.testcontainers.utility.DockerImageName; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java index 06a6ed82ed..23b8f18c7a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java @@ -11,10 +11,8 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java index 6a882dd478..6eb82fda19 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/NestedExceptionsTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/NestedExceptionsTest.java @@ -11,16 +11,16 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseServerException; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; +import io.vertx.clickhouseclient.binary.impl.codec.PacketReader; import org.junit.Test; import java.io.IOException; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java index 907652f71d..ea00264f27 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; @@ -19,9 +19,8 @@ import io.netty.buffer.ByteBufUtil; import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.impl.ClickhouseBinaryDatabaseMetadata; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.PacketReader; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.codec.PacketReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import net.jpountz.lz4.LZ4Factory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java similarity index 95% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java index da45f55aac..139ae14417 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/PacketUtil.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; import java.util.List; import java.util.Map; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java index b9475eea86..3c3b4cac6e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/Sleep.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/Sleep.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; public class Sleep { //updates may be async even for non-replicated tables; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java index 5ebe88a09d..704f24dced 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/SpecialTypesTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/SpecialTypesTest.java @@ -11,10 +11,8 @@ * */ -package io.vertx.clickhousebinaryclient; +package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java index 9586dbf898..1374a50743 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java @@ -11,12 +11,12 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java index fd9370dc64..b72fde37f8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/BlobTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BlobTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java index 0ce83aed5e..7a1b868fa0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java index cdb07a3396..9a3b6834f5 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTime64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTime64Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java index 74c872adac..33c9dd37ee 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/DateTimeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/DateTimeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.DateTimeColumnReader; +import io.vertx.clickhouseclient.binary.impl.codec.columns.DateTimeColumnReader; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java similarity index 85% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java index de4939436f..91d6c125d0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal128Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal128Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal128Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java similarity index 85% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java index d7952f7c85..1d40bb71cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal256Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal256Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal256Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal256Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java index 585a55849c..abf16a724d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal32Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal32Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java index d11311a486..5dc3969d26 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Decimal64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal64Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Decimal64Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal64Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java index 5a3d5347fd..d37ad13266 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java index 52ea8288d4..4bff0e1cdc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Enum8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Enum8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java index f32c404139..3cad322644 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/EnumTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/EnumTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java index 5ddae4fbb6..694281be92 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/FixedStringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/FixedStringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java index 24e8889eb8..9c00780877 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java index 09c4f2823c..f811c1fd11 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Float64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Float64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java index 5f247afe8a..31b6ff89a2 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/HugeDecimalTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/HugeDecimalTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java index b069c9f6be..5b10135c65 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv4Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv4Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv4Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.IPv4Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java index 1e5f66c5c2..e3e69dad6d 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/IPv6Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/IPv6Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.IPv6Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.IPv6Column; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java index 425b7f3ad6..d387c6efb1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int128Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int128Test.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.columns.Int128Column; +import io.vertx.clickhouseclient.binary.impl.codec.columns.Int128Column; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java index f294302b0e..d6df64d952 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java index c27f00ea38..347b938dc8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java index e0d945dd40..640aecd1cb 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java index b5955ae48e..f6ffe91e37 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/Int8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Int8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java index 9c876125cb..ae98086f1c 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringArrayDeduplicationTester.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringArrayDeduplicationTester.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java index 77aa9ff526..a8bb4aa846 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/StringTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/StringTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java index 7bf109f73c..740f43a443 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/TestEnum.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/TestEnum.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; enum TestEnum { v0, v1, v2, v3, v4, v5, v6 diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java index 002d375a94..9db5606a8b 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt16Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt16Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java index faef27decd..be3d2f88c5 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt32Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java index c0e98619dc..1a8e1721cf 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt64Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt64Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java index 47d7b47bdc..8df66036c8 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UInt8Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UInt8Test.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java similarity index 99% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java index 20c3d2a13f..32a51f36e3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/alltypes/UUIDTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/UUIDTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.alltypes; +package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java index c9bcad9c15..befe3ba4fd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouse/clickhouse/binary/impl/codec/columns/ClickhouseColumnsTestReader.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnsTestReader.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhouse.clickhouse.binary.impl.codec.columns; +package io.vertx.clickhouseclient.binary.impl.codec.columns; -import io.vertx.clickhouse.clickhouse.binary.impl.codec.QueryParsers; +import io.vertx.clickhouseclient.binary.impl.codec.QueryParsers; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java index c495cc2d83..b8415707a4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryCollectorTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryCollectorTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.CollectorTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java index 2d74957077..0bd44349e1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionAutoRetryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionAutoRetryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java similarity index 87% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java index bd937d3567..c18d17dac1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.spi.DatabaseMetadata; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java similarity index 97% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java index 42664f48f1..aa4993bac6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java index 6a920940a8..fa5d07e1bc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java index 0a3b3a619a..f1042a6cc3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryDriverTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDriverTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.tck.DriverTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java similarity index 92% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java index 6533c220e3..214cf3e5f7 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedBatchTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedBatchTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Tuple; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java index 91d4d472bb..e8ac554e5f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseConstants; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.PreparedQueryCachedTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java index 01ebd21e40..d8303129f0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryPooledTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java index c2ed50216e..850222b7a6 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTest.java @@ -11,7 +11,7 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; import io.vertx.ext.unit.junit.VertxUnitRunner; import org.junit.runner.RunWith; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java similarity index 96% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java index a3d542ce44..385aac667a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryPreparedQueryTestBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryTestBase.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.sqlclient.tck.PreparedQueryTestBase; import org.junit.ClassRule; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java index 63d484b143..56ea6520c4 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryPooledTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryPooledTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java similarity index 90% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java index 486e347735..e24a6dd122 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinarySimpleQueryTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinarySimpleQueryTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; -import io.vertx.clickhousebinaryclient.Sleep; +import io.vertx.clickhouseclient.binary.ClickhouseResource; +import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.tck.SimpleQueryTestBase; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java similarity index 93% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 6cadfacd34..344fbf6d4e 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java index 4c7f3d14a8..f4494e1b25 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTracingTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTracingTest.java @@ -11,10 +11,10 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.core.Vertx; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java similarity index 94% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java index b3eae566f4..980081150a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClickhouseBinaryTransactionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTransactionTest.java @@ -11,9 +11,9 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhousebinaryclient.ClickhouseResource; +import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.data.Numeric; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java similarity index 89% rename from vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java rename to vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java index 7368987ce4..7d19167a03 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhousebinaryclient/tck/ClientConfig.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClientConfig.java @@ -11,11 +11,11 @@ * */ -package io.vertx.clickhousebinaryclient.tck; +package io.vertx.clickhouseclient.binary.tck; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryConnection; -import io.vertx.clickhouse.clickhouse.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; From 152261c7b79fa7d342f1f3cea6ce1f48db0cdc30 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:35:18 +0300 Subject: [PATCH 163/176] replaced confusing 'native' to 'binary' in pom description Signed-off-by: vladimir --- vertx-clickhouse-binary-client/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 96ed3a092d..617362ba22 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -27,7 +27,7 @@ vertx-clickhouse-binary-client - Vertx Clickhouse native Client + Vertx Clickhouse native(binary) Client https://github.com/eclipse-vertx/vertx-sql-client The Reactive Clickhouse Client From 3d91c3370d0a8dfb007858fcdfdab02e7c74e945 Mon Sep 17 00:00:00 2001 From: vladimir Date: Wed, 2 Jun 2021 16:36:48 +0300 Subject: [PATCH 164/176] replaced confusing 'native' to 'binary' in pom description Signed-off-by: vladimir --- vertx-clickhouse-binary-client/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 617362ba22..060f2046db 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -27,7 +27,7 @@ vertx-clickhouse-binary-client - Vertx Clickhouse native(binary) Client + Vertx Clickhouse binary Client https://github.com/eclipse-vertx/vertx-sql-client The Reactive Clickhouse Client From 7eb874f9c942b062c60b1088e73da0c42695b711 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 24 Oct 2021 16:24:17 +0300 Subject: [PATCH 165/176] rebase to 4.2.0-SNAPSHOT --- vertx-clickhouse-binary-client/pom.xml | 4 +- .../main/java/examples/SqlClientExamples.java | 10 +++ .../ClickhouseBinaryConnectOptions.java | 8 ++ .../binary/ClickhouseBinaryPool.java | 25 +++--- .../ClickhouseBinaryConnectionFactory.java | 39 +++++++--- .../impl/ClickhouseBinaryConnectionImpl.java | 18 +---- .../binary/impl/ClickhouseBinaryPoolImpl.java | 77 +++++++++++++++---- .../binary/impl/ClickhouseBinaryRowImpl.java | 19 +++++ .../ClickhouseBinaryColumnDescriptor.java | 7 ++ .../binary/spi/ClickhouseBinaryDriver.java | 23 +++--- .../binary/ClickhouseResource.java | 2 - 11 files changed, 164 insertions(+), 68 deletions(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index 060f2046db..eda881abc8 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT vertx-clickhouse-binary-client @@ -35,6 +35,8 @@ false ${project.basedir}/src/main/docs ${project.basedir}/src/main/generated + 11 + 11 2.14.1 diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index d8d974dbdc..6d4a7f287b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -281,4 +281,14 @@ public void usingCursors03(SqlConnection connection) { public void tracing01(ClickhouseBinaryConnectOptions options) { options.setTracingPolicy(TracingPolicy.ALWAYS); } + + //TODO smagellan + public void poolConfig01(ClickhouseBinaryConnectOptions server1, ClickhouseBinaryConnectOptions server2, ClickhouseBinaryConnectOptions server3, PoolOptions options) { + throw new IllegalStateException("TODO smagellan"); + } + + //TODO smagellan + public void poolConfig02(Pool pool, String sql) { + throw new IllegalStateException("TODO smagellan"); + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java index 933785622d..b375e63831 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptions.java @@ -21,6 +21,14 @@ @DataObject(generateConverter = true) public class ClickhouseBinaryConnectOptions extends SqlConnectOptions { + public static ClickhouseBinaryConnectOptions wrap(SqlConnectOptions options) { + if (options instanceof ClickhouseBinaryConnectOptions) { + return (ClickhouseBinaryConnectOptions) options; + } else { + return new ClickhouseBinaryConnectOptions(options); + } + } + public static ClickhouseBinaryConnectOptions fromUri(String connectionUri) throws IllegalArgumentException { JsonObject parsedConfiguration = ClickhouseBinaryConnectionUriParser.parse(connectionUri); return new ClickhouseBinaryConnectOptions(parsedConfiguration); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java index 3a88270b24..558a527f5b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java @@ -14,26 +14,31 @@ package io.vertx.clickhouseclient.binary; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; +import io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; -import io.vertx.core.VertxOptions; import io.vertx.core.impl.VertxInternal; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; +import java.util.Collections; +import java.util.List; + @VertxGen public interface ClickhouseBinaryPool extends Pool { - static ClickhouseBinaryPool pool(ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { - if (Vertx.currentContext() != null) { - throw new IllegalStateException("Running in a Vertx context => use ClickhouseNativePool#pool(Vertx, PgConnectOptions, PoolOptions) instead"); - } - VertxOptions vertxOptions = new VertxOptions(); - VertxInternal vertx = (VertxInternal) Vertx.vertx(vertxOptions); - return ClickhouseBinaryPoolImpl.create(vertx, true, connectOptions, poolOptions); + static ClickhouseBinaryPool pool(ClickhouseBinaryConnectOptions database, PoolOptions options) { + return pool(null, database, options); } - static ClickhouseBinaryPool pool(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseBinaryPoolImpl.create((VertxInternal)vertx, false, connectOptions, poolOptions); + return ClickhouseBinaryPoolImpl.create((VertxInternal)vertx, Collections.singletonList(connectOptions), poolOptions); + } + + static ClickhouseBinaryPool pool(List databases, PoolOptions options) { + return pool(null, databases, options); + } + + static ClickhouseBinaryPool pool(Vertx vertx, List databases, PoolOptions options) { + return new ClickhouseBinaryDriver().createPool(vertx, databases, options); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java index 793cfd830d..e907c2d7ef 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -15,8 +15,9 @@ import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.core.Context; import io.vertx.core.Future; -import io.vertx.core.Promise; +import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.impl.VertxInternal; import io.vertx.core.impl.future.PromiseInternal; @@ -24,19 +25,21 @@ import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; import io.vertx.core.net.NetSocket; +import io.vertx.core.net.SocketAddress; import io.vertx.core.net.impl.NetSocketInternal; import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.SqlConnection; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.ConnectionFactory; -import io.vertx.sqlclient.impl.SqlConnectionFactoryBase; +import io.vertx.sqlclient.impl.ConnectionFactoryBase; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import net.jpountz.lz4.LZ4Factory; -public class ClickhouseBinaryConnectionFactory extends SqlConnectionFactoryBase implements ConnectionFactory { +public class ClickhouseBinaryConnectionFactory extends ConnectionFactoryBase { private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryConnectionFactory.class); private final LZ4Factory lz4Factory; - ClickhouseBinaryConnectionFactory(VertxInternal vertx, ClickhouseBinaryConnectOptions options) { + public ClickhouseBinaryConnectionFactory(VertxInternal vertx, ClickhouseBinaryConnectOptions options) { super(vertx, options); this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); } @@ -69,20 +72,19 @@ protected void configureNetClientOptions(NetClientOptions netClientOptions) { } @Override - protected void doConnectInternal(Promise promise) { - PromiseInternal promiseInternal = (PromiseInternal) promise; - doConnect(ConnectionFactory.asEventLoopContext(promiseInternal.context())).flatMap(conn -> { + protected Future doConnectInternal(SocketAddress server, String username, String password, String database, EventLoopContext context) { + return doConnect(server, context).flatMap(conn -> { ClickhouseBinarySocketConnection socket = (ClickhouseBinarySocketConnection) conn; socket.init(); return Future.future(p -> socket.sendStartupMessage(username, password, database, properties, p)) .map(conn); - }).onComplete(promise); + }); } - private Future doConnect(EventLoopContext ctx) { + private Future doConnect(SocketAddress server, EventLoopContext ctx) { Future soFut; try { - soFut = netClient.connect(socketAddress, (String) null); + soFut = netClient.connect(server, (String) null); } catch (Exception e) { // Client is closed return ctx.failedFuture(e); @@ -90,6 +92,21 @@ private Future doConnect(EventLoopContext ctx) { return soFut.map(so -> newSocketConnection(ctx, (NetSocketInternal) so)); } + @Override + public Future connect(Context context) { + ContextInternal contextInternal = (ContextInternal) context; + PromiseInternal promise = contextInternal.promise(); + connect(asEventLoopContext(contextInternal)) + .map(conn -> { + QueryTracer tracer = contextInternal.tracer() == null ? null : new QueryTracer(contextInternal.tracer(), options); + ClickhouseBinaryConnectionImpl pgConn = new ClickhouseBinaryConnectionImpl(this, contextInternal, conn, tracer, null); + conn.init(pgConn); + return (SqlConnection)pgConn; + }) + .onComplete(promise); + return promise.future(); + } + private ClickhouseBinarySocketConnection newSocketConnection(EventLoopContext ctx, NetSocketInternal socket) { return new ClickhouseBinarySocketConnection(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, ctx, lz4Factory); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java index a3d6babf3e..bed9a464fc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -17,16 +17,14 @@ import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; -import io.vertx.core.impl.future.PromiseInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; +import io.vertx.sqlclient.spi.ConnectionFactory; public class ClickhouseBinaryConnectionImpl extends SqlConnectionImpl implements ClickhouseBinaryConnection { - private final ClickhouseBinaryConnectionFactory factory; - public static Future connect(ContextInternal ctx, ClickhouseBinaryConnectOptions options) { ClickhouseBinaryConnectionFactory client; try { @@ -35,19 +33,11 @@ public static Future connect(ContextInternal ctx, Cl return ctx.failedFuture(e); } ctx.addCloseHook(client); - QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); - PromiseInternal promise = ctx.promise(); - client.connect(promise); - return promise.future().map(conn -> { - ClickhouseBinaryConnectionImpl mySQLConnection = new ClickhouseBinaryConnectionImpl(client, ctx, conn, tracer, null); - conn.init(mySQLConnection); - return mySQLConnection; - }); + return (Future)client.connect(ctx); } - ClickhouseBinaryConnectionImpl(ClickhouseBinaryConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { - super(context, conn, tracer, metrics); - this.factory = factory; + ClickhouseBinaryConnectionImpl(ConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { + super(context, factory, conn, tracer, metrics); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java index a3b04f4298..0838cde927 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java @@ -15,45 +15,88 @@ import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver; +import io.vertx.core.Future; +import io.vertx.core.Handler; +import io.vertx.core.Vertx; import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.VertxInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.SqlConnection; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.sqlclient.impl.tracing.QueryTracer; +import io.vertx.sqlclient.spi.ConnectionFactory; + +import java.util.List; +import java.util.function.Supplier; +import java.util.stream.Collectors; public class ClickhouseBinaryPoolImpl extends PoolBase implements ClickhouseBinaryPool { - public static ClickhouseBinaryPoolImpl create(VertxInternal vertx, boolean closeVertx, - ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { - QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), connectOptions); - VertxMetrics vertxMetrics = vertx.metricsSPI(); - ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(connectOptions.getSocketAddress(), - "sql", connectOptions.getMetricsName()) : null; - ClickhouseBinaryPoolImpl pool = new ClickhouseBinaryPoolImpl(vertx, - new ClickhouseBinaryConnectionFactory(vertx, connectOptions), tracer, metrics, poolOptions); + + public static ClickhouseBinaryPoolImpl create(VertxInternal vertx, + List servers, PoolOptions poolOptions) { + VertxInternal vx; + vx = maybeCreateVertx(vertx); + ClickhouseBinaryConnectOptions baseConnectOptions = ClickhouseBinaryConnectOptions.wrap(servers.get(0)); + QueryTracer tracer = vx.tracer() == null ? null : new QueryTracer(vx.tracer(), baseConnectOptions); + VertxMetrics vertxMetrics = vx.metricsSPI(); + ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(baseConnectOptions.getSocketAddress(), + "sql", baseConnectOptions.getMetricsName()) : null; + ClickhouseBinaryPoolImpl pool = new ClickhouseBinaryPoolImpl(vx, poolOptions, baseConnectOptions, null, tracer, metrics); + pool.init(); + ClickhouseBinaryDriver driver = new ClickhouseBinaryDriver(); + List lst = servers.stream().map(options -> driver.createConnectionFactory(vx, options)).collect(Collectors.toList()); + ConnectionFactory factory = ConnectionFactory.roundRobinSelector(lst); + pool.connectionProvider(factory::connect); CloseFuture closeFuture = pool.closeFuture(); + registerCleanupHook(vertx == null, vx, closeFuture); + return pool; + } + + private static void registerCleanupHook(boolean closeVertx, VertxInternal vx, CloseFuture closeFuture) { if (closeVertx) { - closeFuture.future().onComplete(ar -> vertx.close()); + closeFuture.future().onComplete(ar -> vx.close()); } else { - vertx.addCloseHook(closeFuture); + ContextInternal ctx = vx.getContext(); + if (ctx != null) { + ctx.addCloseHook(closeFuture); + } else { + vx.addCloseHook(closeFuture); + } } - return pool; } - private final ClickhouseBinaryConnectionFactory factory; + private static VertxInternal maybeCreateVertx(VertxInternal vertx) { + VertxInternal vx; + if (vertx == null) { + if (Vertx.currentContext() != null) { + throw new IllegalStateException( + "Running in a Vertx context => use ClickhouseBinaryPool#pool(Vertx, ClickhouseBinaryConnectOptions, PoolOptions) instead"); + } + vx = (VertxInternal) Vertx.vertx(); + } else { + vx = vertx; + } + return vx; + } - private ClickhouseBinaryPoolImpl(VertxInternal vertx, ClickhouseBinaryConnectionFactory factory, QueryTracer tracer, - ClientMetrics metrics, PoolOptions poolOptions) { - super(vertx, factory, tracer, metrics, 1, poolOptions); - this.factory = factory; + private ClickhouseBinaryPoolImpl(VertxInternal vertx, PoolOptions poolOptions, ClickhouseBinaryConnectOptions baseConnectOptions, Supplier> connectOptionsProvider, QueryTracer tracer, ClientMetrics metrics) { + super(vertx, baseConnectOptions, connectOptionsProvider, tracer, metrics, 1, poolOptions); } @Override - protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { + protected SqlConnectionImpl wrap(ContextInternal context, ConnectionFactory factory, Connection conn) { return new ClickhouseBinaryConnectionImpl(factory, context, conn, tracer, metrics); } + + @Override + public ClickhouseBinaryPool connectHandler(Handler handler) { + return (ClickhouseBinaryPool) super.connectHandler(handler); + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java index 5242dfb804..f706083bc8 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowImpl.java @@ -16,8 +16,10 @@ import io.vertx.clickhouseclient.binary.impl.codec.columns.ClickhouseColumnReader; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.data.NullValue; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.List; public class ClickhouseBinaryRowImpl implements Row { @@ -100,4 +102,21 @@ public int size() { public void clear() { throw new IllegalStateException("not implemented"); } + + @Override + public List> types() { + int len = size(); + List> types = new ArrayList<>(len); + for (int i = 0; i < len; i++) { + Object param = getValue(i); + if (param instanceof NullValue) { + types.add(((NullValue) param).type()); + } else if (param == null) { + types.add(Object.class); + } else { + types.add(param.getClass()); + } + } + return types; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index 1d52912d6b..75a049fbd7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -114,6 +114,13 @@ public JDBCType jdbcType() { return jdbcType; } + @Override + public String typeName() { + return unparsedNativeType; + } + + //TODO smagellan: remove? + @Deprecated public String getUnparsedNativeType() { return unparsedNativeType; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java index 17be970381..3bdc6ed9ca 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java @@ -15,33 +15,30 @@ import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionFactory; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.core.Vertx; -import io.vertx.sqlclient.Pool; +import io.vertx.core.impl.VertxInternal; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.spi.ConnectionFactory; import io.vertx.sqlclient.spi.Driver; +import java.util.List; + public class ClickhouseBinaryDriver implements Driver { @Override - public Pool createPool(SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseBinaryPool.pool(wrap(options), poolOptions); + public ClickhouseBinaryPool createPool(Vertx vertx, List databases, PoolOptions poolOptions) { + return ClickhouseBinaryPoolImpl.create((VertxInternal) vertx, databases, poolOptions); } @Override - public Pool createPool(Vertx vertx, SqlConnectOptions options, PoolOptions poolOptions) { - return ClickhouseBinaryPool.pool(vertx, wrap(options), poolOptions); + public ConnectionFactory createConnectionFactory(Vertx vertx, SqlConnectOptions database) { + return new ClickhouseBinaryConnectionFactory((VertxInternal) vertx, ClickhouseBinaryConnectOptions.wrap(database)); } @Override public boolean acceptsOptions(SqlConnectOptions options) { return options instanceof ClickhouseBinaryConnectOptions || SqlConnectOptions.class.equals(options.getClass()); } - - private static ClickhouseBinaryConnectOptions wrap(SqlConnectOptions options) { - if (options instanceof ClickhouseBinaryConnectOptions) { - return (ClickhouseBinaryConnectOptions) options; - } else { - return new ClickhouseBinaryConnectOptions(options); - } - } } diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java index ddacf9f601..99efb21e1a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java @@ -13,8 +13,6 @@ package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouseclient.binary.ClickhouseConstants; -import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import org.junit.rules.ExternalResource; import org.testcontainers.containers.ClickHouseContainer; import org.testcontainers.utility.DockerImageName; From a0dd2a12ff4ec0169ef2fb4e88c63e11f10c8671 Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 24 Oct 2021 20:49:50 +0300 Subject: [PATCH 166/176] handle 'dangling' exceptions (e.g. non-existent DB exception after successful login for latest ClickHouse versions) --- .../ClickhouseBinaryDatabaseMetadata.java | 10 ++++ .../impl/codec/ClickhouseBinaryDecoder.java | 54 ++++++++++++++++++- .../impl/codec/DatabaseMetadataReader.java | 11 +--- .../binary/impl/codec/InitCommandCodec.java | 5 ++ .../binary/impl/codec/PacketReader.java | 18 ++++++- .../binary/PacketReaderReplayTest.java | 3 +- .../tck/ClickhouseBinaryConnectionTest.java | 8 +++ ...ong_db_connection_without_compression.yaml | 34 ++++++++++++ 8 files changed, 129 insertions(+), 14 deletions(-) create mode 100644 vertx-clickhouse-binary-client/src/test/resources/wrong_db_connection_without_compression.yaml diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java index 54742b2577..1532210d5c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryDatabaseMetadata.java @@ -13,6 +13,7 @@ package io.vertx.clickhouseclient.binary.impl; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.sqlclient.spi.DatabaseMetadata; import java.nio.charset.Charset; @@ -63,6 +64,15 @@ public ClickhouseBinaryDatabaseMetadata(String productName, String fullVersion, this.removeTrailingZerosInFixedStrings = removeTrailingZerosInFixedStrings; } + public static Charset charset(Map props) { + String desiredCharset = props.get(ClickhouseConstants.OPTION_STRING_CHARSET); + if (desiredCharset == null || "system_default".equals(desiredCharset)) { + return Charset.defaultCharset(); + } else { + return Charset.forName(desiredCharset); + } + } + @Override public String productName() { return productName; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index b99b88b0e1..efbecf4272 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -17,8 +17,11 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.core.Handler; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.impl.command.CommandResponse; import java.util.ArrayDeque; import java.util.List; @@ -28,6 +31,11 @@ public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { private final ArrayDeque> inflight; private final ClickhouseBinarySocketConnection conn; + private Handler> initHandler; + private PacketReader packetReader; + private Boolean hasException; + private Object errorPacket; + public ClickhouseBinaryDecoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; this.conn = conn; @@ -35,7 +43,49 @@ public ClickhouseBinaryDecoder(ArrayDeque> in @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - ClickhouseBinaryCommandCodec codec = inflight.peek(); - codec.decode(ctx, in); + if (inflight.peek() != null) { + if (inflight.peek() instanceof InitCommandCodec) { + InitCommandCodec tmp = (InitCommandCodec) inflight.peek(); + initHandler = tmp.completionHandler; + } else { + initHandler = null; + } + inflight.peek().decode(ctx, in); + } else { + LOG.warn("received abandoned data, probably non-existent DB exception after successful login"); + if (hasException == null) { + hasException = PacketReader.hasException(in); + } + if (hasException == null) { + return; + } + if (hasException) { + if (LOG.isDebugEnabled()) { + LOG.debug("has exception: " + hasException); + } + if (packetReader == null) { + packetReader = new PacketReader(conn.getDatabaseMetaData(), null, null, conn.lz4Factory()); + } + errorPacket = packetReader.receivePacket(ctx.alloc(), in); + if (errorPacket == null) { + return; + } + + if (LOG.isDebugEnabled()) { + LOG.debug("error packet: " + errorPacket); + } + Exception ex = (Exception) errorPacket; + errorPacket = null; + packetReader = null; + hasException = null; + if (initHandler != null) { + initHandler.handle(CommandResponse.failure(ex)); + } + throw ex; + } else { + LOG.error("unknown abandoned data"); + throw new IllegalStateException("unknown abandoned data"); + } + } } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java index 24cf8930a4..daa0591780 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/DatabaseMetadataReader.java @@ -100,7 +100,7 @@ public ClickhouseBinaryDatabaseMetadata readFrom(ByteBuf in) { boolean removeTrailingZerosInFixedStringsStr = Boolean.parseBoolean(properties.getOrDefault(ClickhouseConstants.OPTION_REMOVE_TRAILING_ZEROS_WHEN_ENCODE_FIXED_STRINGS, "true")); return new ClickhouseBinaryDatabaseMetadata(productName, String.format("%d.%d.%d", major, minor, revision), - major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, charset(), + major, minor, revision, patchVersion, displayName, serverZoneId, defaultZoneId, fullClientName, properties, ClickhouseBinaryDatabaseMetadata.charset(properties), Duration.ofDays(daysInYear), Duration.ofDays(daysInQuarter), Duration.ofDays(daysInMonth), saturateExtraNanos, removeTrailingZerosInFixedStringsStr); } @@ -114,13 +114,4 @@ private ZoneId getDefaultZoneId(ZoneId serverZoneId) { return ZoneId.of(defaultZoneId); } } - - private Charset charset() { - String desiredCharset = properties.get(ClickhouseConstants.OPTION_STRING_CHARSET); - if (desiredCharset == null || "system_default".equals(desiredCharset)) { - return Charset.defaultCharset(); - } else { - return Charset.forName(desiredCharset); - } - } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index 0648104bc7..3a7045af2f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -69,6 +69,11 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.debug("connected to server: " + md); } completionHandler.handle(CommandResponse.success(null)); + //ClickHouse 20.11.2.1 and (earlier versions) reports non-existent databases by singular ServerPacketType.EXCEPTION packet. + //Latest versions report it by ServerPacketType.HELLO + ServerPacketType.EXCEPTION. + //ServerPacketType.EXCEPTION will be handled by ClickhouseBinaryDecoder.decode if inflight.peek() == null + //Looks like there is no way to report that to caller reliably (with current wire protocol). + //One (unreliable) option is to peek the Exception here } else if (packet.getClass() == ClickhouseServerException.class) { ClickhouseServerException exc = (ClickhouseServerException)packet; completionHandler.handle(CommandResponse.failure(exc)); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java index 46809c43e9..a0ace67c4e 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java @@ -27,6 +27,8 @@ import io.vertx.sqlclient.impl.RowDesc; import net.jpountz.lz4.LZ4Factory; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.sql.JDBCType; import java.util.ArrayList; import java.util.List; @@ -64,6 +66,18 @@ public PacketReader(ClickhouseBinaryDatabaseMetadata md, String fullClientName, this.lz4Factory = lz4Factory; } + public static Boolean hasException(ByteBuf in) { + int pos = in.readerIndex(); + Integer packetTypeCode = ByteBufUtils.readULeb128(in); + in.readerIndex(pos); + if (packetTypeCode == null) { + return null; + } else { + ServerPacketType pkt = ServerPacketType.fromCode(packetTypeCode); + return pkt == ServerPacketType.EXCEPTION; + } + } + public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { if (packetType == null) { Integer packetTypeCode = ByteBufUtils.readULeb128(in); @@ -213,7 +227,9 @@ private QueryProgressInfo readProgressBlock(ByteBuf in) { private ClickhouseServerException readExceptionBlock(ByteBuf in) { if (exceptionReader == null) { - exceptionReader = new ClickhouseExceptionReader(md.getStringCharset()); + //metadata may be null for a login exception + Charset charset = md == null ? ClickhouseBinaryDatabaseMetadata.charset(properties) : md.getStringCharset(); + exceptionReader = new ClickhouseExceptionReader(charset); } ClickhouseServerException exc = exceptionReader.readFrom(in); if (exc != null) { diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java index ea00264f27..a88c207824 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java @@ -61,7 +61,8 @@ public static Iterable dataForTest() throws IOException { "/nullable_low_cardinality_without_compression.yaml", "/select_array_of_nullable_string_without_compression.yaml", "/select_empty_array_without_compression.yaml", - "/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml" + "/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml", + "/wrong_db_connection_without_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java index c18d17dac1..47615cfadd 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java @@ -22,6 +22,7 @@ import io.vertx.sqlclient.tck.ConnectionTestBase; import org.junit.ClassRule; import org.junit.Rule; +import org.junit.Test; import org.junit.rules.TestName; import org.junit.runner.RunWith; @@ -53,4 +54,11 @@ protected void validateDatabaseMetaData(TestContext ctx, DatabaseMetadata md) { ctx.assertTrue(md.majorVersion() >= 20); ctx.assertTrue(md.productName().toLowerCase().contains("ClickHouse".toLowerCase())); } + + //No way to test that reliably with latest ClickHouse versions (see InitCommandCodec); 20.11.2.1 and older work fine + @Override + @Test + public void testConnectInvalidDatabase(TestContext ctx) { + super.testConnectInvalidDatabase(ctx); + } } diff --git a/vertx-clickhouse-binary-client/src/test/resources/wrong_db_connection_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/wrong_db_connection_without_compression.yaml new file mode 100644 index 0000000000..c64a50d7a5 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/test/resources/wrong_db_connection_without_compression.yaml @@ -0,0 +1,34 @@ +# Packet 4 +peer0_0: !!binary | + AE1DbGlja0hvdXNlIENsaWNraG91c2VCaW5hcnlQcmVwYXJlZFF1ZXJ5Q2FjaGVkVGVzdC50ZXN0 + Q29ubmVjdEludmFsaWREYXRhYmFzZRQKqakDD2ludmFsaWREYXRhYmFzZQdkZWZhdWx0B2RlZmF1 + bHQ= +# Packet 6 +peer1_0: !!binary | + AApDbGlja0hvdXNlFQqxqQMNRXVyb3BlL01vc2NvdwZiaG9yc2UC +# Packet 8 +peer1_1: !!binary | + AlEAAAANREI6OkV4Y2VwdGlvbjVEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBpbnZhbGlkRGF0YWJh + c2UgZG9lc24ndCBleGlzdOgJMC4gREI6OkV4Y2VwdGlvbjo6RXhjZXB0aW9uKHN0ZDo6X18xOjpi + YXNpY19zdHJpbmc8Y2hhciwgc3RkOjpfXzE6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6Ol9fMTo6 + YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QmLCBpbnQsIGJvb2wpIEAgMHg5NDRiZGRhIGluIC91c3Iv + YmluL2NsaWNraG91c2UKMS4gREI6OkRhdGFiYXNlQ2F0YWxvZzo6YXNzZXJ0RGF0YWJhc2VFeGlz + dHNVbmxvY2tlZChzdGQ6Ol9fMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6X18xOjpjaGFyX3Ry + YWl0czxjaGFyPiwgc3RkOjpfXzE6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0JikgY29uc3QgQCAw + eDEwOGM1NjdjIGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gREI6OkRhdGFiYXNlQ2F0YWxvZzo6 + YXNzZXJ0RGF0YWJhc2VFeGlzdHMoc3RkOjpfXzE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6Ol9f + MTo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6X18xOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCYp + IGNvbnN0IEAgMHgxMDhjNTUwMiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIERCOjpDb250ZXh0 + OjpzZXRDdXJyZW50RGF0YWJhc2Uoc3RkOjpfXzE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6Ol9f + MTo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6X18xOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCYp + IEAgMHgxMDg0ZjZlMSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjQuIERCOjpUQ1BIYW5kbGVyOjpy + dW5JbXBsKCkgQCAweDExOTYwNTkxIGluIC91c3IvYmluL2NsaWNraG91c2UKNS4gREI6OlRDUEhh + bmRsZXI6OnJ1bigpIEAgMHgxMTk3MWIxOSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjYuIFBvY286 + Ok5ldDo6VENQU2VydmVyQ29ubmVjdGlvbjo6c3RhcnQoKSBAIDB4MTQ1M2JmMmYgaW4gL3Vzci9i + aW4vY2xpY2tob3VzZQo3LiBQb2NvOjpOZXQ6OlRDUFNlcnZlckRpc3BhdGNoZXI6OnJ1bigpIEAg + MHgxNDUzZDliYSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjguIFBvY286OlBvb2xlZFRocmVhZDo6 + cnVuKCkgQCAweDE0NjZmZGY5IGluIC91c3IvYmluL2NsaWNraG91c2UKOS4gUG9jbzo6VGhyZWFk + SW1wbDo6cnVubmFibGVFbnRyeSh2b2lkKikgQCAweDE0NjZjMDhhIGluIC91c3IvYmluL2NsaWNr + aG91c2UKMTAuIHN0YXJ0X3RocmVhZCBAIDB4OGVhZSBpbiAvbGliL3g4Nl82NC1saW51eC1nbnUv + bGlicHRocmVhZC0yLjMyLnNvCjExLiBjbG9uZSBAIDB4ZmRhNWYgaW4gL2xpYi94ODZfNjQtbGlu + dXgtZ251L2xpYmMtMi4zMi5zbwoA From ec3081943ecf772d2044ee871b5f36988173de0c Mon Sep 17 00:00:00 2001 From: vladimir Date: Sun, 26 Dec 2021 22:57:59 +0300 Subject: [PATCH 167/176] rebase over master --- vertx-clickhouse-binary-client/pom.xml | 2 +- ...ickhouseBinaryConnectOptionsConverter.java | 4 + .../main/java/examples/SqlClientExamples.java | 37 +++++++++ .../binary/ClickhouseBinaryPool.java | 8 +- .../impl/ClickhouseBinaryConnectionImpl.java | 7 +- .../ClickhouseBinaryConnectionUriParser.java | 4 + .../binary/impl/ClickhouseBinaryPoolImpl.java | 82 +------------------ .../impl/codec/ClickhouseBinaryDecoder.java | 57 +------------ .../binary/impl/codec/InitCommandCodec.java | 5 -- .../binary/spi/ClickhouseBinaryDriver.java | 44 +++++++++- 10 files changed, 99 insertions(+), 151 deletions(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index eda881abc8..f567ce6fd3 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.2.0-SNAPSHOT + 4.2.4-SNAPSHOT vertx-clickhouse-binary-client diff --git a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java index 19713b0555..9b9f5d7475 100644 --- a/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java +++ b/vertx-clickhouse-binary-client/src/main/generated/io/vertx/clickhouseclient/binary/ClickhouseBinaryConnectOptionsConverter.java @@ -5,6 +5,7 @@ import io.vertx.core.json.impl.JsonUtil; import java.time.Instant; import java.time.format.DateTimeFormatter; +import java.util.Base64; /** * Converter and mapper for {@link io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions}. @@ -13,6 +14,9 @@ public class ClickhouseBinaryConnectOptionsConverter { + private static final Base64.Decoder BASE64_DECODER = JsonUtil.BASE64_DECODER; + private static final Base64.Encoder BASE64_ENCODER = JsonUtil.BASE64_ENCODER; + public static void fromJson(Iterable> json, ClickhouseBinaryConnectOptions obj) { for (java.util.Map.Entry member : json) { switch (member.getKey()) { diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index 6d4a7f287b..ea59adc60b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -14,6 +14,9 @@ package examples; import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; +import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; +import io.vertx.core.AbstractVerticle; +import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; import io.vertx.core.tracing.TracingPolicy; import io.vertx.docgen.Source; @@ -291,4 +294,38 @@ public void poolConfig01(ClickhouseBinaryConnectOptions server1, ClickhouseBinar public void poolConfig02(Pool pool, String sql) { throw new IllegalStateException("TODO smagellan"); } + + public void poolSharing1(Vertx vertx, ClickhouseBinaryConnectOptions database, int maxSize) { + ClickhouseBinaryPool pool = ClickhouseBinaryPool.pool(database, new PoolOptions().setMaxSize(maxSize)); + vertx.deployVerticle(() -> new AbstractVerticle() { + @Override + public void start() throws Exception { + // Use the pool + } + }, new DeploymentOptions().setInstances(4)); + } + + public void poolSharing2(Vertx vertx, ClickhouseBinaryConnectOptions database, int maxSize) { + vertx.deployVerticle(() -> new AbstractVerticle() { + ClickhouseBinaryPool pool; + @Override + public void start() { + // Get or create a shared pool + // this actually creates a lease to the pool + // when the verticle is undeployed, the lease will be released automaticaly + pool = ClickhouseBinaryPool.pool(database, new PoolOptions() + .setMaxSize(maxSize) + .setShared(true) + .setName("my-pool")); + } + }, new DeploymentOptions().setInstances(4)); + } + + public static void poolSharing3(Vertx vertx, ClickhouseBinaryConnectOptions database, int maxSize) { + ClickhouseBinaryPool pool = ClickhouseBinaryPool.pool(database, new PoolOptions() + .setMaxSize(maxSize) + .setShared(true) + .setName("my-pool") + .setEventLoopSize(4)); + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java index 558a527f5b..7551369090 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/ClickhouseBinaryPool.java @@ -13,11 +13,9 @@ package io.vertx.clickhouseclient.binary; -import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver; import io.vertx.codegen.annotations.VertxGen; import io.vertx.core.Vertx; -import io.vertx.core.impl.VertxInternal; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; @@ -30,8 +28,8 @@ static ClickhouseBinaryPool pool(ClickhouseBinaryConnectOptions database, PoolOp return pool(null, database, options); } - static ClickhouseBinaryPool pool(Vertx vertx, ClickhouseBinaryConnectOptions connectOptions, PoolOptions poolOptions) { - return ClickhouseBinaryPoolImpl.create((VertxInternal)vertx, Collections.singletonList(connectOptions), poolOptions); + static ClickhouseBinaryPool pool(Vertx vertx, ClickhouseBinaryConnectOptions database, PoolOptions options) { + return pool(vertx, Collections.singletonList(database), options); } static ClickhouseBinaryPool pool(List databases, PoolOptions options) { @@ -39,6 +37,6 @@ static ClickhouseBinaryPool pool(List databases, } static ClickhouseBinaryPool pool(Vertx vertx, List databases, PoolOptions options) { - return new ClickhouseBinaryDriver().createPool(vertx, databases, options); + return (ClickhouseBinaryPool) ClickhouseBinaryDriver.INSTANCE.createPool(vertx, databases, options); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java index bed9a464fc..584f809947 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionImpl.java @@ -15,16 +15,17 @@ import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver; import io.vertx.core.Future; import io.vertx.core.impl.ContextInternal; import io.vertx.core.spi.metrics.ClientMetrics; import io.vertx.sqlclient.Transaction; import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.SqlConnectionBase; import io.vertx.sqlclient.impl.tracing.QueryTracer; import io.vertx.sqlclient.spi.ConnectionFactory; -public class ClickhouseBinaryConnectionImpl extends SqlConnectionImpl implements ClickhouseBinaryConnection { +public class ClickhouseBinaryConnectionImpl extends SqlConnectionBase implements ClickhouseBinaryConnection { public static Future connect(ContextInternal ctx, ClickhouseBinaryConnectOptions options) { ClickhouseBinaryConnectionFactory client; try { @@ -37,7 +38,7 @@ public static Future connect(ContextInternal ctx, Cl } ClickhouseBinaryConnectionImpl(ConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer, ClientMetrics metrics) { - super(context, factory, conn, tracer, metrics); + super(context, factory, conn, ClickhouseBinaryDriver.INSTANCE, tracer, metrics); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java index 6bab120db6..cfd6c42f6c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionUriParser.java @@ -25,6 +25,10 @@ public class ClickhouseBinaryConnectionUriParser { public static JsonObject parse(String connectionUri) { + return parse(connectionUri, true); + } + + public static JsonObject parse(String connectionUri, boolean exact) { try { JsonObject configuration = new JsonObject(); URI location = URI.create(connectionUri); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java index 0838cde927..bc2604d114 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryPoolImpl.java @@ -13,90 +13,14 @@ package io.vertx.clickhouseclient.binary.impl; -import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; -import io.vertx.clickhouseclient.binary.spi.ClickhouseBinaryDriver; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.Vertx; import io.vertx.core.impl.CloseFuture; -import io.vertx.core.impl.ContextInternal; import io.vertx.core.impl.VertxInternal; -import io.vertx.core.spi.metrics.ClientMetrics; -import io.vertx.core.spi.metrics.VertxMetrics; -import io.vertx.sqlclient.PoolOptions; -import io.vertx.sqlclient.SqlConnectOptions; -import io.vertx.sqlclient.SqlConnection; -import io.vertx.sqlclient.impl.Connection; +import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.impl.PoolBase; -import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.QueryTracer; -import io.vertx.sqlclient.spi.ConnectionFactory; - -import java.util.List; -import java.util.function.Supplier; -import java.util.stream.Collectors; public class ClickhouseBinaryPoolImpl extends PoolBase implements ClickhouseBinaryPool { - - public static ClickhouseBinaryPoolImpl create(VertxInternal vertx, - List servers, PoolOptions poolOptions) { - VertxInternal vx; - vx = maybeCreateVertx(vertx); - ClickhouseBinaryConnectOptions baseConnectOptions = ClickhouseBinaryConnectOptions.wrap(servers.get(0)); - QueryTracer tracer = vx.tracer() == null ? null : new QueryTracer(vx.tracer(), baseConnectOptions); - VertxMetrics vertxMetrics = vx.metricsSPI(); - ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(baseConnectOptions.getSocketAddress(), - "sql", baseConnectOptions.getMetricsName()) : null; - ClickhouseBinaryPoolImpl pool = new ClickhouseBinaryPoolImpl(vx, poolOptions, baseConnectOptions, null, tracer, metrics); - pool.init(); - ClickhouseBinaryDriver driver = new ClickhouseBinaryDriver(); - List lst = servers.stream().map(options -> driver.createConnectionFactory(vx, options)).collect(Collectors.toList()); - ConnectionFactory factory = ConnectionFactory.roundRobinSelector(lst); - pool.connectionProvider(factory::connect); - CloseFuture closeFuture = pool.closeFuture(); - registerCleanupHook(vertx == null, vx, closeFuture); - return pool; - } - - private static void registerCleanupHook(boolean closeVertx, VertxInternal vx, CloseFuture closeFuture) { - if (closeVertx) { - closeFuture.future().onComplete(ar -> vx.close()); - } else { - ContextInternal ctx = vx.getContext(); - if (ctx != null) { - ctx.addCloseHook(closeFuture); - } else { - vx.addCloseHook(closeFuture); - } - } - } - - private static VertxInternal maybeCreateVertx(VertxInternal vertx) { - VertxInternal vx; - if (vertx == null) { - if (Vertx.currentContext() != null) { - throw new IllegalStateException( - "Running in a Vertx context => use ClickhouseBinaryPool#pool(Vertx, ClickhouseBinaryConnectOptions, PoolOptions) instead"); - } - vx = (VertxInternal) Vertx.vertx(); - } else { - vx = vertx; - } - return vx; - } - - private ClickhouseBinaryPoolImpl(VertxInternal vertx, PoolOptions poolOptions, ClickhouseBinaryConnectOptions baseConnectOptions, Supplier> connectOptionsProvider, QueryTracer tracer, ClientMetrics metrics) { - super(vertx, baseConnectOptions, connectOptionsProvider, tracer, metrics, 1, poolOptions); - } - - @Override - protected SqlConnectionImpl wrap(ContextInternal context, ConnectionFactory factory, Connection conn) { - return new ClickhouseBinaryConnectionImpl(factory, context, conn, tracer, metrics); - } - - @Override - public ClickhouseBinaryPool connectHandler(Handler handler) { - return (ClickhouseBinaryPool) super.connectHandler(handler); + public ClickhouseBinaryPoolImpl(VertxInternal vertx, CloseFuture closeFuture, Pool delegate) { + super(vertx, closeFuture, delegate); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index efbecf4272..10a9a462f4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -17,24 +17,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.core.Handler; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.sqlclient.impl.Connection; -import io.vertx.sqlclient.impl.command.CommandResponse; import java.util.ArrayDeque; import java.util.List; public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryDecoder.class); - private final ArrayDeque> inflight; private final ClickhouseBinarySocketConnection conn; - private Handler> initHandler; - private PacketReader packetReader; - private Boolean hasException; - private Object errorPacket; public ClickhouseBinaryDecoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { this.inflight = inflight; @@ -43,49 +32,7 @@ public ClickhouseBinaryDecoder(ArrayDeque> in @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - if (inflight.peek() != null) { - if (inflight.peek() instanceof InitCommandCodec) { - InitCommandCodec tmp = (InitCommandCodec) inflight.peek(); - initHandler = tmp.completionHandler; - } else { - initHandler = null; - } - inflight.peek().decode(ctx, in); - } else { - LOG.warn("received abandoned data, probably non-existent DB exception after successful login"); - if (hasException == null) { - hasException = PacketReader.hasException(in); - } - if (hasException == null) { - return; - } - if (hasException) { - if (LOG.isDebugEnabled()) { - LOG.debug("has exception: " + hasException); - } - if (packetReader == null) { - packetReader = new PacketReader(conn.getDatabaseMetaData(), null, null, conn.lz4Factory()); - } - errorPacket = packetReader.receivePacket(ctx.alloc(), in); - if (errorPacket == null) { - return; - } - - if (LOG.isDebugEnabled()) { - LOG.debug("error packet: " + errorPacket); - } - Exception ex = (Exception) errorPacket; - errorPacket = null; - packetReader = null; - hasException = null; - if (initHandler != null) { - initHandler.handle(CommandResponse.failure(ex)); - } - throw ex; - } else { - LOG.error("unknown abandoned data"); - throw new IllegalStateException("unknown abandoned data"); - } - } + ClickhouseBinaryCommandCodec codec = inflight.peek(); + codec.decode(ctx, in); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index 3a7045af2f..0648104bc7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -69,11 +69,6 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { LOG.debug("connected to server: " + md); } completionHandler.handle(CommandResponse.success(null)); - //ClickHouse 20.11.2.1 and (earlier versions) reports non-existent databases by singular ServerPacketType.EXCEPTION packet. - //Latest versions report it by ServerPacketType.HELLO + ServerPacketType.EXCEPTION. - //ServerPacketType.EXCEPTION will be handled by ClickhouseBinaryDecoder.decode if inflight.peek() == null - //Looks like there is no way to report that to caller reliably (with current wire protocol). - //One (unreliable) option is to peek the Exception here } else if (packet.getClass() == ClickhouseServerException.class) { ClickhouseServerException exc = (ClickhouseServerException)packet; completionHandler.handle(CommandResponse.failure(exc)); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java index 3bdc6ed9ca..9b7a334609 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java @@ -14,22 +14,54 @@ package io.vertx.clickhouseclient.binary.spi; import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; -import io.vertx.clickhouseclient.binary.ClickhouseBinaryPool; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionFactory; +import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryConnectionUriParser; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryPoolImpl; import io.vertx.core.Vertx; +import io.vertx.core.impl.CloseFuture; import io.vertx.core.impl.VertxInternal; +import io.vertx.core.json.JsonObject; +import io.vertx.core.spi.metrics.ClientMetrics; +import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.impl.PoolImpl; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import io.vertx.sqlclient.spi.ConnectionFactory; import io.vertx.sqlclient.spi.Driver; import java.util.List; +import java.util.stream.Collectors; public class ClickhouseBinaryDriver implements Driver { + private static final String SHARED_CLIENT_KEY = "__vertx.shared.clickhousebinaryclient"; + public static final ClickhouseBinaryDriver INSTANCE = new ClickhouseBinaryDriver(); + @Override - public ClickhouseBinaryPool createPool(Vertx vertx, List databases, PoolOptions poolOptions) { - return ClickhouseBinaryPoolImpl.create((VertxInternal) vertx, databases, poolOptions); + public ClickhouseBinaryPoolImpl newPool(Vertx vertx, List databases, PoolOptions options, CloseFuture closeFuture) { + VertxInternal vx = (VertxInternal) vertx; + PoolImpl pool; + if (options.isShared()) { + pool = vx.createSharedClient(SHARED_CLIENT_KEY, options.getName(), closeFuture, cf -> newPoolImpl(vx, databases, options, cf)); + } else { + pool = newPoolImpl(vx, databases, options, closeFuture); + } + return new ClickhouseBinaryPoolImpl(vx, closeFuture, pool); + } + + private PoolImpl newPoolImpl(VertxInternal vertx, List databases, PoolOptions options, CloseFuture closeFuture) { + ClickhouseBinaryConnectOptions baseConnectOptions = ClickhouseBinaryConnectOptions.wrap(databases.get(0)); + QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), baseConnectOptions); + VertxMetrics vertxMetrics = vertx.metricsSPI(); + ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(baseConnectOptions.getSocketAddress(), + "sql", baseConnectOptions.getMetricsName()) : null; + PoolImpl pool = new PoolImpl(vertx, this, baseConnectOptions, null, tracer, metrics, 1, options, closeFuture); + List lst = databases.stream().map(o -> createConnectionFactory(vertx, o)).collect(Collectors.toList()); + ConnectionFactory factory = ConnectionFactory.roundRobinSelector(lst); + pool.connectionProvider(factory::connect); + pool.init(); + closeFuture.add(factory); + return pool; } @Override @@ -37,6 +69,12 @@ public ConnectionFactory createConnectionFactory(Vertx vertx, SqlConnectOptions return new ClickhouseBinaryConnectionFactory((VertxInternal) vertx, ClickhouseBinaryConnectOptions.wrap(database)); } + @Override + public SqlConnectOptions parseConnectionUri(String uri) { + JsonObject conf = ClickhouseBinaryConnectionUriParser.parse(uri, false); + return conf == null ? null : new ClickhouseBinaryConnectOptions(conf); + } + @Override public boolean acceptsOptions(SqlConnectOptions options) { return options instanceof ClickhouseBinaryConnectOptions || SqlConnectOptions.class.equals(options.getClass()); From 365247c046be538d6b0539855125dec630d98608 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sun, 23 Oct 2022 20:56:53 +0300 Subject: [PATCH 168/176] 1) rebase over 4.3.5-SNAPSHOT; 2) fix arrays deserialization --- vertx-clickhouse-binary-client/pom.xml | 21 +++---- .../binary/impl/BaseBlock.java | 5 +- .../binary/impl/ClickhouseBinaryRowDesc.java | 16 ++--- .../ClickhouseBinarySocketConnection.java | 12 ++++ .../impl/ClickhouseServerException.java | 11 ++++ .../codec/BlockStreamProfileInfoReader.java | 11 ++++ .../impl/codec/ClickhouseBinaryDecoder.java | 12 ++++ .../impl/codec/ClickhouseBinaryEncoder.java | 3 + .../codec/ClickhouseStreamDataSource.java | 6 +- .../impl/codec/ColumnOrientedBlockReader.java | 23 ++++--- .../binary/impl/codec/InitCommandCodec.java | 32 +++++++++- .../codec/Lz4ClickhouseStreamDataSource.java | 12 +++- .../binary/impl/codec/PacketReader.java | 15 ++++- .../impl/codec/PrepareStatementCodec.java | 7 +-- .../impl/codec/QueryProgressInfoReader.java | 11 ++++ .../codec/RawClickhouseStreamDataSource.java | 16 ++++- .../binary/impl/codec/ServerPacketType.java | 2 +- .../impl/codec/columns/ArrayColumnReader.java | 35 +++++++++-- .../codec/columns/ClickhouseColumnReader.java | 32 +++++++++- .../impl/codec/columns/ClickhouseColumns.java | 5 +- .../binary/spi/ClickhouseBinaryDriver.java | 2 +- .../binary/ClickhouseResource.java | 2 +- .../binary/PacketReaderReplayTest.java | 16 ++++- .../clickhouseclient/binary/PacketUtil.java | 59 +++++++++++++++--- .../binary/alltypes/AllTypesBase.java | 61 +++++++++++++++---- .../binary/alltypes/Decimal32Test.java | 2 + .../tck/ClickhouseBinaryConnectionTest.java | 4 +- .../ClickhouseBinaryDataTypeEncodeTest.java | 3 + ...ickhouseBinaryPreparedQueryCachedTest.java | 4 +- ...dDatabase_20.10.2_without_compression.yaml | 32 ++++++++++ ...atabase_22.8.6.71_without_compression.yaml | 49 +++++++++++++++ 31 files changed, 434 insertions(+), 87 deletions(-) create mode 100644 vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_20.10.2_without_compression.yaml create mode 100644 vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_22.8.6.71_without_compression.yaml diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index f567ce6fd3..b58984f384 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.2.4-SNAPSHOT + 4.3.5-SNAPSHOT vertx-clickhouse-binary-client @@ -39,7 +39,7 @@ 11 - 2.14.1 + 2.19.0 @@ -67,7 +67,7 @@ org.lz4 lz4-java - 1.7.1 + 1.8.0 @@ -91,22 +91,22 @@ - ru.yandex.clickhouse + com.clickhouse clickhouse-jdbc - 0.2.6 + 0.3.2-patch11 test org.slf4j slf4j-api - 1.7.30 + 2.0.3 test org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl ${log4j.version} test @@ -118,13 +118,6 @@ test - - org.apache.logging.log4j - log4j-web - ${log4j.version} - test - - org.apache.logging.log4j log4j-core diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java index d2b1f1ac15..501b3ff802 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/BaseBlock.java @@ -58,8 +58,7 @@ public ClickhouseBinaryRowDesc rowDesc() { } private ClickhouseBinaryRowDesc buildRowDescriptor(Map columnsWithTypes) { - List columnNames = new ArrayList<>(columnsWithTypes.keySet()); - List columnTypes = new ArrayList<>(columnsWithTypes.values()); - return new ClickhouseBinaryRowDesc(columnNames, columnTypes); + ClickhouseBinaryColumnDescriptor[] columnTypes = columnsWithTypes.values().toArray(ClickhouseBinaryRowDesc.EMPTY_DESCRIPTORS); + return new ClickhouseBinaryRowDesc(columnTypes); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java index 389274f9fb..bf07f4d7c5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryRowDesc.java @@ -13,20 +13,14 @@ package io.vertx.clickhouseclient.binary.impl; -import io.vertx.sqlclient.desc.ColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.sqlclient.impl.RowDesc; -import java.util.Collections; -import java.util.List; - public class ClickhouseBinaryRowDesc extends RowDesc { - public static final ClickhouseBinaryRowDesc EMPTY = new ClickhouseBinaryRowDesc(Collections.emptyList(), Collections.emptyList()); - - public ClickhouseBinaryRowDesc(List columnNames) { - super(columnNames); - } + public static final ClickhouseBinaryColumnDescriptor[] EMPTY_DESCRIPTORS = new ClickhouseBinaryColumnDescriptor[0]; + public static final ClickhouseBinaryRowDesc EMPTY = new ClickhouseBinaryRowDesc(EMPTY_DESCRIPTORS); - public ClickhouseBinaryRowDesc(List columnNames, List columnDescriptors) { - super(columnNames, columnDescriptors); + public ClickhouseBinaryRowDesc(ClickhouseBinaryColumnDescriptor[] columnDescriptors) { + super(columnDescriptors); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java index 6d51e9830d..02e8a36935 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java @@ -15,11 +15,14 @@ import io.netty.channel.ChannelPipeline; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryCodec; +import io.vertx.clickhouseclient.binary.impl.codec.InitCommandCodec; +import io.vertx.core.Handler; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; +import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; import net.jpountz.lz4.LZ4Factory; @@ -35,6 +38,7 @@ public class ClickhouseBinarySocketConnection extends SocketConnectionBase { private String ourCursorId; private final LZ4Factory lz4Factory; + private InitCommandCodec initCommandCodec; public ClickhouseBinarySocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, @@ -54,6 +58,14 @@ public void init() { super.init(); } + public void setInitCommandCodec(InitCommandCodec initCommandCodec) { + this.initCommandCodec = initCommandCodec; + } + + public InitCommandCodec initCommandCodec() { + return initCommandCodec; + } + void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { InitCommand cmd = new InitCommand(this, username, password, database, properties); schedule(context, cmd).onComplete(completionHandler); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java index 6668bd0680..878e96c466 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java @@ -24,6 +24,7 @@ private ClickhouseServerException(Integer code, String name, String message, Str this.code = code; this.name = name; this.message = message; + //TODO smagellan: maybe log stacktraces with specified EOL (useful for log collectors) this.stacktrace = stacktrace; } @@ -58,4 +59,14 @@ public String getMessage() { public String getServerStacktrace() { return stacktrace; } + + @Override + public String toString() { + return "ClickhouseServerException{" + + "code=" + code + + ", name='" + name + '\'' + + ", message='" + message + '\'' + + ", stacktrace='" + stacktrace + '\'' + + '}'; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java index 88f13158f7..bc56ed3274 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/BlockStreamProfileInfoReader.java @@ -14,8 +14,13 @@ package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; public class BlockStreamProfileInfoReader { + private static final Logger LOG = LoggerFactory.getLogger(BlockStreamProfileInfoReader.class); + private Integer rows; private Integer blocks; private Integer bytes; @@ -24,6 +29,7 @@ public class BlockStreamProfileInfoReader { private Boolean calculatedRowsBeforeLimit; public BlockStreamProfileInfo readFrom(ByteBuf in) { + int idxStart = in.readerIndex(); if (rows == null) { rows = ByteBufUtils.readULeb128(in); if (rows == null) { @@ -60,6 +66,11 @@ public BlockStreamProfileInfo readFrom(ByteBuf in) { } calculatedRowsBeforeLimit = in.readBoolean(); } + if (LOG.isDebugEnabled()) { + int idxEnd = in.readerIndex(); + String bufferAsStringConsumed = ByteBufUtil.hexDump(in, idxStart, idxEnd - idxStart); + LOG.debug("bufferAsStringConsumed: " + bufferAsStringConsumed); + } return new BlockStreamProfileInfo(rows, blocks, bytes, appliedLimit, rowsBeforeLimit, calculatedRowsBeforeLimit); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index 10a9a462f4..dc7057affd 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -17,11 +17,15 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; import java.util.List; public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryDecoder.class); + private final ArrayDeque> inflight; private final ClickhouseBinarySocketConnection conn; @@ -33,6 +37,14 @@ public ClickhouseBinaryDecoder(ArrayDeque> in @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { ClickhouseBinaryCommandCodec codec = inflight.peek(); + if (codec == null) { + InitCommandCodec initCommandCodec = conn.initCommandCodec(); + if (initCommandCodec != null) { + LOG.info("handling failed login after server HELLO packet"); + initCommandCodec.handleFailedLogin(ctx, in); + } + return; + } codec.decode(ctx, in); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index a2816cb9a5..7ed34ccff5 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -74,6 +74,9 @@ void write(CommandBase cmd) { ClickhouseBinaryCommandCodec c = inflight.poll(); resp.cmd = (CommandBase) c.cmd; chctx.fireChannelRead(resp); + if (c instanceof InitCommandCodec) { + conn.setInitCommandCodec((InitCommandCodec) c); + } }; inflight.add(codec); codec.encode(this); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java index 68740315b4..1a4dca7cbb 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseStreamDataSource.java @@ -22,6 +22,7 @@ public interface ClickhouseStreamDataSource { Logger LOG = LoggerFactory.getLogger(ClickhouseStreamDataSource.class); void moreData(ByteBuf buf, ByteBufAllocator ctx); + int readerIndex(); int readableBytes(); void skipBytes(int length); String readPascalString(); @@ -35,6 +36,9 @@ public interface ClickhouseStreamDataSource { ByteBuf readSlice(int nBytes); void readBytes(byte[] dst); byte readByte(); - String hexdump(); + String hexDump(int fromIndex, int len); + + String hexDump(); + void finish(); } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java index 183851389d..7c59bba89b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ColumnOrientedBlockReader.java @@ -38,7 +38,7 @@ public class ColumnOrientedBlockReader { private Integer nColumns; private Integer nRows; private Map colWithTypes; - private List data; + private List columnsData; private String colName; private String colType; @@ -52,8 +52,9 @@ public ColumnOrientedBlockReader(ClickhouseBinaryDatabaseMetadata md) { } public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { - - + if (LOG.isDebugEnabled()) { + LOG.debug("readFrom: " + in.hexDump()); + } //BlockInputStream.read if (blockInfo == null) { blockInfo = new BlockInfo(); @@ -97,21 +98,27 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { columnDescriptor = ClickhouseColumns.columnDescriptorForSpec(colType, colName); } if (nRows > 0) { - if (data == null) { - data = new ArrayList<>(nColumns); + if (columnsData == null) { + columnsData = new ArrayList<>(nColumns); } if (columnData == null) { columnData = ClickhouseColumns.columnForSpec(columnDescriptor, md).reader(nRows); } if (columnData.isPartial()) { if (LOG.isDebugEnabled()) { - LOG.debug("reading column " + colName + "[" + nRows + "] of type " + colType); + LOG.debug("reading(first or continuation) column " + colName + "[" + nRows + "] of type " + colType); } columnData.readColumn(in); if (columnData.isPartial()) { + if (LOG.isDebugEnabled()) { + LOG.debug("partial read of " + colName + "; buffer consumed: " + columnData.bufferAsStringConsumed()); + } return null; } else { - data.add(columnData); + if (LOG.isDebugEnabled()) { + LOG.debug("fully read " + colName + "; buffer consumed: " + columnData.bufferAsStringConsumed()); + } + columnsData.add(columnData); columnData = null; } } @@ -122,7 +129,7 @@ public ColumnOrientedBlock readFrom(ClickhouseStreamDataSource in) { colType = null; } if (colWithTypes.size() == nColumns) { - return new ColumnOrientedBlock(colWithTypes, data, blockInfo, md); + return new ColumnOrientedBlock(colWithTypes, columnsData, blockInfo, md); } return null; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index 0648104bc7..2d5542e4c6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -18,6 +18,7 @@ import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; +import io.vertx.core.Handler; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; @@ -30,6 +31,8 @@ public class InitCommandCodec extends ClickhouseBinaryCommandCodec failed login + handleFailedLogin(ctx, in); } else if (packet.getClass() == ClickhouseServerException.class) { + //easy case: no HELLO packet, just an exception ClickhouseServerException exc = (ClickhouseServerException)packet; completionHandler.handle(CommandResponse.failure(exc)); } else { @@ -80,4 +94,18 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; } } + + void handleFailedLogin(ChannelHandlerContext ctx, ByteBuf in) { + if (packetReader.packetType() == ServerPacketType.HELLO) { + //traces of the previous HELLO packet, need to recreate the packetReader + packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties(), encoder.getConn().lz4Factory()); + } + ClickhouseServerException exc = (ClickhouseServerException) packetReader.receivePacket(ctx.alloc(), in); + if (exc != null) { + if (LOG.isInfoEnabled()) { + LOG.info("handling failed login: " + exc); + } + completionHandler.handle(CommandResponse.failure(exc)); + } + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java index 46737eb285..b88acc4dce 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/Lz4ClickhouseStreamDataSource.java @@ -139,6 +139,11 @@ private void dumpHeader(ByteBuf buf) { } } + @Override + public int readerIndex() { + return decompressedData.readerIndex(); + } + @Override public int readableBytes() { return decompressedData.readableBytes(); @@ -205,7 +210,12 @@ public double readDoubleLE() { } @Override - public String hexdump() { + public String hexDump(int fromIndex, int len) { + return ByteBufUtil.hexDump(decompressedData, fromIndex, len); + } + + @Override + public String hexDump() { return ByteBufUtil.hexDump(decompressedData); } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java index a0ace67c4e..78989609a6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PacketReader.java @@ -90,7 +90,8 @@ public Object receivePacket(ByteBufAllocator alloc, ByteBuf in) { LOG.debug("packet type: " + packetType); } } catch (IllegalArgumentException ex) { - LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in), ex); + LOG.error("unknown packet type, dump: " + ByteBufUtil.hexDump(in)); + LOG.error("unknown packet type", ex); throw ex; } } @@ -187,7 +188,7 @@ private ClickhouseBinaryDatabaseMetadata readServerHelloBlock(ByteBuf in) { ClickhouseBinaryDatabaseMetadata md = metadataReader.readFrom(in); if (md != null) { if (LOG.isDebugEnabled()) { - LOG.debug("decoded: HELLO/ClickhouseNativeDatabaseMetadata"); + LOG.debug("decoded: HELLO/ClickhouseBinaryDatabaseMetadata"); } metadataReader = null; packetType = null; @@ -199,10 +200,12 @@ private BlockStreamProfileInfo readProfileInfoBlock(ByteBuf in) { if (blockStreamProfileReader == null) { blockStreamProfileReader = new BlockStreamProfileInfoReader(); } + int startIdx = in.readerIndex(); BlockStreamProfileInfo profileInfo = blockStreamProfileReader.readFrom(in); if (profileInfo != null) { if (LOG.isDebugEnabled()) { - LOG.debug("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo); + int endIndex = in.readerIndex(); + LOG.debug("decoded: PROFILE_INFO/BlockStreamProfileInfo " + profileInfo + ": " + ByteBufUtil.hexDump(in, startIdx, endIndex - startIdx)); } blockStreamProfileReader = null; packetType = null; @@ -277,12 +280,18 @@ private ColumnOrientedBlock readDataBlock(ByteBufAllocator alloc, ByteBuf in, bo private ClickhouseStreamDataSource dataSource(ByteBufAllocator alloc, boolean preferCompressionIfEnabled) { if (lz4Factory == null || !preferCompressionIfEnabled) { + LOG.debug("dataSource: raw"); return new RawClickhouseStreamDataSource(md.getStringCharset()); } else { + LOG.debug("dataSource: lz4"); return new Lz4ClickhouseStreamDataSource(lz4Factory, md.getStringCharset(), alloc); } } + public ServerPacketType packetType() { + return packetType; + } + public boolean isEndOfStream() { return endOfStream; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java index c81adc9861..e2646359d1 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/PrepareStatementCodec.java @@ -58,7 +58,7 @@ void encode(ClickhouseBinaryEncoder encoder) { } } else { completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(sql, new ClickhouseBinaryParamDesc(Collections.emptyList()), - new ClickhouseBinaryRowDesc(Collections.emptyList()), queryInfo, false, psId))); + ClickhouseBinaryRowDesc.EMPTY, queryInfo, false, psId))); } } @@ -74,9 +74,8 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { TableColumns columns = (TableColumns)packet; Map data = columns.columnDefinition().getColumnsWithTypes(); - List columnNames = new ArrayList<>(data.keySet()); - List columnTypes = new ArrayList<>(data.values()); - ClickhouseBinaryRowDesc rowDesc = new ClickhouseBinaryRowDesc(columnNames, columnTypes); + ClickhouseBinaryColumnDescriptor[] columnTypes = data.values().toArray(ClickhouseBinaryRowDesc.EMPTY_DESCRIPTORS); + ClickhouseBinaryRowDesc rowDesc = new ClickhouseBinaryRowDesc(columnTypes); completionHandler.handle(CommandResponse.success(new ClickhouseBinaryPreparedStatement(cmd.sql(), new ClickhouseBinaryParamDesc(Collections.emptyList()), rowDesc, queryInfo, true, psId))); } else if (packet instanceof Throwable) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java index af035986d1..5bde877e75 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryProgressInfoReader.java @@ -14,10 +14,15 @@ package io.vertx.clickhouseclient.binary.impl.codec; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; public class QueryProgressInfoReader { + private static final Logger LOG = LoggerFactory.getLogger(QueryProgressInfoReader.class); + private final int serverRevision; private Integer rows; @@ -31,6 +36,7 @@ public QueryProgressInfoReader(ClickhouseBinaryDatabaseMetadata md) { } public QueryProgressInfo readFrom(ByteBuf in) { + int idxStart = in.readerIndex(); if (rows == null) { rows = ByteBufUtils.readULeb128(in); if (rows == null) { @@ -68,6 +74,11 @@ public QueryProgressInfo readFrom(ByteBuf in) { } } } + int idxEnd = in.readerIndex(); + String bufferAsStringConsumed = ByteBufUtil.hexDump(in, idxStart, idxEnd - idxStart); + if (LOG.isDebugEnabled()) { + LOG.debug("bufferAsStringConsumed: " + bufferAsStringConsumed); + } return new QueryProgressInfo(rows, bytes, totalRows, writtenRows, writtenBytes); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java index d5c48a9b37..197473aeb9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/RawClickhouseStreamDataSource.java @@ -32,6 +32,11 @@ public void moreData(ByteBuf source, ByteBufAllocator alloc) { this.source = source; } + @Override + public int readerIndex() { + return source.readerIndex(); + } + @Override public int readableBytes() { return source.readableBytes(); @@ -102,9 +107,16 @@ public void finish() { } @Override - public String hexdump() { + public String hexDump() { + return source != null + ? ByteBufUtil.hexDump(source) + : null; + } + + @Override + public String hexDump(int fromIndex, int len) { return source != null - ? "[" + ByteBufUtil.hexDump(source, 0, source.writerIndex()) + "][" + ByteBufUtil.hexDump(source) + "]" + ? ByteBufUtil.hexDump(source, fromIndex, len) : null; } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java index 21cd7c23a1..89a2307b21 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ServerPacketType.java @@ -72,7 +72,7 @@ public String toString() { public static ServerPacketType fromCode(int code) { ServerPacketType ret = CODE_INDEX.get(code); if (ret == null) { - throw new IllegalArgumentException("unknown code: " + code + "(" + Integer.toHexString(code) + ")"); + throw new IllegalArgumentException("unknown code: " + code + "(0x" + Integer.toHexString(code) + ")"); } return ret; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java index 83489b2e06..adbde93711 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ArrayColumnReader.java @@ -19,6 +19,8 @@ import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import java.util.Arrays; + public class ArrayColumnReader extends ClickhouseColumnReader { private static final Logger LOG = LoggerFactory.getLogger(ArrayColumnReader.class); @@ -61,8 +63,10 @@ protected Object readItems(ClickhouseStreamDataSource in) { return null; } if (curDimension < columnDescriptor.arrayDimensionsCount()) { + LOG.debug("reading array slices"); readAsPerRowSlices(in); if (curDimension < columnDescriptor.arrayDimensionsCount()) { + LOG.debug("partial read arr1"); return null; } } @@ -72,7 +76,12 @@ protected Object readItems(ClickhouseStreamDataSource in) { elementClass = nestedColumn.nullValue().getClass(); } if (elementTypeDescr.isNullable()) { - nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); + if (nestedColumnReader.nullsMap == null) { + nestedColumnReader.nullsMap = nestedColumnReader.readNullsMap(in); + if (LOG.isDebugEnabled()) { + LOG.debug("nestedColumnReader.nullsMap: " + nestedColumnReader.nullsMap); + } + } } if (nItems > 0) { assert nItems == nestedColumnReader.nRows; @@ -82,6 +91,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { if (nestedColumnReader.isPartial()) { nestedColumnReader.itemsArray = nestedColumnReader.readItems(in); if (nestedColumnReader.isPartial()) { + LOG.debug("partial read arr2"); return null; } } @@ -150,13 +160,20 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { return; } - perRowsSlice = new int[nRows][][]; - for (int i = 0; i < nRows; ++i) { - perRowsSlice[i] = new int[columnDescriptor.arrayDimensionsCount()][]; + if (perRowsSlice == null) { + perRowsSlice = new int[nRows][][]; + for (int i = 0; i < nRows; ++i) { + perRowsSlice[i] = new int[columnDescriptor.arrayDimensionsCount()][]; + } + curLevelSliceSize = nRows; } - curLevelSliceSize = nRows; + while (curDimension < columnDescriptor.arrayDimensionsCount()) { - if (in.readableBytes() < curLevelSliceSize * Long.BYTES) { + int readableBytes = in.readableBytes(); + if (readableBytes < curLevelSliceSize * Long.BYTES) { + if (LOG.isDebugEnabled()) { + LOG.debug("ArrayColumnReader: not enough bytes; have + " + readableBytes + "; need " + curLevelSliceSize * Long.SIZE); + } return; } long prevSliceElement = 0; @@ -181,9 +198,15 @@ private void readAsPerRowSlices(ClickhouseStreamDataSource in) { rowSliceAtDimension[i + 1] = ((int)(prevSliceElement - (lastDimension ? 0L : firstElementInSlice))); } perRowsSlice[rowIdx][curDimension] = (rowSliceAtDimension); + if (LOG.isDebugEnabled()) { + LOG.debug("rowSliceAtDimension[" + rowIdx + "]:" + Arrays.toString(rowSliceAtDimension)); + } } ++curDimension; curLevelSliceSize = (int)prevSliceElement; + if (LOG.isDebugEnabled()) { + LOG.debug("curDimension: " + curDimension + "; columnDescriptor.arrayDimensionsCount(): " + columnDescriptor.arrayDimensionsCount()); + } } nItems = curLevelSliceSize; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java index 52be5e83df..632cd8cd5a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -15,9 +15,13 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; + import java.util.BitSet; public abstract class ClickhouseColumnReader { + private static final Logger LOG = LoggerFactory.getLogger(ClickhouseColumnReader.class); private static final Object NOP_STATE = new Object(); @@ -26,6 +30,9 @@ public abstract class ClickhouseColumnReader { protected BitSet nullsMap; protected Object itemsArray; + private long bytesConsumed; + private String bufferAsStringConsumed = ""; + protected ClickhouseColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { this.columnDescriptor = columnDescriptor; this.nRows = nRows; @@ -36,8 +43,21 @@ public ClickhouseBinaryColumnDescriptor columnDescriptor() { } public void readColumn(ClickhouseStreamDataSource in){ + int idxStart = in.readerIndex(); readStatePrefix(in); readData(in); + int idxEnd = in.readerIndex(); + int bytesRead = idxEnd - idxStart; + bytesConsumed += bytesRead; + bufferAsStringConsumed += in.hexDump(idxStart, bytesRead); + } + + public long bytesConsumed() { + return bytesConsumed; + } + + public String bufferAsStringConsumed() { + return bufferAsStringConsumed; } public int nRows() { @@ -88,6 +108,7 @@ protected void afterReadItems(ClickhouseStreamDataSource in) { protected BitSet readNullsMap(ClickhouseStreamDataSource in) { if (in.readableBytes() >= nRows) { + LOG.debug("readNullsMap"); BitSet bSet = new BitSet(nRows); for (int i = 0; i < nRows; ++i) { byte b = in.readByte(); @@ -96,12 +117,21 @@ protected BitSet readNullsMap(ClickhouseStreamDataSource in) { } } return bSet; + } else { + if (LOG.isDebugEnabled()) { + LOG.debug("readNullsMap skipped: has " + in.readableBytes() + "; need" + nRows); + } } return null; } public boolean isPartial() { - return itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); + boolean ret = itemsArray == null || (columnDescriptor.isNullable() && nullsMap == null); + if (LOG.isDebugEnabled()) { + LOG.debug("isPartial: " + ret + "; itemsArray == null: " + (itemsArray == null) + "; columnDescriptor.isNullable(): " + + columnDescriptor.isNullable() + "; nullsMap == null: " + (nullsMap == null)); + } + return ret; } public Object getElement(int rowIdx, Class desired) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java index bb904e0347..d1f79a1396 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java @@ -95,7 +95,10 @@ public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String un boolean nullable, boolean isArray, boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); - if (spec.equals("UInt8") || spec.equals("Int8")) { + //newer versions (at least clickhouse/clickhouse-server:22.9.3.18) return Bool, + //older versions (at least yandex/clickhouse-server:20.10.2) return Int8 for bool types + //TODO: maybe change type to JDBCType.BOOLEAN for Bool/Boolean types + if (spec.equals("UInt8") || spec.equals("Int8") || spec.equals("Bool") || spec.equals("Boolean")) { return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); } else if (spec.equals("UInt16") || spec.equals("Int16")) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java index 9b7a334609..b67c92e4d6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/spi/ClickhouseBinaryDriver.java @@ -55,7 +55,7 @@ private PoolImpl newPoolImpl(VertxInternal vertx, List lst = databases.stream().map(o -> createConnectionFactory(vertx, o)).collect(Collectors.toList()); ConnectionFactory factory = ConnectionFactory.roundRobinSelector(lst); pool.connectionProvider(factory::connect); diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java index 99efb21e1a..2b62cb468a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java @@ -54,7 +54,7 @@ protected void before() throws Throwable { private static String clickhouseVersion() { String version = System.getProperty("embedded.clickhouse.version"); - return version == null ? "20.10.2" : version; + return version == null ? "21.8.15.7-alpine" : version; } @Override diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java index a88c207824..b84b8d8ccc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketReaderReplayTest.java @@ -20,6 +20,7 @@ import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; +import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; import io.vertx.clickhouseclient.binary.impl.codec.PacketReader; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; @@ -62,7 +63,9 @@ public static Iterable dataForTest() throws IOException { "/select_array_of_nullable_string_without_compression.yaml", "/select_empty_array_without_compression.yaml", "/ClickhouseBinaryPreparedQueryCachedTest_testConcurrentClose_with_compression.yaml", - "/wrong_db_connection_without_compression.yaml" + "/wrong_db_connection_without_compression.yaml", + "/testConnectInvalidDatabase_20.10.2_without_compression.yaml", + "/testConnectInvalidDatabase_22.8.6.71_without_compression.yaml" ); for (String replayFile : replayFiles) { boolean compression = replayFile.contains("with_compression"); @@ -111,8 +114,15 @@ public void doReplayTest() { private void readConnInteraction(PooledByteBufAllocator allocator, String fullName) { //1st packet: server hello PacketReader rdr = new PacketReader(null, fullName, props, lz4Factory); - ClickhouseBinaryDatabaseMetadata md = (ClickhouseBinaryDatabaseMetadata)rdr.receivePacket(allocator, buf); - + Object firstPacket = rdr.receivePacket(allocator, buf); + //some old versions(e.g. 20.10.2) omit HELLO packet, some sends both HELLO and Exception in case of bad login (e.g. DB does not exist) + if (firstPacket instanceof ClickhouseServerException) { + ClickhouseServerException exception = (ClickhouseServerException) firstPacket; + LOG.info("clickhouse exception: " + exception); + return; + } + ClickhouseBinaryDatabaseMetadata md = (ClickhouseBinaryDatabaseMetadata)firstPacket; + LOG.info("db version: " + md.fullVersion()); do { rdr = new PacketReader(md, fullName, props, lz4Factory); Object packet = rdr.receivePacket(allocator, buf); diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java index 139ae14417..da886af4d1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/PacketUtil.java @@ -13,17 +13,35 @@ package io.vertx.clickhouseclient.binary; -import java.util.List; -import java.util.Map; +import org.testcontainers.shaded.org.bouncycastle.util.Pack; + +import java.util.*; import java.util.stream.Collectors; public class PacketUtil { - public static List filterServerBlocks(Map map) { - return map.entrySet() - .stream() - .filter(packet -> !packet.getKey().startsWith("peer0_")) - .map(Map.Entry::getValue) - .collect(Collectors.toList()); + public static List filterServerBlocks(Map src) { + if (src.containsKey("packets")) { + List> packetsMaps = (List>) src.get("packets"); + List packets = new ArrayList<>(); + for (Map packetFields : packetsMaps) { + Packet packet = new Packet((int) packetFields.get("peer"), (int) packetFields.get("index"), (byte[]) packetFields.get("data")); + packets.add(packet); + } + packets.sort(Comparator.comparing(Packet::index)); + List peer0Packets = + packets.stream() + .filter(pckt -> pckt.peer() == 1) + .map(Packet::data) + .collect(Collectors.toList()); + return peer0Packets; + } else { + Map packets = (Map)src; + return packets.entrySet() + .stream() + .filter(packet -> !packet.getKey().startsWith("peer0_")) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + } } public static byte[][] asPrimitiveByteArray(List src) { @@ -34,3 +52,28 @@ public static byte[][] asPrimitiveByteArray(List src) { return ret; } } + + +class Packet { + private final int peer; + private final int index; + private final byte[] data; + + Packet(int peer, int index, byte[] data) { + this.peer = peer; + this.index = index; + this.data = data; + } + + public int peer() { + return peer; + } + + public int index() { + return index; + } + + public byte[] data() { + return data; + } +} diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java index 1374a50743..f6a7e014bc 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/AllTypesBase.java @@ -15,6 +15,7 @@ import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnectOptions; import io.vertx.clickhouseclient.binary.ClickhouseBinaryConnection; +import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.clickhouseclient.binary.ClickhouseResource; import io.vertx.clickhouseclient.binary.Sleep; import io.vertx.core.Vertx; @@ -26,6 +27,7 @@ import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import org.junit.*; +import org.junit.rules.TestName; import org.junit.runner.RunWith; import java.util.ArrayList; @@ -33,6 +35,7 @@ import java.util.Collections; import java.util.List; import java.util.function.Consumer; +import java.util.stream.Collectors; @RunWith(VertxUnitRunner.class) public abstract class AllTypesBase { @@ -46,6 +49,9 @@ public abstract class AllTypesBase { @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); + @Rule + public TestName nameRule = new TestName(); + protected ClickhouseBinaryConnectOptions options; protected Vertx vertx; @@ -62,6 +68,8 @@ public AllTypesBase(String tableSuffix, MyColumnChecker checker, boolean hasL @Before public void setup(TestContext ctx) { options = rule.options(); + options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, + this.getClass().getSimpleName() + "." + nameRule.getMethodName()); vertx = Vertx.vertx(); ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { conn.query("TRUNCATE TABLE " + tableName()).execute(ctx.asyncAssertSuccess()); @@ -85,35 +93,45 @@ public void testData(TestContext ctx) { public abstract List createBatch(); - private List columnsList(boolean hasLowCardinality) { + private List allColumnsList(boolean hasLowCardinality) { List columns = new ArrayList<>(Arrays.asList("id", "simple_t", "nullable_t", "array_t", "array3_t", "nullable_array_t", "nullable_array3_t")); if (hasLowCardinality) { columns.addAll(Arrays.asList("simple_lc_t", "nullable_lc_t", "array_lc_t", "array3_lc_t", "nullable_array_lc_t", "nullable_array3_lc_t")); } - return columns; + return columns + .stream() + .map(nm -> new ColumnInfo(nm, true)) + .collect(Collectors.toList()); } protected void doTest(TestContext ctx, List batch) { String tableName = tableName(); ClickhouseBinaryConnection.connect(vertx, options, ctx.asyncAssertSuccess(conn -> { - List columnsList = columnsList(hasLowCardinality); - String columnsStr = String.join(", ", columnsList); - String query = "INSERT INTO " + tableName + " (" + columnsStr + ") VALUES"; - conn.preparedQuery(query) + List columnsList = allColumnsList(hasLowCardinality); + List insertColumnNames = columnsList.stream().map(ColumnInfo::name).collect(Collectors.toList()); + String insertColumnsStr = String.join(", ", insertColumnNames); + String insertQuery = "INSERT INTO " + tableName + " (" + insertColumnsStr + ") VALUES"; + conn.preparedQuery(insertQuery) .executeBatch(batch, ctx.asyncAssertSuccess(res2 -> { Sleep.sleepOrThrow(); - conn.query("SELECT " + columnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( + List selectColumns = columnsList.stream().filter(ColumnInfo::selectEnabled).map(ColumnInfo::name).collect(Collectors.toList()); + String selectColumnsStr = String.join(", ", selectColumns); + conn.query("SELECT " + selectColumnsStr + " FROM " + tableName + " ORDER BY id").execute(ctx.asyncAssertSuccess( res3 -> { ctx.assertEquals(res3.size(), batch.size(), "row count mismatch"); int batchIdx = 0; - for (Row row : res3) { - Number id = row.get(Number.class, "id"); + for (Row actualRow : res3) { + Number id = actualRow.get(Number.class, "id"); Tuple expectedRow = batch.get(batchIdx); LOG.info("checking row " + tableSuffix + ":" + id); for (int colIdx = 0; colIdx < expectedRow.size(); ++colIdx) { - String colName = columnsList.get(colIdx); - Object expectedColumnValue = expectedRow.getValue(colIdx); - checker.checkColumn(row, colIdx, colName, (T) expectedColumnValue); + ColumnInfo columnInfo = columnsList.get(colIdx); + if (columnInfo.selectEnabled()) { + String colName = columnInfo.name(); + Object expectedColumnValue = expectedRow.getValue(colIdx); + int actualColIdx = actualRow.getColumnIndex(colName); + checker.checkColumn(actualRow, actualColIdx, colName, (T) expectedColumnValue); + } } ++batchIdx; } @@ -188,3 +206,22 @@ public void checkColumn(Row row, int index, String name, R expected) { checker.forRow(row); } } + + +class ColumnInfo { + private final String name; + private final boolean selectEnabled; + + ColumnInfo(String name, boolean selectEnabled) { + this.name = name; + this.selectEnabled = selectEnabled; + } + + public String name() { + return name; + } + + public boolean selectEnabled() { + return selectEnabled; + } +} diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java index abf16a724d..1ef2366bae 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/Decimal32Test.java @@ -14,10 +14,12 @@ package io.vertx.clickhouseclient.binary.alltypes; import io.vertx.clickhouseclient.binary.impl.codec.columns.Decimal32Column; +import io.vertx.ext.unit.TestContext; import io.vertx.ext.unit.junit.VertxUnitRunner; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import io.vertx.sqlclient.data.Numeric; +import org.junit.Test; import org.junit.runner.RunWith; import java.math.BigDecimal; diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java index 47615cfadd..4d6b54a2a9 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java @@ -32,14 +32,14 @@ public class ClickhouseBinaryConnectionTest extends ConnectionTestBase { public static ClickhouseResource rule = new ClickhouseResource(); @Rule - public TestName name = new TestName(); + public TestName nameRule = new TestName(); @Override public void setUp() throws Exception { super.setUp(); options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + this.getClass().getSimpleName() + "." + nameRule.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java index fa5d07e1bc..940e74eed9 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -85,6 +85,9 @@ public void testBoolean(TestContext ctx) { @Test public void testDouble(TestContext ctx) { //Double.MIN_VALUE is too small here + //Is 22.9.1.2603 broken? Fails with 'java.lang.AssertionError: Not equals : 4.9E-322 != 4.84E-322' + //22.9.1.2603 docker container is broken due to a 'Poco::Exception. Code: 1000, e.code() = 0, Not found: https_port (version 22.9.1.2603 (official build))' + //22.8.6.71 (and earlier) is fine testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); } diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java index e8ac554e5f..e7fa1167d5 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryPreparedQueryCachedTest.java @@ -30,7 +30,7 @@ public class ClickhouseBinaryPreparedQueryCachedTest extends PreparedQueryCachedTestBase { @Rule - public TestName name = new TestName(); + public TestName nameRule = new TestName(); @ClassRule public static ClickhouseResource rule = new ClickhouseResource(); @@ -39,7 +39,7 @@ public class ClickhouseBinaryPreparedQueryCachedTest extends PreparedQueryCached protected void initConnector() { options = new ClickhouseBinaryConnectOptions(rule.options()); options.addProperty(ClickhouseConstants.OPTION_APPLICATION_NAME, - ClickhouseBinaryPreparedQueryCachedTest.class.getSimpleName() + "." + name.getMethodName()); + this.getClass().getSimpleName() + "." + nameRule.getMethodName()); connector = ClientConfig.CONNECT.connect(vertx, options); } diff --git a/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_20.10.2_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_20.10.2_without_compression.yaml new file mode 100644 index 0000000000..3f36e84652 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_20.10.2_without_compression.yaml @@ -0,0 +1,32 @@ +peers: + - peer: 0 + host: 127.0.0.1 + port: 38066 + - peer: 1 + host: 127.0.0.1 + port: 9000 +packets: + - packet: 10 + peer: 0 + index: 0 + timestamp: 1665938677.585407195 + data: !!binary | + AERDbGlja0hvdXNlIENsaWNraG91c2VCaW5hcnlDb25uZWN0aW9uVGVzdC50ZXN0Q29ubmVjdElu + dmFsaWREYXRhYmFzZRQKqakDD2ludmFsaWREYXRhYmFzZQR0ZXN0BHRlc3Q= + - packet: 22 + peer: 1 + index: 0 + timestamp: 1665938677.586282510 + data: !!binary | + AlEAAAANREI6OkV4Y2VwdGlvbjdEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBgaW52YWxpZERhdGFi + YXNlYCBkb2Vzbid0IGV4aXN0rgQwLiBEQjo6VENQSGFuZGxlcjo6cnVuSW1wbCgpIEAgMHhlNTY5 + OTcyIGluIC91c3IvYmluL2NsaWNraG91c2UKMS4gREI6OlRDUEhhbmRsZXI6OnJ1bigpIEAgMHhl + NTc3MWI3IGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gUG9jbzo6TmV0OjpUQ1BTZXJ2ZXJDb25u + ZWN0aW9uOjpzdGFydCgpIEAgMHgxMGQ0ZjcxZiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIFBv + Y286Ok5ldDo6VENQU2VydmVyRGlzcGF0Y2hlcjo6cnVuKCkgQCAweDEwZDUxMTJlIGluIC91c3Iv + YmluL2NsaWNraG91c2UKNC4gUG9jbzo6UG9vbGVkVGhyZWFkOjpydW4oKSBAIDB4MTBlODIzZTkg + aW4gL3Vzci9iaW4vY2xpY2tob3VzZQo1LiBQb2NvOjpUaHJlYWRJbXBsOjpydW5uYWJsZUVudHJ5 + KHZvaWQqKSBAIDB4MTBlN2UzMWEgaW4gL3Vzci9iaW4vY2xpY2tob3VzZQo2LiBzdGFydF90aHJl + YWQgQCAweDk2MDkgaW4gL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJwdGhyZWFkLTIuMzEu + c28KNy4gY2xvbmUgQCAweDEyMjI5MyBpbiAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMt + Mi4zMS5zbwoA diff --git a/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_22.8.6.71_without_compression.yaml b/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_22.8.6.71_without_compression.yaml new file mode 100644 index 0000000000..6e27cb6529 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/test/resources/testConnectInvalidDatabase_22.8.6.71_without_compression.yaml @@ -0,0 +1,49 @@ +peers: + - peer: 0 + host: 127.0.0.1 + port: 40408 + - peer: 1 + host: 127.0.0.1 + port: 9000 +packets: + - packet: 10 + peer: 0 + index: 0 + timestamp: 1665939249.457106986 + data: !!binary | + AERDbGlja0hvdXNlIENsaWNraG91c2VCaW5hcnlDb25uZWN0aW9uVGVzdC50ZXN0Q29ubmVjdElu + dmFsaWREYXRhYmFzZRQKqakDD2ludmFsaWREYXRhYmFzZQR0ZXN0BHRlc3Q= + - packet: 20 + peer: 1 + index: 0 + timestamp: 1665939249.457535943 + data: !!binary | + AApDbGlja0hvdXNlFgi8qQMDVVRDDDRmMjgxMTZiZjkwMQY= + - packet: 26 + peer: 1 + index: 1 + timestamp: 1665939249.457558245 + data: !!binary | + AlEAAAANREI6OkV4Y2VwdGlvbjVEQjo6RXhjZXB0aW9uOiBEYXRhYmFzZSBpbnZhbGlkRGF0YWJh + c2UgZG9lc24ndCBleGlzdKQJMC4gREI6OkV4Y2VwdGlvbjo6RXhjZXB0aW9uKHN0ZDo6X18xOjpi + YXNpY19zdHJpbmc8Y2hhciwgc3RkOjpfXzE6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6Ol9fMTo6 + YWxsb2NhdG9yPGNoYXI+ID4gY29uc3QmLCBpbnQsIGJvb2wpIEAgMHhhM2VjNzNhIGluIC91c3Iv + YmluL2NsaWNraG91c2UKMS4gREI6OkRhdGFiYXNlQ2F0YWxvZzo6YXNzZXJ0RGF0YWJhc2VFeGlz + dHNVbmxvY2tlZChzdGQ6Ol9fMTo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6X18xOjpjaGFyX3Ry + YWl0czxjaGFyPiwgc3RkOjpfXzE6OmFsbG9jYXRvcjxjaGFyPiA+IGNvbnN0JikgY29uc3QgQCAw + eDE0OGYyOTBkIGluIC91c3IvYmluL2NsaWNraG91c2UKMi4gREI6OkRhdGFiYXNlQ2F0YWxvZzo6 + YXNzZXJ0RGF0YWJhc2VFeGlzdHMoc3RkOjpfXzE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6Ol9f + MTo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6X18xOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCYp + IGNvbnN0IEAgMHgxNDhmMjdhMiBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjMuIERCOjpDb250ZXh0 + OjpzZXRDdXJyZW50RGF0YWJhc2Uoc3RkOjpfXzE6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6Ol9f + MTo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6X18xOjphbGxvY2F0b3I8Y2hhcj4gPiBjb25zdCYp + IEAgMHgxNDg2MDdhMSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjQuIERCOjpUQ1BIYW5kbGVyOjpy + dW5JbXBsKCkgQCAweDE1YzBkZjQ3IGluIC91c3IvYmluL2NsaWNraG91c2UKNS4gREI6OlRDUEhh + bmRsZXI6OnJ1bigpIEAgMHgxNWMxZmU5OSBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjYuIFBvY286 + Ok5ldDo6VENQU2VydmVyQ29ubmVjdGlvbjo6c3RhcnQoKSBAIDB4MTg5OGFmNzMgaW4gL3Vzci9i + aW4vY2xpY2tob3VzZQo3LiBQb2NvOjpOZXQ6OlRDUFNlcnZlckRpc3BhdGNoZXI6OnJ1bigpIEAg + MHgxODk4YzJjZCBpbiAvdXNyL2Jpbi9jbGlja2hvdXNlCjguIFBvY286OlBvb2xlZFRocmVhZDo6 + cnVuKCkgQCAweDE4YjRlYTI5IGluIC91c3IvYmluL2NsaWNraG91c2UKOS4gUG9jbzo6VGhyZWFk + SW1wbDo6cnVubmFibGVFbnRyeSh2b2lkKikgQCAweDE4YjRjMmUyIGluIC91c3IvYmluL2NsaWNr + aG91c2UKMTAuID8gQCAweDdmMDQ3NmI0MjYwOSBpbiA/CjExLiBjbG9uZSBAIDB4N2YwNDc2YTY3 + MTMzIGluID8KAA== From b15d646cef85399166696be731900cd631f6dd48 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Thu, 19 Jan 2023 23:38:58 +0300 Subject: [PATCH 169/176] rebase over 4.4.0-SNAPSHOT --- vertx-clickhouse-binary-client/pom.xml | 2 +- .../main/java/examples/SqlClientExamples.java | 2 -- .../ClickhouseBinaryConnectionFactory.java | 18 ++++++++---------- .../binary/impl/ClickhouseServerException.java | 2 +- .../ClickhouseBinaryColumnDescriptor.java | 2 +- .../impl/codec/ExtendedQueryCommandCodec.java | 4 ++-- .../binary/impl/codec/QueryInfo.java | 2 +- .../clickhouse/util/ClickHouseCityHash.java | 2 +- .../binary/ClickhouseResource.java | 2 +- .../binary/ExtendedClickhouseTest.java | 2 ++ .../tck/ClickhouseBinaryConnectionTest.java | 2 +- .../ClickhouseBinaryDataTypeEncodeTest.java | 2 +- 12 files changed, 20 insertions(+), 22 deletions(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index b58984f384..e662b710f7 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -22,7 +22,7 @@ io.vertx vertx-sql-client-parent - 4.3.5-SNAPSHOT + 4.4.0-SNAPSHOT vertx-clickhouse-binary-client diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index ea59adc60b..e667f2c748 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -285,12 +285,10 @@ public void tracing01(ClickhouseBinaryConnectOptions options) { options.setTracingPolicy(TracingPolicy.ALWAYS); } - //TODO smagellan public void poolConfig01(ClickhouseBinaryConnectOptions server1, ClickhouseBinaryConnectOptions server2, ClickhouseBinaryConnectOptions server3, PoolOptions options) { throw new IllegalStateException("TODO smagellan"); } - //TODO smagellan public void poolConfig02(Pool pool, String sql) { throw new IllegalStateException("TODO smagellan"); } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java index e907c2d7ef..0588683f3f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -21,8 +21,6 @@ import io.vertx.core.impl.EventLoopContext; import io.vertx.core.impl.VertxInternal; import io.vertx.core.impl.future.PromiseInternal; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.net.NetClientOptions; import io.vertx.core.net.NetSocket; import io.vertx.core.net.SocketAddress; @@ -35,13 +33,13 @@ import net.jpountz.lz4.LZ4Factory; public class ClickhouseBinaryConnectionFactory extends ConnectionFactoryBase { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryConnectionFactory.class); + public static final String LZ4_FASTEST_JAVA = "lz4_fastest_java"; private final LZ4Factory lz4Factory; public ClickhouseBinaryConnectionFactory(VertxInternal vertx, ClickhouseBinaryConnectOptions options) { super(vertx, options); - this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, "none")); + this.lz4Factory = lz4FactoryForName(options.getProperties().getOrDefault(ClickhouseConstants.OPTION_COMPRESSOR, LZ4_FASTEST_JAVA)); } private LZ4Factory lz4FactoryForName(String name) { @@ -49,15 +47,15 @@ private LZ4Factory lz4FactoryForName(String name) { return LZ4Factory.nativeInstance(); } else if ("lz4_fastest".equals(name)) { return LZ4Factory.fastestInstance(); - } else if ("lz4_fastest_java".equals(name)) { + } else if (LZ4_FASTEST_JAVA.equals(name)) { return LZ4Factory.fastestJavaInstance(); } else if ("lz4_safe".equals(name)) { return LZ4Factory.safeInstance(); } else if ("lz4_unsafe".equals(name)) { return LZ4Factory.unsafeInstance(); } - if (!"none".equals(name)) { - LOG.warn("unknown compressor name '" + name + "', ignored"); + if (!"I_know_uncompressed_connections_are_broken_and_want_to_continue_anyway".equals(name)) { + throw new IllegalArgumentException("uncompressed connections are broken"); } return null; } @@ -99,9 +97,9 @@ public Future connect(Context context) { connect(asEventLoopContext(contextInternal)) .map(conn -> { QueryTracer tracer = contextInternal.tracer() == null ? null : new QueryTracer(contextInternal.tracer(), options); - ClickhouseBinaryConnectionImpl pgConn = new ClickhouseBinaryConnectionImpl(this, contextInternal, conn, tracer, null); - conn.init(pgConn); - return (SqlConnection)pgConn; + ClickhouseBinaryConnectionImpl dbConn = new ClickhouseBinaryConnectionImpl(this, contextInternal, conn, tracer, null); + conn.init(dbConn); + return (SqlConnection)dbConn; }) .onComplete(promise); return promise.future(); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java index 878e96c466..89474406b4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseServerException.java @@ -24,7 +24,7 @@ private ClickhouseServerException(Integer code, String name, String message, Str this.code = code; this.name = name; this.message = message; - //TODO smagellan: maybe log stacktraces with specified EOL (useful for log collectors) + //TODO: maybe log stacktraces with specified EOL (useful for log collectors) this.stacktrace = stacktrace; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java index 75a049fbd7..27f417f9e6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryColumnDescriptor.java @@ -119,7 +119,7 @@ public String typeName() { return unparsedNativeType; } - //TODO smagellan: remove? + //TODO: remove? @Deprecated public String getUnparsedNativeType() { return unparsedNativeType; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java index 625175cb5c..5d5b945886 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ExtendedQueryCommandCodec.java @@ -63,9 +63,9 @@ void encode(ClickhouseBinaryEncoder encoder) { ChannelHandlerContext chctx = encoder.chctx(); PacketForge forge = new PacketForge(encoder.getConn(), chctx); ClickhouseBinaryDatabaseMetadata md = encoder.getConn().getDatabaseMetaData(); - List paramsList = ecmd.paramsList(); + List paramsList = ecmd.paramsList(); if (paramsList != null && !paramsList.isEmpty()) { - RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), paramsList, md); + RowOrientedBlock block = new RowOrientedBlock(ps.rowDesc(), (List) paramsList, md); forge.sendColumns(block, buf, null); } forge.sendData(buf, new RowOrientedBlock(ClickhouseBinaryRowDesc.EMPTY, Collections.emptyList(), md),""); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java index 66f81d953a..5338d4e48f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/QueryInfo.java @@ -56,7 +56,7 @@ private String findValuesAndTruncate(String sql, int typeKeywordPos) { if (endsWithVals) { return sql; } else { - //TODO: make sure there are placeholders only, maybe count placeholders count + //TODO: make sure there are placeholders only, maybe count placeholders amount int valuesIndex = QueryParsers.valuesPosForLoCaseSql(loCaseSql, typeKeywordPos); if (valuesIndex != -1) { return sql.substring(0, valuesIndex + VALUES_LENGTH); diff --git a/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java b/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java index b509b11cb4..fe182cfce6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java +++ b/vertx-clickhouse-binary-client/src/main/java/ru/yandex/clickhouse/util/ClickHouseCityHash.java @@ -250,7 +250,7 @@ private static long[] cityHash128WithSeed(byte[] s, int pos, int len, long seed0 } - //TODO: switch to external jar, see https://github.com/ClickHouse/clickhouse-jdbc/issues/600 + //TODO: maybe switch to external jar, see https://github.com/ClickHouse/clickhouse-jdbc/issues/600 public static long[] cityHash128(byte[] s, int pos, int len) { if (len >= 16) { diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java index 2b62cb468a..f20a385d94 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ClickhouseResource.java @@ -33,7 +33,7 @@ protected void before() throws Throwable { if (this.server != null) { return; } - DockerImageName imageName = DockerImageName.parse("yandex/clickhouse-server").withTag(clickhouseVersion()); + DockerImageName imageName = DockerImageName.parse("clickhouse/clickhouse-server").withTag(clickhouseVersion()); server = new ClickHouseContainer(imageName); server.start(); this.options = (ClickhouseBinaryConnectOptions) new ClickhouseBinaryConnectOptions() diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java index 23b8f18c7a..95d1e0459a 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/ExtendedClickhouseTest.java @@ -64,6 +64,8 @@ public void extendedQueryTest(TestContext ctx) { RowStream stream = ps.createStream(50, ArrayTuple.EMPTY); stream.exceptionHandler(err -> { LOG.error("exceptionHandler: ", err); + ctx.assertEquals(limit, adder.sum()); + async.complete(); }); stream.endHandler(v -> { LOG.info("got End of stream"); diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java index 4d6b54a2a9..854b2d90f3 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryConnectionTest.java @@ -55,7 +55,7 @@ protected void validateDatabaseMetaData(TestContext ctx, DatabaseMetadata md) { ctx.assertTrue(md.productName().toLowerCase().contains("ClickHouse".toLowerCase())); } - //No way to test that reliably with latest ClickHouse versions (see InitCommandCodec); 20.11.2.1 and older work fine + //TODO: find a way to test that reliably with latest ClickHouse versions (see InitCommandCodec); 20.11.2.1 and older work fine @Override @Test public void testConnectInvalidDatabase(TestContext ctx) { diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java index 940e74eed9..e7164c73f1 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -85,7 +85,7 @@ public void testBoolean(TestContext ctx) { @Test public void testDouble(TestContext ctx) { //Double.MIN_VALUE is too small here - //Is 22.9.1.2603 broken? Fails with 'java.lang.AssertionError: Not equals : 4.9E-322 != 4.84E-322' + //TODO: Is 22.9.1.2603 broken? Fails with 'java.lang.AssertionError: Not equals : 4.9E-322 != 4.84E-322' //22.9.1.2603 docker container is broken due to a 'Poco::Exception. Code: 1000, e.code() = 0, Not found: https_port (version 22.9.1.2603 (official build))' //22.8.6.71 (and earlier) is fine testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); From f366718460071156f567f990c0703e3d6444411b Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Wed, 1 Feb 2023 01:44:44 +0300 Subject: [PATCH 170/176] add Boolean type support --- .../impl/codec/columns/BooleanColumn.java | 4 ++ .../columns/BooleanColumnReaderAsArray.java | 70 +++++++++++++++++++ .../columns/BooleanColumnReaderAsBitSet.java | 4 ++ .../codec/columns/BooleanColumnWriter.java | 2 + .../binary/alltypes/BooleanTest.java | 2 + 5 files changed, 82 insertions(+) create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java create mode 100644 vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java new file mode 100644 index 0000000000..a122f0858b --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java @@ -0,0 +1,4 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +public class BooleanColumn { +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java new file mode 100644 index 0000000000..c28d3985d8 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java @@ -0,0 +1,70 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; + +import java.util.BitSet; + + +public class BooleanColumnReader extends ClickhouseColumnReader { + public static final int ELEMENT_SIZE = 1; + protected BooleanColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return columnDescriptor.isArray() ? super.getElementInternal(rowIdx, desired) : ((BitSet)itemsArray).get(rowIdx); + } + + + protected Object readItems(ClickhouseStreamDataSource in) { + return columnDescriptor.isArray() ? readItemsArray(in) : readItemsBitSet(in); + } + + protected Object readItemsBitSet(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + BitSet data = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data.set(i, in.readBoolean()); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + protected Object readItemsArray(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= ELEMENT_SIZE * nRows) { + boolean[] data = new boolean[nRows]; + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data[i] = in.readBoolean(); + } else { + in.skipBytes(ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == boolean.class) { + return new boolean[dim1][dim2]; + } + return new Boolean[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == boolean.class) { + return new boolean[length]; + } + return new Boolean[length]; + } +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java new file mode 100644 index 0000000000..4d8337e9a2 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java @@ -0,0 +1,4 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +public class BooleanColumnReaderAsBitSet { +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java new file mode 100644 index 0000000000..d717507cf4 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns;public class BooleanColumnWriter { +} diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java new file mode 100644 index 0000000000..d6c578c418 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouseclient.binary.alltypes;public class BooleanTest { +} From 86cf5e42d12735372b0052c19a17d4caa88fa42d Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sat, 4 Feb 2023 20:41:36 +0300 Subject: [PATCH 171/176] separate Signed/Unsigned column readers --- ...mnReader.java => SignedInt16ColumnReader.java} | 6 +++++- ...mnReader.java => SignedInt32ColumnReader.java} | 0 ...mnReader.java => SignedInt64ColumnReader.java} | 0 ...umnReader.java => SignedInt8ColumnReader.java} | 0 .../codec/columns/UnsignedInt16ColumnReader.java | 2 ++ .../codec/columns/UnsignedInt32ColumnReader.java | 2 ++ .../codec/columns/UnsignedInt64ColumnReader.java | 2 ++ .../codec/columns/UnsignedInt8ColumnReader.java | 15 +++++++++++++++ 8 files changed, 26 insertions(+), 1 deletion(-) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/{UInt16ColumnReader.java => SignedInt16ColumnReader.java} (94%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/{UInt32ColumnReader.java => SignedInt32ColumnReader.java} (100%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/{UInt64ColumnReader.java => SignedInt64ColumnReader.java} (100%) rename vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/{UInt8ColumnReader.java => SignedInt8ColumnReader.java} (100%) create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java create mode 100644 vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java similarity index 94% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java index 9ece8f3574..e00984f49a 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java @@ -41,13 +41,17 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - short element = ((short[])this.itemsArray)[rowIdx]; + short element = element(rowIdx); if (columnDescriptor.isUnsigned()) { return Short.toUnsignedInt(element); } return element; } + protected short element(int rowIdx) { + return ((short[]) this.itemsArray)[rowIdx]; + } + @Override protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { if (columnDescriptor.isUnsigned()) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java similarity index 100% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java similarity index 100% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java similarity index 100% rename from vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8ColumnReader.java rename to vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java new file mode 100644 index 0000000000..09abc9bedd --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt16ColumnReader { +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java new file mode 100644 index 0000000000..539fc5918f --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt32ColumnReader { +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java new file mode 100644 index 0000000000..2cddbf1447 --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java @@ -0,0 +1,2 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt64ColumnReader { +} diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java new file mode 100644 index 0000000000..175ffb8d3e --- /dev/null +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java @@ -0,0 +1,15 @@ +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; + +public class Int8ColumnReader extends UInt8ColumnReader { + + public Int8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + + } +} From b5b120c6a6d9957fd5ee7eb7e7a2d8a7115e4490 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sat, 4 Feb 2023 20:44:40 +0300 Subject: [PATCH 172/176] separate Signed/Unsigned column readers --- vertx-clickhouse-binary-client/pom.xml | 2 +- .../main/java/examples/SqlClientExamples.java | 11 +++- .../binary/impl/codec/InitCommandCodec.java | 6 +- .../impl/codec/SimpleQueryCommandCodec.java | 2 +- .../impl/codec/columns/BooleanColumn.java | 31 +++++++++- .../columns/BooleanColumnReaderAsArray.java | 32 +--------- .../columns/BooleanColumnReaderAsBitSet.java | 47 +++++++++++++- .../codec/columns/BooleanColumnWriter.java | 23 ++++++- .../codec/columns/ClickhouseColumnReader.java | 1 + .../impl/codec/columns/ClickhouseColumns.java | 26 ++++---- .../impl/codec/columns/DateColumnReader.java | 2 +- .../codec/columns/DateTime64ColumnReader.java | 2 +- .../codec/columns/Enum16ColumnReader.java | 2 +- .../impl/codec/columns/Enum8ColumnReader.java | 2 +- .../impl/codec/columns/IPv4ColumnReader.java | 2 +- .../codec/columns/IntervalColumnReader.java | 2 +- .../columns/SignedInt16ColumnReader.java | 24 ++------ .../columns/SignedInt32ColumnReader.java | 26 +++----- .../columns/SignedInt64ColumnReader.java | 21 +++---- .../codec/columns/SignedInt8ColumnReader.java | 26 +++----- .../impl/codec/columns/UInt16Column.java | 5 +- .../impl/codec/columns/UInt32Column.java | 5 +- .../impl/codec/columns/UInt64Column.java | 5 +- .../impl/codec/columns/UInt8Column.java | 5 +- .../columns/UnsignedInt16ColumnReader.java | 30 ++++++++- .../columns/UnsignedInt32ColumnReader.java | 30 ++++++++- .../columns/UnsignedInt64ColumnReader.java | 25 +++++++- .../columns/UnsignedInt8ColumnReader.java | 22 ++++++- .../binary/alltypes/BooleanTest.java | 61 ++++++++++++++++++- .../ClickhouseBinaryDataTypeDecodeTest.java | 9 +-- .../ClickhouseBinaryDataTypeEncodeTest.java | 19 +++--- ...lickhouseBinaryTextDataTypeDecodeTest.java | 5 -- .../src/test/python/gen_all_types_tables.py | 3 +- .../src/test/resources/init.sql | 35 +++++++---- 34 files changed, 376 insertions(+), 173 deletions(-) diff --git a/vertx-clickhouse-binary-client/pom.xml b/vertx-clickhouse-binary-client/pom.xml index e662b710f7..d50acfa678 100644 --- a/vertx-clickhouse-binary-client/pom.xml +++ b/vertx-clickhouse-binary-client/pom.xml @@ -159,7 +159,7 @@ ${embedded.clickhouse.version} ${connection.uri} - ${tls.connection.uri} + diff --git a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java index e667f2c748..1548aff476 100644 --- a/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java +++ b/vertx-clickhouse-binary-client/src/main/java/examples/SqlClientExamples.java @@ -286,11 +286,16 @@ public void tracing01(ClickhouseBinaryConnectOptions options) { } public void poolConfig01(ClickhouseBinaryConnectOptions server1, ClickhouseBinaryConnectOptions server2, ClickhouseBinaryConnectOptions server3, PoolOptions options) { - throw new IllegalStateException("TODO smagellan"); + ClickhouseBinaryPool pool = ClickhouseBinaryPool.pool(Arrays.asList(server1, server2, server3), options); } - public void poolConfig02(Pool pool, String sql) { - throw new IllegalStateException("TODO smagellan"); + public void poolConfig02(ClickhouseBinaryPool pool, String sql) { + pool.connectHandler(conn -> { + conn.query(sql).execute().onSuccess(res -> { + // Release the connection to the pool, ready to be used by the application + conn.close(); + }); + }); } public void poolSharing1(Vertx vertx, ClickhouseBinaryConnectOptions database, int maxSize) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index 2d5542e4c6..d5a36c70f7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -18,7 +18,6 @@ import io.vertx.clickhouseclient.binary.ClickhouseConstants; import io.vertx.clickhouseclient.binary.impl.ClickhouseBinaryDatabaseMetadata; import io.vertx.clickhouseclient.binary.impl.ClickhouseServerException; -import io.vertx.core.Handler; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.sqlclient.impl.Connection; @@ -76,11 +75,14 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } //caveat: there should be another way to distinguish failed/success logins for adjacent HELLO + Exception packets if (in.readableBytes() == 0) { + if (LOG.isDebugEnabled()) { + LOG.debug("logged in"); + } completionHandler.handle(CommandResponse.success(null)); return; } failedLogin = true; - //in.readableBytes() != 0 => failed login + //in.readableBytes() != 0 => failed login (wrong credentials, non-existent db, etc), there should be an incoming Exception packet handleFailedLogin(ctx, in); } else if (packet.getClass() == ClickhouseServerException.class) { //easy case: no HELLO packet, just an exception diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java index 924460383d..ce3d8bda4c 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/SimpleQueryCommandCodec.java @@ -113,7 +113,7 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { } if (packet instanceof Throwable) { Throwable t = (Throwable) packet; - LOG.error("unknown packet type or server exception", t); + LOG.debug("unknown packet type or server exception", t); notifyOperationUpdate(false, t); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java index a122f0858b..f325a637c6 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumn.java @@ -1,4 +1,33 @@ package io.vertx.clickhouseclient.binary.impl.codec.columns; -public class BooleanColumn { +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class BooleanColumn extends ClickhouseColumn { + public static final Boolean[] EMPTY_BOOLEAN_ARRAY = new Boolean[0]; + public BooleanColumn(ClickhouseBinaryColumnDescriptor descriptor) { + super(descriptor); + } + + @Override + public ClickhouseColumnReader reader(int nRows) { + return new BooleanColumnReaderAsBitSet(nRows, descriptor); + } + + @Override + public ClickhouseColumnWriter writer(List data, int columnIndex) { + return new BooleanColumnWriter(data, descriptor, columnIndex); + } + + @Override + public Object nullValue() { + return Boolean.FALSE; + } + + @Override + public Object[] emptyArray() { + return EMPTY_BOOLEAN_ARRAY; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java index c28d3985d8..56115864f0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsArray.java @@ -3,41 +3,13 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; -import java.util.BitSet; - - -public class BooleanColumnReader extends ClickhouseColumnReader { +public class BooleanColumnReaderAsArray extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; - protected BooleanColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + protected BooleanColumnReaderAsArray(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } - @Override - protected Object getElementInternal(int rowIdx, Class desired) { - return columnDescriptor.isArray() ? super.getElementInternal(rowIdx, desired) : ((BitSet)itemsArray).get(rowIdx); - } - - protected Object readItems(ClickhouseStreamDataSource in) { - return columnDescriptor.isArray() ? readItemsArray(in) : readItemsBitSet(in); - } - - protected Object readItemsBitSet(ClickhouseStreamDataSource in) { - if (in.readableBytes() >= ELEMENT_SIZE * nRows) { - BitSet data = new BitSet(nRows); - for (int i = 0; i < nRows; ++i) { - if (nullsMap == null || !nullsMap.get(i)) { - data.set(i, in.readBoolean()); - } else { - in.skipBytes(ELEMENT_SIZE); - } - } - return data; - } - return null; - } - - protected Object readItemsArray(ClickhouseStreamDataSource in) { if (in.readableBytes() >= ELEMENT_SIZE * nRows) { boolean[] data = new boolean[nRows]; for (int i = 0; i < nRows; ++i) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java index 4d8337e9a2..0dcb28f2f9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnReaderAsBitSet.java @@ -1,4 +1,49 @@ package io.vertx.clickhouseclient.binary.impl.codec.columns; -public class BooleanColumnReaderAsBitSet { +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; + +import java.util.BitSet; + +public class BooleanColumnReaderAsBitSet extends ClickhouseColumnReader { + protected BooleanColumnReaderAsBitSet(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return ((BitSet)itemsArray).get(rowIdx); + } + + @Override + protected Object readItems(ClickhouseStreamDataSource in) { + if (in.readableBytes() >= BooleanColumnReaderAsArray.ELEMENT_SIZE * nRows) { + BitSet data = new BitSet(nRows); + for (int i = 0; i < nRows; ++i) { + if (nullsMap == null || !nullsMap.get(i)) { + data.set(i, in.readBoolean()); + } else { + in.skipBytes(BooleanColumnReaderAsArray.ELEMENT_SIZE); + } + } + return data; + } + return null; + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == boolean.class) { + return new boolean[dim1][dim2]; + } + return new Boolean[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == boolean.class) { + return new boolean[length]; + } + return new Boolean[length]; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java index d717507cf4..d0a0317c91 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/BooleanColumnWriter.java @@ -1,2 +1,23 @@ -package io.vertx.clickhouseclient.binary.impl.codec.columns;public class BooleanColumnWriter { +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSink; +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +public class BooleanColumnWriter extends ClickhouseColumnWriter { + public BooleanColumnWriter(List data, ClickhouseBinaryColumnDescriptor columnDescriptor, int columnIndex) { + super(data, columnDescriptor, columnIndex); + } + + @Override + protected void serializeDataElement(ClickhouseStreamDataSink sink, Object val) { + sink.writeBoolean((Boolean) val); + } + + @Override + protected void serializeDataNull(ClickhouseStreamDataSink sink) { + sink.writeZero(BooleanColumnReaderAsArray.ELEMENT_SIZE); + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java index 632cd8cd5a..07d33f8902 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumnReader.java @@ -28,6 +28,7 @@ public abstract class ClickhouseColumnReader { protected final int nRows; protected final ClickhouseBinaryColumnDescriptor columnDescriptor; protected BitSet nullsMap; + //TODO: parametrize class with type of itemsArray? protected Object itemsArray; private long bytesConsumed; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java index d1f79a1396..3c6b4b8f18 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/ClickhouseColumns.java @@ -95,20 +95,22 @@ public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String un boolean nullable, boolean isArray, boolean isLowCardinality) { boolean unsigned = spec.startsWith("U"); - //newer versions (at least clickhouse/clickhouse-server:22.9.3.18) return Bool, //older versions (at least yandex/clickhouse-server:20.10.2) return Int8 for bool types - //TODO: maybe change type to JDBCType.BOOLEAN for Bool/Boolean types - if (spec.equals("UInt8") || spec.equals("Int8") || spec.equals("Bool") || spec.equals("Boolean")) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, + //newer versions (at least clickhouse/clickhouse-server:22.9.3.18) return Bool, + if (spec.equals("UInt8") || spec.equals("Int8")) { + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt8ColumnReader.ELEMENT_SIZE, JDBCType.TINYINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -128, unsigned ? 255 : 127); + } else if (spec.equals("Bool") || spec.equals("Boolean")) { + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt8ColumnReader.ELEMENT_SIZE, JDBCType.BOOLEAN, nullable, unsigned, isLowCardinality, + 0, 1); } else if (spec.equals("UInt16") || spec.equals("Int16")) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt16ColumnReader.ELEMENT_SIZE, JDBCType.SMALLINT, nullable, unsigned, isLowCardinality, unsigned ? 0 : -32768, unsigned ? 65535 : 32767); } if (spec.equals("UInt32") || spec.equals("Int32")) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt32ColumnReader.ELEMENT_SIZE, JDBCType.INTEGER, nullable, unsigned, isLowCardinality, unsigned ? 0 : -2147483648L, unsigned ? 4294967295L : 2147483647L); } if (spec.equals("UInt64") || spec.equals("Int64")) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt64ColumnReader.ELEMENT_SIZE, JDBCType.BIGINT, nullable, unsigned, isLowCardinality, unsigned ? BigInteger.ZERO : new BigInteger("-9223372036854775808"), unsigned ? new BigInteger("18446744073709551615") : new BigInteger("9223372036854775807")); } if (spec.equals("Int128")) { @@ -144,7 +146,7 @@ public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, enumBitsSize / 8, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("Nothing".equals(spec)) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt8ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt8ColumnReader.ELEMENT_SIZE, JDBCType.NULL, nullable, false, isLowCardinality, null, null, null, null); } else if ("Float32".equals(spec)) { return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float32ColumnReader.ELEMENT_SIZE, @@ -153,10 +155,10 @@ public static ClickhouseBinaryColumnDescriptor columnDescriptorForSpec(String un return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, Float64ColumnReader.ELEMENT_SIZE, JDBCType.DOUBLE, nullable, false, isLowCardinality, null, null, null, null); } else if ("Date".equals(spec)) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt16ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt16ColumnReader.ELEMENT_SIZE, JDBCType.DATE, nullable, true, isLowCardinality, 0, 65535, null, null); } else if (spec.startsWith(INTERVAL_PREFIX)) { - return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, UInt64ColumnReader.ELEMENT_SIZE, + return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, SignedInt64ColumnReader.ELEMENT_SIZE, JDBCType.OTHER, nullable, false, isLowCardinality, null, null, null, null); } else if ("IPv4".equals(spec)) { return new ClickhouseBinaryColumnDescriptor(name, unparsedSpec, spec, isArray, IPv4Column.ELEMENT_SIZE, @@ -205,12 +207,14 @@ public static ClickhouseColumn columnForSpec(ClickhouseBinaryColumnDescriptor de JDBCType jdbcType = descr.jdbcType(); if (jdbcType == JDBCType.TINYINT || jdbcType == JDBCType.NULL) { return new UInt8Column(descr); + } else if (jdbcType == JDBCType.BOOLEAN) { + return new BooleanColumn(descr); } else if (jdbcType == JDBCType.SMALLINT) { return new UInt16Column(descr); } else if (jdbcType == JDBCType.INTEGER) { return new UInt32Column(descr); } else if (jdbcType == JDBCType.BIGINT) { - if (descr.getElementSize() == UInt64ColumnReader.ELEMENT_SIZE) { + if (descr.getElementSize() == SignedInt64ColumnReader.ELEMENT_SIZE) { return new UInt64Column(descr); } else if (descr.getElementSize() == Int128Column.ELEMENT_SIZE) { return new Int128Column(descr); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java index 3a56b4219b..f2841df23f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateColumnReader.java @@ -17,7 +17,7 @@ import java.time.LocalDate; -public class DateColumnReader extends UInt16ColumnReader { +public class DateColumnReader extends UnsignedInt16ColumnReader { public static final LocalDate[] EMPTY_ARRAY = new LocalDate[0]; public static final LocalDate MIN_VALUE = LocalDate.of(1970, 1, 1); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java index 36736deb2e..aea9935734 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/DateTime64ColumnReader.java @@ -38,7 +38,7 @@ protected Object readItems(ClickhouseStreamDataSource in) { OffsetDateTime[] data = new OffsetDateTime[nRows]; for (int i = 0; i < nRows; ++i) { if (nullsMap == null || !nullsMap.get(i)) { - BigInteger bi = UInt64ColumnReader.unsignedBi(in.readLongLE()); + BigInteger bi = SignedInt64ColumnReader.unsignedBi(in.readLongLE()); long seconds = bi.divide(invTickSize).longValueExact(); long nanos = bi.remainder(invTickSize).longValueExact(); OffsetDateTime dt = Instant.ofEpochSecond(seconds, nanos).atZone(zoneId).toOffsetDateTime(); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java index 8c8ae5762e..b31b0e40d9 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum16ColumnReader.java @@ -17,7 +17,7 @@ import java.util.Map; -public class Enum16ColumnReader extends UInt16ColumnReader implements EnumColumnReader { +public class Enum16ColumnReader extends SignedInt16ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 2; private final EnumColumnDecoder columnRecoder; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java index 13c21f766b..48e61c8619 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/Enum8ColumnReader.java @@ -17,7 +17,7 @@ import java.util.Map; -public class Enum8ColumnReader extends UInt8ColumnReader implements EnumColumnReader { +public class Enum8ColumnReader extends SignedInt8ColumnReader implements EnumColumnReader { public static final int ELEMENT_SIZE = 1; private final EnumColumnDecoder columnRecoder; diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java index 5e5e2c9cc3..b7393559db 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IPv4ColumnReader.java @@ -19,7 +19,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; -public class IPv4ColumnReader extends UInt32ColumnReader { +public class IPv4ColumnReader extends UnsignedInt32ColumnReader { public IPv4ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor) { super(nRows, descriptor); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java index ac745f2bd0..c561d459e7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/IntervalColumnReader.java @@ -17,7 +17,7 @@ import java.time.Duration; -public class IntervalColumnReader extends UInt64ColumnReader { +public class IntervalColumnReader extends SignedInt64ColumnReader { private final Duration multiplier; public IntervalColumnReader(int nRows, ClickhouseBinaryColumnDescriptor descriptor, Duration multiplier) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java index e00984f49a..848efda165 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt16ColumnReader.java @@ -16,10 +16,10 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; -public class UInt16ColumnReader extends ClickhouseColumnReader { +public class SignedInt16ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 2; - public UInt16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + public SignedInt16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @@ -41,25 +41,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - short element = element(rowIdx); - if (columnDescriptor.isUnsigned()) { - return Short.toUnsignedInt(element); - } - return element; + return primitive(rowIdx); } - protected short element(int rowIdx) { + protected short primitive(int rowIdx) { return ((short[]) this.itemsArray)[rowIdx]; } @Override protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { - if (columnDescriptor.isUnsigned()) { - if (desired == int.class) { - return new int[dim1][dim2]; - } - return new Integer[dim1][dim2]; - } if (desired == short.class) { return new short[dim1][dim2]; } @@ -68,12 +58,6 @@ protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { @Override protected Object allocateOneDimArray(Class desired, int length) { - if (columnDescriptor.isUnsigned()) { - if (desired == int.class) { - return new int[length]; - } - return new Integer[length]; - } if (desired == short.class) { return new short[length]; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java index 3fe9a064c1..d0af93c5ea 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt32ColumnReader.java @@ -16,10 +16,10 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; -public class UInt32ColumnReader extends ClickhouseColumnReader { +public class SignedInt32ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 4; - public UInt32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + public SignedInt32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @@ -41,21 +41,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - int element = ((int[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Integer.toUnsignedLong(element); - } - return element; + return primitive(rowIdx); + } + + protected int primitive(int rowIdx) { + return ((int[]) this.itemsArray)[rowIdx]; } @Override protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { - if (columnDescriptor.isUnsigned()) { - if (desired == long.class) { - return new long[dim1][dim2]; - } - return new Long[dim1][dim2]; - } if (desired == int.class) { return new int[dim1][dim2]; } @@ -64,12 +58,6 @@ protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { @Override protected Object allocateOneDimArray(Class desired, int length) { - if (columnDescriptor.isUnsigned()) { - if (desired == long.class) { - return new long[length]; - } - return new Long[length]; - } if (desired == int.class) { return new int[length]; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java index 04123f8400..d02e9bf8c3 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt64ColumnReader.java @@ -15,14 +15,13 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; -import io.vertx.sqlclient.data.Numeric; import java.math.BigInteger; -public class UInt64ColumnReader extends ClickhouseColumnReader { +public class SignedInt64ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 8; - public UInt64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + public SignedInt64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @@ -46,18 +45,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - long element = ((long[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return Numeric.create(unsignedBi(element)); - } - return element; + return primitive(rowIdx); + } + + protected long primitive(int rowIdx) { + return ((long[]) this.itemsArray)[rowIdx]; } @Override protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { - if (columnDescriptor.isUnsigned()) { - return new Numeric[dim1][dim2]; - } if (desired == long.class) { return new long[dim1][dim2]; } @@ -66,9 +62,6 @@ protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { @Override protected Object allocateOneDimArray(Class desired, int length) { - if (columnDescriptor.isUnsigned()) { - return new Numeric[length]; - } if (desired == long.class) { return new long[length]; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java index 6caef1943f..b6b17e06ac 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/SignedInt8ColumnReader.java @@ -16,10 +16,10 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseStreamDataSource; -public class UInt8ColumnReader extends ClickhouseColumnReader { +public class SignedInt8ColumnReader extends ClickhouseColumnReader { public static final int ELEMENT_SIZE = 1; - public UInt8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + public SignedInt8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @@ -41,21 +41,15 @@ protected Object readItems(ClickhouseStreamDataSource in) { @Override protected Object getElementInternal(int rowIdx, Class desired) { - byte element = ((byte[])this.itemsArray)[rowIdx]; - if (columnDescriptor.isUnsigned()) { - return (short)Byte.toUnsignedInt(element); - } - return element; + return primitive(rowIdx); + } + + protected byte primitive(int rowIdx) { + return ((byte[]) this.itemsArray)[rowIdx]; } @Override protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { - if (columnDescriptor.isUnsigned()) { - if (desired == short.class) { - return new short[dim1][dim2]; - } - return new Short[dim1][dim2]; - } if (desired == byte.class) { return new byte[dim1][dim2]; } @@ -64,12 +58,6 @@ protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { @Override protected Object allocateOneDimArray(Class desired, int length) { - if (columnDescriptor.isUnsigned()) { - if (desired == short.class) { - return new short[length]; - } - return new Short[length]; - } if (desired == byte.class) { return new byte[length]; } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java index 6d17ed2b88..ad2053cce7 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt16Column.java @@ -28,7 +28,10 @@ public UInt16Column(ClickhouseBinaryColumnDescriptor descriptor) { @Override public ClickhouseColumnReader reader(int nRows) { - return new UInt16ColumnReader(nRows, descriptor); + if (descriptor.isUnsigned()) { + return new UnsignedInt16ColumnReader(nRows, descriptor); + } + return new SignedInt16ColumnReader(nRows, descriptor); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java index 0815f8323d..42f3b08d1f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt32Column.java @@ -27,7 +27,10 @@ public UInt32Column(ClickhouseBinaryColumnDescriptor descriptor) { @Override public ClickhouseColumnReader reader(int nRows) { - return new UInt32ColumnReader(nRows, descriptor); + if (descriptor.isUnsigned()) { + return new UnsignedInt32ColumnReader(nRows, descriptor); + } + return new SignedInt32ColumnReader(nRows, descriptor); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java index 132f283f60..86ad0064b2 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt64Column.java @@ -30,7 +30,10 @@ public UInt64Column(ClickhouseBinaryColumnDescriptor descriptor) { @Override public ClickhouseColumnReader reader(int nRows) { - return new UInt64ColumnReader(nRows, descriptor); + if (descriptor.isUnsigned()) { + return new UnsignedInt64ColumnReader(nRows, descriptor); + } + return new SignedInt64ColumnReader(nRows, descriptor); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java index 3688b2c195..8eedd98524 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UInt8Column.java @@ -27,7 +27,10 @@ public UInt8Column(ClickhouseBinaryColumnDescriptor descriptor) { @Override public ClickhouseColumnReader reader(int nRows) { - return new UInt8ColumnReader(nRows, descriptor); + if (descriptor.isUnsigned()) { + return new UnsignedInt8ColumnReader(nRows, descriptor); + } + return new SignedInt8ColumnReader(nRows, descriptor); } @Override diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java index 09abc9bedd..de1336ddbf 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt16ColumnReader.java @@ -1,2 +1,30 @@ -package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt16ColumnReader { +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; + +public class UnsignedInt16ColumnReader extends SignedInt16ColumnReader { + public UnsignedInt16ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return Short.toUnsignedInt(primitive(rowIdx)); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == int.class) { + return new int[dim1][dim2]; + } + return new Integer[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == int.class) { + return new int[length]; + } + return new Integer[length]; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java index 539fc5918f..6fcadf746b 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt32ColumnReader.java @@ -1,2 +1,30 @@ -package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt32ColumnReader { +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; + +public class UnsignedInt32ColumnReader extends SignedInt32ColumnReader { + public UnsignedInt32ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return Integer.toUnsignedLong(primitive(rowIdx)); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == long.class) { + return new long[dim1][dim2]; + } + return new Long[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == long.class) { + return new long[length]; + } + return new Long[length]; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java index 2cddbf1447..dc29c136c0 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt64ColumnReader.java @@ -1,2 +1,25 @@ -package io.vertx.clickhouseclient.binary.impl.codec.columns;public class UnsignedInt64ColumnReader { +package io.vertx.clickhouseclient.binary.impl.codec.columns; + +import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; +import io.vertx.sqlclient.data.Numeric; + +public class UnsignedInt64ColumnReader extends SignedInt64ColumnReader { + public UnsignedInt64ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + super(nRows, columnDescriptor); + } + + @Override + protected Object getElementInternal(int rowIdx, Class desired) { + return Numeric.create(unsignedBi(primitive(rowIdx))); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + return new Numeric[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + return new Numeric[length]; + } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java index 175ffb8d3e..e46554d801 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/columns/UnsignedInt8ColumnReader.java @@ -2,14 +2,30 @@ import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryColumnDescriptor; -public class Int8ColumnReader extends UInt8ColumnReader { +public class UnsignedInt8ColumnReader extends SignedInt8ColumnReader { - public Int8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { + public UnsignedInt8ColumnReader(int nRows, ClickhouseBinaryColumnDescriptor columnDescriptor) { super(nRows, columnDescriptor); } @Override protected Object getElementInternal(int rowIdx, Class desired) { - + return (short)Byte.toUnsignedInt(primitive(rowIdx)); + } + + @Override + protected Object[] allocateTwoDimArray(Class desired, int dim1, int dim2) { + if (desired == short.class) { + return new short[dim1][dim2]; + } + return new Short[dim1][dim2]; + } + + @Override + protected Object allocateOneDimArray(Class desired, int length) { + if (desired == short.class) { + return new short[length]; + } + return new Short[length]; } } diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java index d6c578c418..0ab504e99f 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/alltypes/BooleanTest.java @@ -1,2 +1,61 @@ -package io.vertx.clickhouseclient.binary.alltypes;public class BooleanTest { +package io.vertx.clickhouseclient.binary.alltypes; + +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.sqlclient.Tuple; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.List; + +@RunWith(VertxUnitRunner.class) +public class BooleanTest extends AllTypesBase { + public BooleanTest() { + super("boolean", new MyColumnChecker<>(Boolean.class, null, null, null, null)); + } + + @Override + public List createBatch() { + Boolean v1 = Boolean.TRUE; + Boolean v2 = Boolean.TRUE; + Boolean v3 = Boolean.TRUE; + Boolean v4 = Boolean.FALSE; + Boolean v5 = Boolean.FALSE; + Boolean v6 = Boolean.TRUE; + Boolean nv = Boolean.FALSE; + Boolean mn = Boolean.FALSE; + Boolean mx = Boolean.TRUE; + + return Arrays.asList( + // id simple_t nullable_t array_t array3_t nullable_array_t nullable_array3_t simple_lc_t nullable_lc_t array_lc_t array3_lc_t nullable_array_lc_t nullable_array3_lc_t + Tuple.of((byte)1, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, null, mn}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)2, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, null, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)3, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mn}, new Boolean[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mn}, new Boolean[][][]{{{mn, mn, null}, {mn, mn, null}, {null}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)4, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mn}, new Boolean[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Boolean[]{mn, mn}, new Boolean[][][]{{{mn, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mn}, new Boolean[][][]{{{mn, null, mn}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)5, mx, mx, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}}, mx, mx, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, null, mx}, {mx, mx, null}, {}}, {{mn, mn}, {mn, null, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)6, mn, mn, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}}, mn, mn, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{null}, {}, {}}} ), + Tuple.of((byte)7, mx, mx, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)8, mn, mn, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}}, mn, mn, new Boolean[]{mx, mx}, new Boolean[][][]{{{mx, mx}, {mx, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mx, null, mx}, new Boolean[][][]{{{mx, mx}, {mx, null, mx, null}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {null}, {}}} ), + Tuple.of((byte)9, mx, mx, new Boolean[]{mn, mx}, new Boolean[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mx}, new Boolean[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mx, mx, new Boolean[]{mn, mx}, new Boolean[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mx}, new Boolean[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)10, mn, mn, new Boolean[]{mn, mx}, new Boolean[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mx}, new Boolean[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, mn, mn, new Boolean[]{mn, mx}, new Boolean[][][]{{{mn, mx}, {mn, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{mn, null, mx}, new Boolean[][][]{{{mn, mx, null}, {mn, null, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)11, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)12, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{}, new Boolean[][][]{{{}, {}, {}}, {{}, {}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)13, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{}, new Boolean[][][]{{{}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{}, new Boolean[][][]{{{}}} ), + Tuple.of((byte)14, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{}, new Boolean[][][]{{{}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{}, new Boolean[][][]{{{}}} ), + Tuple.of((byte)15, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{null}, new Boolean[][][]{{{null}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{null}, new Boolean[][][]{{{null}}} ), + Tuple.of((byte)16, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{null}, new Boolean[][][]{{{null}}}, v2, v3, new Boolean[]{}, new Boolean[][][]{{{}}}, new Boolean[]{null}, new Boolean[][][]{{{null}}} ), + Tuple.of((byte)17, v2, v3, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)18, v2, v3, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{nv, nv}, {nv, nv}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)19, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)20, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{v2, nv, mn}, {v3, mn, nv, mx}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv}, new Boolean[][][]{{{v2, nv, mn, null}, {v3, mn, nv, mx}, {}}, {{mn, mn, null}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)21, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)22, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v2, v3, new Boolean[]{nv, mn, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, mn, null, mx}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, null, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)23, nv, null, new Boolean[]{v3, v1, nv, mx, v4}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v3, v1, null, nv, mx, v3}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Boolean[]{v3, v1, nv, mx, v4}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, v2, null, v3, v2}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5, null}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)24, nv, null, new Boolean[]{v3, v1, nv, mx, v4}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v3, v1, null, nv, mx, v3}, new Boolean[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, null, new Boolean[]{v3, v1, nv, mx, v4}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, v2, null, v3, v2}, new Boolean[][][]{{{nv, mn, mx, null, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)25, v1, v1, new Boolean[]{v1, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v3, nv, null}, new Boolean[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v1, v1, new Boolean[]{v1, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v2, nv, null}, new Boolean[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)26, nv, nv, new Boolean[]{nv, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, null, v4}, new Boolean[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, nv, nv, new Boolean[]{nv, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{nv, null, nv}, new Boolean[][][]{{{nv, null, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)27, v6, v5, new Boolean[]{v4, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v3, nv, null}, new Boolean[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Boolean[]{v4, nv, nv}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v2, nv, null}, new Boolean[][][]{{{nv, mn, null, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)28, v6, v5, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Boolean[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Boolean[][][]{{{nv, mn, mx, v1, null, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ), + Tuple.of((byte)29, v6, v5, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Boolean[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, v6, v5, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6}, new Boolean[][][]{{{nv, mn, mx, v1, v2, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}}, new Boolean[]{v1, nv, mn, mx, v2, v3, v4, v5, v6, null}, new Boolean[][][]{{{nv, mn, mx, v1, v2, null, v3, v4, v5}, {mn, mn}, {}}, {{mn, mn}, {mn, mn}, {}}, {{}, {}, {}}} ) + ); + } } diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java index aa4993bac6..4eae21fad0 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeDecodeTest.java @@ -60,11 +60,6 @@ protected void initConnector() { connector = ClientConfig.CONNECT.connect(vertx, rule.options()); } - @Test - public void testBoolean(TestContext ctx) { - testDecodeGeneric(ctx, "test_boolean", Byte.class, JDBCType.TINYINT, (byte) 1); - } - @Test public void testSelectAll(TestContext ctx) { //no time support @@ -99,8 +94,8 @@ public void testSelectAll(TestContext ctx) { ctx.assertEquals(Numeric.create(999.99), row.getValue("test_numeric")); ctx.assertEquals(Numeric.create(12345), row.get(Numeric.class, 6)); ctx.assertEquals(Numeric.create(12345), row.getValue("test_decimal")); - ctx.assertEquals((byte)1, row.getValue(7)); - ctx.assertEquals((byte)1, row.getValue("test_boolean")); + ctx.assertEquals(true, row.getValue(7)); + ctx.assertEquals(true, row.getValue("test_boolean")); ctx.assertEquals("testchar", row.getString(8)); ctx.assertEquals("testchar", row.getString("test_char")); ctx.assertEquals("testvarchar", row.getString(9)); diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java index e7164c73f1..e538c7c912 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryDataTypeEncodeTest.java @@ -78,21 +78,24 @@ public void testTime(TestContext ctx) { } @Test - public void testBoolean(TestContext ctx) { - testEncodeGeneric(ctx, "test_boolean", Byte.class, null, (byte)0); + @Override + public void testDouble(TestContext ctx) { + //Double.MIN_VALUE does not work here (due to 4.9E-324 != 0.0 error) + //22.9.1.2603: Fails with 'java.lang.AssertionError: Not equals : 4.9E-322 != 4.84E-322' + //No way to test with 22.9.1.2603: docker container is broken due to a 'Poco::Exception. Code: 1000, e.code() = 0, Not found: https_port (version 22.9.1.2603 (official build))' + //22.8.6.71 (and earlier) is fine + testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) Double.MIN_VALUE * 2); } @Test - public void testDouble(TestContext ctx) { - //Double.MIN_VALUE is too small here - //TODO: Is 22.9.1.2603 broken? Fails with 'java.lang.AssertionError: Not equals : 4.9E-322 != 4.84E-322' - //22.9.1.2603 docker container is broken due to a 'Poco::Exception. Code: 1000, e.code() = 0, Not found: https_port (version 22.9.1.2603 (official build))' - //22.8.6.71 (and earlier) is fine - testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) 4.9e-322); + @Override + public void testFloat4(TestContext ctx) { + testEncodeGeneric(ctx, "test_float_4", Float.class, Row::getFloat, -2.402823e38F); } //no time support, copied and modified test from parent @Test + @Override public void testNullValues(TestContext ctx) { connector.connect(ctx.asyncAssertSuccess(conn -> { conn diff --git a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java index 344fbf6d4e..695b7b3bab 100644 --- a/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java +++ b/vertx-clickhouse-binary-client/src/test/java/io/vertx/clickhouseclient/binary/tck/ClickhouseBinaryTextDataTypeDecodeTest.java @@ -60,9 +60,4 @@ protected void initConnector() { public void testTime(TestContext ctx) { //no time support } - - @Test - public void testBoolean(TestContext ctx) { - testDecodeGeneric(ctx, "test_boolean", Byte.class, (byte)1); - } } diff --git a/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py b/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py index 8326f78aab..4b96fd3ea5 100755 --- a/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py +++ b/vertx-clickhouse-binary-client/src/test/python/gen_all_types_tables.py @@ -1,6 +1,7 @@ #! /usr/bin/python3 -ELEMENTARY_TYPES = ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', +ELEMENTARY_TYPES = [ 'Boolean', + 'Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int128', 'String', {'table': 'FixedString', 'type': 'FixedString(12)'}, 'DateTime', {'table': 'datetime64', 'type': 'DateTime64(3)'}, 'Date', 'UUID', {'table': 'Decimal32', 'type': 'Decimal32(4)'}, diff --git a/vertx-clickhouse-binary-client/src/test/resources/init.sql b/vertx-clickhouse-binary-client/src/test/resources/init.sql index ac72d61c21..6c463b08ad 100644 --- a/vertx-clickhouse-binary-client/src/test/resources/init.sql +++ b/vertx-clickhouse-binary-client/src/test/resources/init.sql @@ -8,8 +8,7 @@ CREATE TABLE immutable ( id Int32, message varchar(2048) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); INSERT INTO immutable (id, message) VALUES (1, 'fortune: No such file or directory'); INSERT INTO immutable (id, message) VALUES (2, 'A computer scientist is someone who fixes things that aren''t broken.'); @@ -31,8 +30,7 @@ CREATE TABLE mutable ( id Int32, val varchar(2048) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); -- basic data type table -- -- used by TCK @@ -51,15 +49,14 @@ CREATE TABLE basicdatatype test_char Nullable(FixedString(8)), test_varchar Nullable(String(20)), test_date Nullable(DATE) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_float_4, test_float_8, test_numeric, test_decimal, test_boolean, test_char, test_varchar, test_date) VALUES (1, 32767, 2147483647, 9223372036854775807, 3.40282E38, 1.7976931348623157E308, 999.99, 12345, - 1, 'testchar', 'testvarchar', + true, 'testchar', 'testvarchar', '2019-01-01'); INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_float_4, test_float_8, test_numeric, test_decimal, @@ -67,7 +64,7 @@ INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_date) VALUES (2, 32767, 2147483647, 9223372036854775807, 3.40282E38, 1.7976931348623157E308, 999.99, 12345, - 1, 'testchar', 'testvarchar', + true, 'testchar', 'testvarchar', '2019-01-01'); INSERT INTO basicdatatype(id, test_int_2, test_int_4, test_int_8, test_float_4, test_float_8, test_numeric, test_decimal, @@ -86,8 +83,7 @@ CREATE TABLE collector_test test_float Float32, test_double Float64, test_varchar VARCHAR(20) -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); INSERT INTO collector_test VALUES (1, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'HELLO,WORLD'); INSERT INTO collector_test VALUES (2, 32767, 2147483647, 9223372036854775807, 123.456, 1.234567, 'hello,world'); @@ -105,8 +101,7 @@ CREATE TABLE Fortune ( id Int32, message String -) engine = MergeTree() - ORDER BY (id); +) engine = Memory(); INSERT INTO Fortune (id, message) VALUES (1, 'fortune: No such file or directory'); @@ -139,6 +134,22 @@ VALUES (12, 'フレームワークのベンチマーク'); --almost all possible supported types tables(maybe except experimental ones) set allow_suspicious_low_cardinality_types=true; set allow_experimental_bigint_types=true; +DROP TABLE IF EXISTS vertx_test_boolean; +CREATE TABLE vertx_test_boolean ( + id Int8, + simple_t Boolean, + nullable_t Nullable(Boolean), + array_t Array(Boolean), + array3_t Array(Array(Array(Boolean))), + nullable_array_t Array(Nullable(Boolean)), + nullable_array3_t Array(Array(Array(Nullable(Boolean)))), + simple_lc_t LowCardinality(Boolean), + nullable_lc_t LowCardinality(Nullable(Boolean)), + array_lc_t Array(LowCardinality(Boolean)), + array3_lc_t Array(Array(Array(LowCardinality(Boolean)))), + nullable_array_lc_t Array(LowCardinality(Nullable(Boolean))), + nullable_array3_lc_t Array(Array(Array(LowCardinality(Nullable(Boolean))))) +) engine = Memory(); DROP TABLE IF EXISTS vertx_test_int8; CREATE TABLE vertx_test_int8 ( id Int8, From a3c95d0a90db4bf381c35fa6e4e6418899c3da31 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sat, 4 Feb 2023 22:10:28 +0300 Subject: [PATCH 173/176] finalize initial DB switching machinery --- .../impl/codec/ClickhouseBinaryEncoder.java | 26 ++++++++++++++++--- .../binary/impl/codec/InitCommandCodec.java | 7 +++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index 7ed34ccff5..902d407734 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -19,6 +19,7 @@ import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.sqlclient.impl.QueryResultHandler; import io.vertx.sqlclient.impl.command.*; import java.util.ArrayDeque; @@ -28,6 +29,10 @@ public class ClickhouseBinaryEncoder extends ChannelOutboundHandlerAdapter { private final ArrayDeque> inflight; private final ClickhouseBinarySocketConnection conn; + private final boolean enableExtraSwitchDbCommand = true; + private boolean useExtraSwitchDbCommand; + private boolean sentSwitchDbCommand; + private boolean finishedInit; private ChannelHandlerContext chctx; @@ -73,9 +78,24 @@ void write(CommandBase cmd) { codec.completionHandler = resp -> { ClickhouseBinaryCommandCodec c = inflight.poll(); resp.cmd = (CommandBase) c.cmd; - chctx.fireChannelRead(resp); - if (c instanceof InitCommandCodec) { + boolean initCodecCommand = c instanceof InitCommandCodec; + if (initCodecCommand) { conn.setInitCommandCodec((InitCommandCodec) c); + String db = conn.initCommandCodec().cmd.database(); + useExtraSwitchDbCommand = enableExtraSwitchDbCommand && !(db == null || db.isEmpty()); + } + if (useExtraSwitchDbCommand && initCodecCommand) { + InitCommandCodec initCommandCodec = (InitCommandCodec) c; + LOG.info("sending USE db command"); + String query = "USE " + initCommandCodec.cmd.database() + ";"; + write(new SimpleQueryCommand(query, false, false, QueryCommandBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER)); + sentSwitchDbCommand = true; + } else { + if (sentSwitchDbCommand && !finishedInit) { + resp.cmd = (CommandBase)conn.initCommandCodec().cmd; + finishedInit = true; + } + chctx.fireChannelRead(resp); } }; inflight.add(codec); @@ -84,7 +104,7 @@ void write(CommandBase cmd) { private ClickhouseBinaryCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { - return new InitCommandCodec((InitCommand) cmd); + return new InitCommandCodec((InitCommand) cmd, useExtraSwitchDbCommand); } else if (cmd instanceof SimpleQueryCommand) { return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd, conn); } else if (cmd instanceof CloseConnectionCommand) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index d5a36c70f7..28ebd834f4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -32,8 +32,11 @@ public class InitCommandCodec extends ClickhouseBinaryCommandCodec Date: Sat, 4 Feb 2023 22:23:37 +0300 Subject: [PATCH 174/176] enable non-compressed connections again --- .../binary/impl/ClickhouseBinaryConnectionFactory.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java index 0588683f3f..2d07a98c3d 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinaryConnectionFactory.java @@ -54,9 +54,6 @@ private LZ4Factory lz4FactoryForName(String name) { } else if ("lz4_unsafe".equals(name)) { return LZ4Factory.unsafeInstance(); } - if (!"I_know_uncompressed_connections_are_broken_and_want_to_continue_anyway".equals(name)) { - throw new IllegalArgumentException("uncompressed connections are broken"); - } return null; } From df256751e7682908db2764f6f6c36818e4713fa8 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sun, 5 Feb 2023 18:27:34 +0300 Subject: [PATCH 175/176] remove traces of old Exception-after-HELLO(Metadata) handling code --- .../ClickhouseBinarySocketConnection.java | 13 ------ .../impl/codec/ClickhouseBinaryCodec.java | 2 +- .../impl/codec/ClickhouseBinaryDecoder.java | 17 +------- .../impl/codec/ClickhouseBinaryEncoder.java | 13 +++--- .../binary/impl/codec/InitCommandCodec.java | 42 +++---------------- 5 files changed, 15 insertions(+), 72 deletions(-) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java index 02e8a36935..d1dc08595f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/ClickhouseBinarySocketConnection.java @@ -15,14 +15,11 @@ import io.netty.channel.ChannelPipeline; import io.vertx.clickhouseclient.binary.impl.codec.ClickhouseBinaryCodec; -import io.vertx.clickhouseclient.binary.impl.codec.InitCommandCodec; -import io.vertx.core.Handler; import io.vertx.core.Promise; import io.vertx.core.impl.EventLoopContext; import io.vertx.core.net.impl.NetSocketInternal; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SocketConnectionBase; -import io.vertx.sqlclient.impl.command.CommandResponse; import io.vertx.sqlclient.impl.command.InitCommand; import net.jpountz.lz4.LZ4Factory; @@ -38,8 +35,6 @@ public class ClickhouseBinarySocketConnection extends SocketConnectionBase { private String ourCursorId; private final LZ4Factory lz4Factory; - private InitCommandCodec initCommandCodec; - public ClickhouseBinarySocketConnection(NetSocketInternal socket, boolean cachePreparedStatements, int preparedStatementCacheSize, @@ -58,14 +53,6 @@ public void init() { super.init(); } - public void setInitCommandCodec(InitCommandCodec initCommandCodec) { - this.initCommandCodec = initCommandCodec; - } - - public InitCommandCodec initCommandCodec() { - return initCommandCodec; - } - void sendStartupMessage(String username, String password, String database, Map properties, Promise completionHandler) { InitCommand cmd = new InitCommand(this, username, password, database, properties); schedule(context, cmd).onComplete(completionHandler); diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java index 63cfcfeda8..782258d088 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryCodec.java @@ -33,7 +33,7 @@ public class ClickhouseBinaryCodec extends CombinedChannelDuplexHandler(); ClickhouseBinaryEncoder encoder = new ClickhouseBinaryEncoder(inflight, conn); - ClickhouseBinaryDecoder decoder = new ClickhouseBinaryDecoder(inflight, conn); + ClickhouseBinaryDecoder decoder = new ClickhouseBinaryDecoder(inflight); init(decoder, encoder); } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java index dc7057affd..eddd9e08bc 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryDecoder.java @@ -16,35 +16,20 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; -import io.vertx.clickhouseclient.binary.impl.ClickhouseBinarySocketConnection; -import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; import java.util.ArrayDeque; import java.util.List; public class ClickhouseBinaryDecoder extends ByteToMessageDecoder { - private static final Logger LOG = LoggerFactory.getLogger(ClickhouseBinaryDecoder.class); - private final ArrayDeque> inflight; - private final ClickhouseBinarySocketConnection conn; - public ClickhouseBinaryDecoder(ArrayDeque> inflight, ClickhouseBinarySocketConnection conn) { + public ClickhouseBinaryDecoder(ArrayDeque> inflight) { this.inflight = inflight; - this.conn = conn; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { ClickhouseBinaryCommandCodec codec = inflight.peek(); - if (codec == null) { - InitCommandCodec initCommandCodec = conn.initCommandCodec(); - if (initCommandCodec != null) { - LOG.info("handling failed login after server HELLO packet"); - initCommandCodec.handleFailedLogin(ctx, in); - } - return; - } codec.decode(ctx, in); } } diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index 902d407734..f81e9de066 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -29,7 +29,8 @@ public class ClickhouseBinaryEncoder extends ChannelOutboundHandlerAdapter { private final ArrayDeque> inflight; private final ClickhouseBinarySocketConnection conn; - private final boolean enableExtraSwitchDbCommand = true; + + private InitCommand initCommand; private boolean useExtraSwitchDbCommand; private boolean sentSwitchDbCommand; private boolean finishedInit; @@ -80,9 +81,9 @@ void write(CommandBase cmd) { resp.cmd = (CommandBase) c.cmd; boolean initCodecCommand = c instanceof InitCommandCodec; if (initCodecCommand) { - conn.setInitCommandCodec((InitCommandCodec) c); - String db = conn.initCommandCodec().cmd.database(); - useExtraSwitchDbCommand = enableExtraSwitchDbCommand && !(db == null || db.isEmpty()); + this.initCommand = ((InitCommandCodec) c).cmd; + String db = this.initCommand.database(); + useExtraSwitchDbCommand = !(db == null || db.isEmpty()); } if (useExtraSwitchDbCommand && initCodecCommand) { InitCommandCodec initCommandCodec = (InitCommandCodec) c; @@ -92,7 +93,7 @@ void write(CommandBase cmd) { sentSwitchDbCommand = true; } else { if (sentSwitchDbCommand && !finishedInit) { - resp.cmd = (CommandBase)conn.initCommandCodec().cmd; + resp.cmd = (CommandBase)initCommand; finishedInit = true; } chctx.fireChannelRead(resp); @@ -104,7 +105,7 @@ void write(CommandBase cmd) { private ClickhouseBinaryCommandCodec wrap(CommandBase cmd) { if (cmd instanceof InitCommand) { - return new InitCommandCodec((InitCommand) cmd, useExtraSwitchDbCommand); + return new InitCommandCodec((InitCommand) cmd); } else if (cmd instanceof SimpleQueryCommand) { return new SimpleQueryCommandCodec<>((SimpleQueryCommand) cmd, conn); } else if (cmd instanceof CloseConnectionCommand) { diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java index 28ebd834f4..67500c595f 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/InitCommandCodec.java @@ -30,13 +30,8 @@ public class InitCommandCodec extends ClickhouseBinaryCommandCodec failed login (wrong credentials, non-existent db, etc), there should be an incoming Exception packet - handleFailedLogin(ctx, in); + completionHandler.handle(CommandResponse.success(null)); } else if (packet.getClass() == ClickhouseServerException.class) { - //easy case: no HELLO packet, just an exception ClickhouseServerException exc = (ClickhouseServerException)packet; completionHandler.handle(CommandResponse.failure(exc)); } else { @@ -99,18 +83,4 @@ void decode(ChannelHandlerContext ctx, ByteBuf in) { packetReader = null; } } - - void handleFailedLogin(ChannelHandlerContext ctx, ByteBuf in) { - if (packetReader.packetType() == ServerPacketType.HELLO) { - //traces of the previous HELLO packet, need to recreate the packetReader - packetReader = new PacketReader(encoder.getConn().getDatabaseMetaData(), fullClientName, cmd.properties(), encoder.getConn().lz4Factory()); - } - ClickhouseServerException exc = (ClickhouseServerException) packetReader.receivePacket(ctx.alloc(), in); - if (exc != null) { - if (LOG.isInfoEnabled()) { - LOG.info("handling failed login: " + exc); - } - completionHandler.handle(CommandResponse.failure(exc)); - } - } } From fbee08eb376f5f89f1c573a3d0d02b84a2006980 Mon Sep 17 00:00:00 2001 From: Vladimir V Date: Sun, 5 Feb 2023 23:46:51 +0300 Subject: [PATCH 176/176] simplify DB switch logic --- .../impl/codec/ClickhouseBinaryEncoder.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java index f81e9de066..1f6afe07c4 100644 --- a/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java +++ b/vertx-clickhouse-binary-client/src/main/java/io/vertx/clickhouseclient/binary/impl/codec/ClickhouseBinaryEncoder.java @@ -31,9 +31,7 @@ public class ClickhouseBinaryEncoder extends ChannelOutboundHandlerAdapter { private final ClickhouseBinarySocketConnection conn; private InitCommand initCommand; - private boolean useExtraSwitchDbCommand; - private boolean sentSwitchDbCommand; - private boolean finishedInit; + private DbSwitchState dbSwitchState; private ChannelHandlerContext chctx; @@ -80,21 +78,22 @@ void write(CommandBase cmd) { ClickhouseBinaryCommandCodec c = inflight.poll(); resp.cmd = (CommandBase) c.cmd; boolean initCodecCommand = c instanceof InitCommandCodec; + InitCommandCodec initCommandCodec = initCodecCommand ? (InitCommandCodec) c : null; if (initCodecCommand) { - this.initCommand = ((InitCommandCodec) c).cmd; - String db = this.initCommand.database(); - useExtraSwitchDbCommand = !(db == null || db.isEmpty()); + this.initCommand = initCommandCodec.cmd; + String dbName = initCommand.database(); + dbSwitchState = (dbName == null || dbName.isEmpty()) ? null : DbSwitchState.NeedDbSwitch; } - if (useExtraSwitchDbCommand && initCodecCommand) { - InitCommandCodec initCommandCodec = (InitCommandCodec) c; - LOG.info("sending USE db command"); + if (dbSwitchState == DbSwitchState.NeedDbSwitch && initCodecCommand) { String query = "USE " + initCommandCodec.cmd.database() + ";"; + LOG.info("sending '" + query + "' command"); + write(new SimpleQueryCommand(query, false, false, QueryCommandBase.NULL_COLLECTOR, QueryResultHandler.NOOP_HANDLER)); - sentSwitchDbCommand = true; + dbSwitchState = DbSwitchState.SentSwitchCommand; } else { - if (sentSwitchDbCommand && !finishedInit) { + if (dbSwitchState == DbSwitchState.SentSwitchCommand) { resp.cmd = (CommandBase)initCommand; - finishedInit = true; + dbSwitchState = DbSwitchState.SwitchedDb; } chctx.fireChannelRead(resp); } @@ -146,4 +145,10 @@ private void deliverError(CommandBase cmd, Throwable ex) { resp.cmd = cmd; chctx.fireChannelRead(resp); } + + private enum DbSwitchState { + NeedDbSwitch, + SentSwitchCommand, + SwitchedDb + } }