コード例 #1
0
        internal void RunQuery(string sql,
                               QueryProcessingStage stage,
                               QuerySettings settings,
                               ClientInfo clientInfo,
                               IEnumerable <Block> xtables,
                               bool noData)
        {
            if (_connectionSettings.LogQueryToStdout)
            {
                Console.WriteLine("===========================================");
                Console.WriteLine(sql);
            }
            WriteUInt((int)ClientMessageType.Query);
            WriteString("");
            if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithClientInfo)
            {
                if (clientInfo == null)
                {
                    clientInfo = ClientInfo;
                }
                else
                {
                    clientInfo.QueryKind = QueryKind.Secondary;
                }

                clientInfo.Write(this);
            }

            var compressionMethod = _compressor != null ? _compressor.Method : CompressionMethod.Lz4;

            if (settings != null)
            {
                settings.Write(this);
                compressionMethod = settings.Get <CompressionMethod>("compression_method");
            }
            else
            {
                WriteString("");
            }

            WriteUInt((int)stage);
            WriteUInt(_connectionSettings.Compress ? (int)compressionMethod : 0);
            WriteString(sql);
            _baseStream.Flush();

            if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithTemporaryTables && noData)
            {
                new Block().Write(this);
                _baseStream.Flush();
            }

            if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithTemporaryTables)
            {
                SendBlocks(xtables);
            }
        }
コード例 #2
0
        internal void RunQuery(string sql,
                               QueryProcessingStage stage,
                               QuerySettings settings,
                               ClientInfo clientInfo,
                               IEnumerable <Block> xtables,
                               bool noData)
        {
            try
            {
                if (_connectionSettings.Trace)
                {
                    Trace.WriteLine($"Executing sql \"{sql}\"", "ClickHouse.Ado");
                }
                WriteUInt((int)ClientMessageType.Query);
                WriteString("");
                if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithClientInfo)
                {
                    if (clientInfo == null)
                    {
                        clientInfo = ClientInfo;
                    }
                    else
                    {
                        clientInfo.QueryKind = QueryKind.Secondary;
                    }

                    clientInfo.Write(this, _connectionSettings.ClientName);
                }

                var compressionMethod = _compressor != null ? _compressor.Method : CompressionMethod.Lz4;
                if (settings != null)
                {
                    settings.Write(this);
                    compressionMethod = settings.Get <CompressionMethod>("compression_method");
                }
                else
                {
                    WriteString("");
                }

                WriteUInt((int)stage);
                WriteUInt(_connectionSettings.Compress ? (int)compressionMethod : 0);
                WriteString(sql);
                _baseStream.Flush();

                if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithTemporaryTables && noData)
                {
                    new Block().Write(this);
                    _baseStream.Flush();
                }

                if (ServerInfo.Build >= ProtocolCaps.DbmsMinRevisionWithTemporaryTables)
                {
                    SendBlocks(xtables);
                }
            }
            catch (Exception e)
            {
                _owner.MaybeSetBroken(e);
                throw;
            }
        }