Пример #1
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
            var itemSize = sizeof(ushort);
            var bytes    = formatter.ReadBytes(itemSize * rows);
            var xdata    = new ushort[rows];

            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            Data = xdata.Select(x => UnixTimeBase.AddDays(x)).ToArray();
        }
Пример #2
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
            var itemSize = Marshal.SizeOf(typeof(Guid));
            var bytes    = formatter.ReadBytes(itemSize * rows);
            var xdata    = new Guid[rows];

            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            Data = xdata.ToArray();
        }
Пример #3
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
            var itemSize = Marshal.SizeOf <uint>();
            var bytes    = formatter.ReadBytes(itemSize * rows);
            var xdata    = new uint[rows];

            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            Data = xdata.Select(x => UnixTimeBase.AddSeconds(x)).ToArray();
        }
Пример #4
0
        public override void Write(ProtocolFormatter formatter, int rows)
        {
            Debug.Assert(Rows == rows, "Row count mismatch!");
            var itemSize = Marshal.SizeOf <T>();
            var bytes    = new byte[itemSize * rows];

            Buffer.BlockCopy(Data, 0, bytes, 0, itemSize * rows);
            formatter.WriteBytes(bytes);
        }
Пример #5
0
 public override void Write(ProtocolFormatter formatter, int rows)
 {
     Debug.Assert(Rows == rows, "Row count mismatch!");
     foreach (var d in Data)
     {
         var arr = GUIDtoUUID(d.ToByteArray());
         formatter.WriteBytes(arr);
     }
 }
Пример #6
0
 internal void Write(ProtocolFormatter formatter)
 {
     foreach (var settingValue in _settings)
     {
         formatter.WriteString(settingValue.Key);
         settingValue.Value.Write(formatter);
     }
     formatter.WriteString("");
 }
Пример #7
0
        public void Open()
        {
            if (_tcpClient != null)
            {
                throw new InvalidOperationException("Connection already open.");
            }
            _tcpClient = new TcpClient();
            _tcpClient.ReceiveTimeout = ConnectionSettings.SocketTimeout;
            _tcpClient.SendTimeout    = ConnectionSettings.SocketTimeout;
            //_tcpClient.NoDelay = true;
            _tcpClient.ReceiveBufferSize = ConnectionSettings.BufferSize;
            _tcpClient.SendBufferSize    = ConnectionSettings.BufferSize;
#if NETCOREAPP11
            _tcpClient.ConnectAsync(ConnectionSettings.Host, ConnectionSettings.Port).Wait();
#elif NETSTANDARD15
            _tcpClient.ConnectAsync(ConnectionSettings.Host, ConnectionSettings.Port).ConfigureAwait(false).GetAwaiter().GetResult();
#else
            _tcpClient.Connect(ConnectionSettings.Host, ConnectionSettings.Port);
#endif
            _netStream = new NetworkStream(_tcpClient.Client);

            if (!ConnectionSettings.UseSSL)
            {
                _bufferedStream = new BufferedStream(_netStream);
                _stream         = new UnclosableStream(_bufferedStream);
            }
            else
            {
                var sslStream = new SslStream(_netStream,
                                              false,
                                              new RemoteCertificateValidationCallback(ValidateServerCertificate),
                                              null
                                              );
                try
                {
                    sslStream.AuthenticateAsClient(ConnectionSettings.Host);
                }
                catch (Exception ex)
                {
                    _tcpClient.Close();
                    throw ex;
                }
                //_stream = new UnclosableStream(sslStream);
                _stream = sslStream;
            }
            //_stream = new UnclosableStream(_bufferedStream);

            /*_reader=new BinaryReader(new UnclosableStream(_stream));
            *  _writer=new BinaryWriter(new UnclosableStream(_stream));*/
            var ci = new ClientInfo();
            ci.InitialAddress = ci.CurrentAddress = _tcpClient.Client.RemoteEndPoint;
            ci.PopulateEnvironment();

            Formatter = new ProtocolFormatter(_stream, ci, () => _tcpClient.Client.Poll(ConnectionSettings.SocketTimeout, SelectMode.SelectRead));
            Formatter.Handshake(ConnectionSettings);
        }
        private string AsSubstitute(object val)
        {
            if (DbType == DbType.String
#if !NETCOREAPP11
                || DbType == DbType.AnsiString || DbType == DbType.StringFixedLength || DbType == DbType.AnsiStringFixedLength
#endif
                || DbType == 0 && val is string)
            {
                if (!(val is string) && val is IEnumerable)
                {
                    return(string.Join(",", ((IEnumerable)val).Cast <object>().Select(AsSubstitute)));
                }
                else
                {
                    return(ProtocolFormatter.EscapeStringValue(val.ToString()));
                }
            }
            if (DbType == DbType.DateTime
#if !NETCOREAPP11
                || DbType == DbType.DateTime2 || DbType == DbType.DateTime2
#endif
                || DbType == 0 && val is DateTime)
            {
                return($"'{(DateTime) val:yyyy-MM-dd HH:mm:ss}'");
            }
            if (DbType == DbType.Date)
            {
                return($"'{(DateTime) val:yyyy-MM-dd}'");
            }
            if (DbType == DbType.Guid)
            {
                return($"'{(Guid)val}'");
            }
            if (DbType != 0
#if !NETCOREAPP11
                && DbType != DbType.Object
#endif
                && !(val is string) && val is IEnumerable)
            {
                return(string.Join(",", ((IEnumerable)val).Cast <object>().Select(AsSubstitute)));
            }
            if ((DbType == 0
#if !NETCOREAPP11
                 || DbType == DbType.Object
#endif
                 ) && !(val is string) && val is IEnumerable)
            {
                return("[" + string.Join(",", ((IEnumerable)val).Cast <object>().Select(AsSubstitute)) + "]");
            }

            if (val is IFormattable formattable)
            {
                return(formattable.ToString(null, CultureInfo.InvariantCulture));
            }
            return(val.ToString());
        }
