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(); }
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(); }
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(); }
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); }
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); } }
internal void Write(ProtocolFormatter formatter) { foreach (var settingValue in _settings) { formatter.WriteString(settingValue.Key); settingValue.Value.Write(formatter); } formatter.WriteString(""); }
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()); }
internal void Write(ProtocolFormatter formatter, int rows) { formatter.WriteString(Name); formatter.WriteString(Type.AsClickHouseType()); if (rows > 0) { Type.Write(formatter, rows); } }
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))); } }
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); } }
internal void Write(ProtocolFormatter formatter, int rows) { formatter.WriteString(Name); formatter.WriteString(Type.AsClickHouseType(ClickHouseTypeUsageIntent.ColumnInfo)); if (rows > 0) { Type.Write(formatter, rows); } }
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); }
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); } } } } }
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); }
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 }; } }
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(); }
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); }
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)) } }; }
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."); } }
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) } }; }
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 } }; }
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(); }
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(); }
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; } }
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."); } }
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."); } }