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)); }
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)); }
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)); }