Пример #9
0
        internal void Write(ProtocolFormatter formatter, int rows)
        {
            formatter.WriteString(Name);
            formatter.WriteString(Type.AsClickHouseType());

            if (rows > 0)
            {
                Type.Write(formatter, rows);
            }
        }
Пример #10
0
        public override void Write(ProtocolFormatter formatter, int rows)
        {
            Debug.Assert(Rows == rows, "Row count mismatch!");
            var multiplier = Math.Pow(10, _precision);

            foreach (var d in Data)
            {
                formatter.WriteBytes(BitConverter.GetBytes((ulong)((d - UnixTimeBase).TotalSeconds * multiplier)));
            }
        }
Пример #11
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
            Data = new string[rows];
            var bytes = formatter.ReadBytes((int)(rows * Length));

            for (var i = 0; i < rows; i++)
            {
                Data[i] = Encoding.UTF8.GetString(bytes, (int)(i * Length), (int)Length);
            }
        }
Пример #12
0
        internal void Write(ProtocolFormatter formatter, int rows)
        {
            formatter.WriteString(Name);
            formatter.WriteString(Type.AsClickHouseType(ClickHouseTypeUsageIntent.ColumnInfo));

            if (rows > 0)
            {
                Type.Write(formatter, rows);
            }
        }
Пример #13
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
#if FRAMEWORK20 || FRAMEWORK40 || FRAMEWORK45
            var itemSize = Marshal.SizeOf(typeof(T));
#else
            var itemSize = Marshal.SizeOf <T>();
#endif
            var bytes = formatter.ReadBytes(itemSize * rows);
            Data = new T[rows];
            Buffer.BlockCopy(bytes, 0, Data, 0, itemSize * rows);
        }
Пример #14
0
 public override void Write(ProtocolFormatter formatter, int rows)
 {
     Debug.Assert(Rows == rows, "Row count mismatch!");
     foreach (var d in Data)
     {
         var premultiplied = new BigInteger(d * _exponent);
         if (_byteLength == 4)
         {
             formatter.WriteBytes(BitConverter.GetBytes((int)premultiplied));
         }
         else if (_byteLength == 8)
         {
             formatter.WriteBytes(BitConverter.GetBytes((long)premultiplied));
         }
         else
         {
             var neg = premultiplied < 0;
             if (neg)
             {
                 premultiplied = -premultiplied;
             }
             var bytes = premultiplied.ToByteArray();
             if (neg)
             {
                 var ntzPassed = false;
                 for (var i = 0; i < _byteLength; i++)
                 {
                     var cb = i < bytes.Length ? bytes[i] : (byte)0;
                     if (ntzPassed)
                     {
                         cb = (byte)~cb;
                     }
                     else
                     {
                         var ntz = NTZ(cb);
                         if (ntz < 8)
                         {
                             ntzPassed = true;
                             cb        = (byte)(((cb >> (ntz + 1)) << (ntz + 1)) + 1);
                         }
                     }
                     formatter.WriteByte(cb);
                 }
             }
             else
             {
                 for (var i = 0; i < _byteLength; i++)
                 {
                     formatter.WriteByte(i < bytes.Length ? bytes[i] : (byte)0);
                 }
             }
         }
     }
 }
