Esempio n. 1
0
            public async ValueTask SendQuery(
                ClientQueryMessage.Builder messageBuilder,
                IReadOnlyCollection <IClickHouseTableWriter>?tables,
                bool async,
                CancellationToken cancellationToken)
            {
                CheckDisposed();

                var writer = _client._writer;

                try
                {
                    var settings = _client._settings;

                    messageBuilder.ClientName         = settings.ClientName;
                    messageBuilder.ClientVersion      = settings.ClientVersion;
                    messageBuilder.Host               = settings.Host;
                    messageBuilder.RemoteAddress      = ((IPEndPoint)_client._client.Client.RemoteEndPoint).ToString();
                    messageBuilder.ProtocolRevision   = Math.Min(Revisions.CurrentRevision, _client.ServerInfo.Revision);
                    messageBuilder.CompressionEnabled = _client._settings.Compress;

                    var queryMessage = messageBuilder.Build();
                    if (queryMessage.Settings != null)
                    {
                        if (_client.ServerInfo.Revision < Revisions.MinRevisionWithSettingsSerializedAsStrings)
                        {
                            throw new ClickHouseException(
                                      ClickHouseErrorCodes.ProtocolRevisionNotSupported,
                                      $"Query settings are not supported. Current protocol revision is {_client.ServerInfo.Revision}. Minimal required protocol revision is {Revisions.MinRevisionWithSettingsSerializedAsStrings}.");
                        }
                    }

                    queryMessage.Write(writer);

                    if (tables != null)
                    {
                        foreach (var table in tables)
                        {
                            WriteTable(table);
                        }
                    }

                    WriteTable(ClickHouseEmptyTableWriter.Instance);
                }
                catch (Exception ex)
                {
                    writer.Discard();
                    throw ClickHouseHandledException.Wrap(ex);
                }

                await WithCancellationToken(cancellationToken, ct => writer.Flush(async, ct));
            }
Esempio n. 2
0
            public async ValueTask SendTable(IClickHouseTableWriter table, bool async, CancellationToken cancellationToken)
            {
                CheckDisposed();

                try
                {
                    WriteTable(table);
                }
                catch (Exception ex)
                {
                    _client._writer.Discard();
                    throw ClickHouseHandledException.Wrap(ex);
                }

                await WithCancellationToken(cancellationToken, ct => _client._writer.Flush(async, ct));
            }
Esempio n. 3
0
            public async ValueTask SendQuery(
                string query,
                IReadOnlyCollection <IClickHouseTableWriter>?tables,
                bool async,
                CancellationToken cancellationToken)
            {
                CheckDisposed();

                var writer = _client._writer;

                try
                {
                    var settings = _client._settings;

                    var queryMessage = new ClientQueryMessage.Builder
                    {
                        ClientName         = settings.ClientName,
                        ClientVersion      = settings.ClientVersion,
                        Host               = settings.Host,
                        RemoteAddress      = ((IPEndPoint)_client._client.Client.RemoteEndPoint).ToString(),
                        ProtocolRevision   = Revisions.CurrentRevision,
                        QueryKind          = QueryKind.InitialQuery,
                        Query              = query,
                        CompressionEnabled = _client._settings.Compress
                    }.Build();

                    queryMessage.Write(writer);

                    if (tables != null)
                    {
                        foreach (var table in tables)
                        {
                            WriteTable(table);
                        }
                    }

                    WriteTable(ClickHouseEmptyTableWriter.Instance);
                }
                catch (Exception ex)
                {
                    await writer.Discard(async, CancellationToken.None);

                    throw ClickHouseHandledException.Wrap(ex);
                }

                await WithCancellationToken(cancellationToken, ct => writer.Flush(async, ct));
            }