Пример #15
0
        public override void Write(ProtocolFormatter formatter, int rows)
        {
            Debug.Assert(Rows == rows, "Row count mismatch!");
#if FRAMEWORK20 || FRAMEWORK40 || FRAMEWORK45
            var itemSize = Marshal.SizeOf(typeof(T));
#else
            var itemSize = Marshal.SizeOf <T>();
#endif
            var bytes = new byte[itemSize * rows];
            Buffer.BlockCopy(Data, 0, bytes, 0, itemSize * rows);
            formatter.WriteBytes(bytes);
        }
Пример #16
0
        public void Close()
        {
            /*if (_reader != null)
             * {
             *  _reader.Close();
             *  _reader.Dispose();
             *  _reader = null;
             * }
             * if (_writer != null)
             * {
             *  _writer.Close();
             *  _writer.Dispose();
             *  _writer = null;
             * }*/
            if (_stream != null)
            {
#if !NETSTANDARD15 && !NETCOREAPP11
                _stream.Close();
#endif
                _stream.Dispose();
                _stream = null;
            }
            if (_bufferedStream != null)
            {
#if !NETSTANDARD15 && !NETCOREAPP11
                _bufferedStream.Close();
#endif
                _bufferedStream.Dispose();
                _bufferedStream = null;
            }
            if (_netStream != null)
            {
#if !NETSTANDARD15 && !NETCOREAPP11
                _netStream.Close();
#endif
                _netStream.Dispose();
                _netStream = null;
            }
            if (_tcpClient != null)
            {
#if !NETSTANDARD15 && !NETCOREAPP11
                _tcpClient.Close();
#else
                _tcpClient.Dispose();
#endif
                _tcpClient = null;
            }
            if (Formatter != null)
            {
                Formatter.Close();
                Formatter = null;
            }
        }
 public override void ValueFromConst(Parser.ValueType val)
 {
     if (val.TypeHint == Parser.ConstType.String)
     {
         var uvalue = ProtocolFormatter.UnescapeStringValue(val.StringValue);
         Data = new[] { uvalue };
     }
     else
     {
         Data = new[] { val.StringValue };
     }
 }
Пример #18
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
#if FRAMEWORK20 || FRAMEWORK40 || FRAMEWORK45
            var itemSize = sizeof(ushort);
#else
            var itemSize = Marshal.SizeOf <ushort>();
#endif
            var bytes = formatter.ReadBytes(itemSize * rows);
            var xdata = new ushort[rows];
            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            Data = xdata.Select(x => UnixTimeBase.AddDays(x)).ToArray();
        }
Пример #19
0
        public static ColumnInfo Read(ProtocolFormatter formatter, int rows)
        {
            var rv = new ColumnInfo();

            rv.Name = formatter.ReadString();
            rv.Type = ColumnType.Create(formatter.ReadString());
            if (rows > 0)
            {
                rv.Type.Read(formatter, rows);
            }
            return(rv);
        }
Пример #20
0
 public override void ValueFromConst(string value, Parser.ConstType typeHint)
 {
     if (typeHint == Parser.ConstType.String)
     {
         Data = new[] { (T)Convert.ChangeType(ProtocolFormatter.UnescapeStringValue(value), typeof(T)) }
     }
     ;
     else
     {
         Data = new[] { (T)Convert.ChangeType(value, typeof(T)) }
     };
 }
Пример #21
0
 public override void ValueFromConst(Parser.ValueType val)
 {
     if (val.TypeHint == Parser.ConstType.String)
     {
         Data = new[] { DateTime.ParseExact(ProtocolFormatter.UnescapeStringValue(val.StringValue), "yyyy-MM-dd HH:mm:ss", null, DateTimeStyles.AssumeUniversal) }
     }
     ;
     else
     {
         throw new InvalidCastException("Cannot convert numeric value to DateTime.");
     }
 }
Пример #22
0
 public override void ValueFromConst(Parser.ValueType val)
 {
     if (val.TypeHint == Parser.ConstType.String)
     {
         var uvalue = ProtocolFormatter.UnescapeStringValue(val.StringValue);
         Data = new[] { Values.First(x => x.Item1 == uvalue).Item2 };
     }
     else
     {
         Data = new[] { int.Parse(val.StringValue) }
     };
 }
Пример #23
0
 public override void ValueFromConst(string value, Parser.ConstType typeHint)
 {
     if (typeHint == Parser.ConstType.String)
     {
         var uvalue = ProtocolFormatter.UnescapeStringValue(value);
         Data = new[] { uvalue };
     }
     else
     {
         Data = new[] { value }
     };
 }
Пример #24
0
 public override void Write(ProtocolFormatter formatter, int rows)
 {
     Debug.Assert(Rows == rows, "Row count mismatch!");
     if (_byteLength <= 8)
     {
         var exponent = (decimal)Math.Pow(10, (int)_precision);
         foreach (var d in DataDecimal)
         {
             var premultiplied = new BigInteger(d * exponent);
             if (_byteLength == 4)
             {
                 formatter.WriteBytes(BitConverter.GetBytes((int)premultiplied));
             }
             else if (_byteLength == 8)
             {
                 formatter.WriteBytes(BitConverter.GetBytes((long)premultiplied));
             }
         }
     }
     else
     {
         if (_doubleFallback)
         {
             var doubleExponent = Math.Pow(10, _precision);
             foreach (var d in DataDouble)
             {
                 var premultiplied = new BigInteger(d * doubleExponent);
                 var filler        = premultiplied < 0 ? (byte)0xff : (byte)0;
                 var bytes         = premultiplied.ToByteArray();
                 for (var i = 0; i < _byteLength; i++)
                 {
                     formatter.WriteByte(i < bytes.Length ? bytes[i] : filler);
                 }
             }
         }
         else
         {
             var exponent        = _precision <= 28 ? BigInteger.One : BigInteger.Pow(10, (int)_precision - 28);
             var decimalExponent = (decimal)Math.Pow(10, Math.Min(_precision, 28));
             foreach (var d in DataDecimal)
             {
                 var premultiplied = new BigInteger(d * decimalExponent) * exponent;
                 var filler        = premultiplied < 0 ? (byte)0xff : (byte)0;
                 var bytes         = premultiplied.ToByteArray();
                 for (var i = 0; i < _byteLength; i++)
                 {
                     formatter.WriteByte(i < bytes.Length ? bytes[i] : filler);
                 }
             }
         }
     }
 }
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
#if CLASSIC_FRAMEWORK
            var itemSize = sizeof(ulong);
#else
            var itemSize = Marshal.SizeOf <ulong>();
#endif
            var bytes = formatter.ReadBytes(itemSize * rows);
            var xdata = new ulong[rows];
            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            var divisor = Math.Pow(10, -_precision);
            Data = xdata.Select(x => ParseValue(x, divisor)).ToArray();
        }
Пример #26
0
        internal override void Read(ProtocolFormatter formatter, int rows)
        {
#if FRAMEWORK20 || FRAMEWORK40 || FRAMEWORK45
            var itemSize = sizeof(ulong);
#else
            var itemSize = Marshal.SizeOf <ulong>();
#endif
            var bytes = formatter.ReadBytes(itemSize * rows);
            var xdata = new ulong[rows];
            Buffer.BlockCopy(bytes, 0, xdata, 0, itemSize * rows);
            var divisor = Math.Pow(10, -_precision);
            Data = xdata.Select(x => UnixTimeBase.AddSeconds(x * divisor)).ToArray();
        }
Пример #27
0
 public override void Write(ProtocolFormatter formatter, int rows)
 {
     foreach (var d in Data)
     {
         var guidBytes = d.ToByteArray();
         formatter.WriteBytes(guidBytes, 6, 2);
         formatter.WriteBytes(guidBytes, 4, 2);
         formatter.WriteBytes(guidBytes, 0, 4);
         for (var b = 15; b >= 8; b--)
         {
             formatter.WriteByte(guidBytes[b]);
         }
     }
 }
 public override void ValueFromConst(Parser.ValueType val)
 {
     switch (val.TypeHint)
     {
         case Parser.ConstType.String:
         {
             var uvalue = ProtocolFormatter.UnescapeStringValue(val.StringValue);
             Data = new[] {uvalue};
             break;
         }
         default:
             Data = new[] {val.StringValue};
             break;
     }
 }
Пример #29
0
        public override void ValueFromConst(Parser.ValueType val)
        {
            switch (val.TypeHint)
            {
            case Parser.ConstType.String:
                Data = new[]
                {
                    DateTime.ParseExact(ProtocolFormatter.UnescapeStringValue(val.StringValue),
                                        "yyyy-MM-dd", null, DateTimeStyles.AssumeUniversal)
                };
                break;

            default:
                throw new InvalidCastException("Cannot convert numeric value to Date.");
            }
        }
Пример #30
0
 public override void Write(ProtocolFormatter formatter, int rows)
 {
     Debug.Assert(Rows == rows, "Row count mismatch!");
     if (BaseSize == 8)
     {
         new SimpleColumnType <byte>(Data.Select(x => (byte)x).ToArray()).Write(formatter, rows);
     }
     else if (BaseSize == 16)
     {
         new SimpleColumnType <short>(Data.Select(x => (short)x).ToArray()).Write(formatter, rows);
     }
     else
     {
         throw new NotSupportedException($"Enums with base size {BaseSize} are not supported.");
     }
 }