public static byte[] InvConvertFromSet(IColumnInfo type_info, object value) { var listType = GetTypeFromSet(type_info); CheckArgument(listType, value); var list_typecode = (type_info as SetColumnInfo).KeyTypeCode; var list_typeinfo = (type_info as SetColumnInfo).KeyTypeInfo; List <byte[]> bufs = new List <byte[]>(); int cnt = 0; int bsize = 2; foreach (var obj in (value as IEnumerable)) { var buf = TypeInterpreter.InvCqlConvert(obj, list_typecode, list_typeinfo); bufs.Add(buf); bsize += buf.Length; cnt++; } var ret = new byte[bsize]; var cntbuf = Int16ToBytes((short)cnt); int idx = 0; Buffer.BlockCopy(cntbuf, 0, ret, 0, 2); idx += 2; foreach (var buf in bufs) { Buffer.BlockCopy(buf, 0, ret, idx, buf.Length); idx += buf.Length; } return(ret); }
public byte[] ConvertTo(object value) { TypeInterpreter.CheckArgument <decimal>(value); int[] bits = decimal.GetBits((decimal)value); var bytes = new byte[16]; int scale = (bits[3] >> 16) & 31; byte[] scaleB = BitConverter.GetBytes(scale); byte[] lowB = BitConverter.GetBytes(bits[0]); byte[] midB = BitConverter.GetBytes(bits[1]); byte[] highB = BitConverter.GetBytes(bits[2]); Array.Copy(lowB, 0, bytes, 0, 4); Array.Copy(midB, 0, bytes, 4, 4); Array.Copy(highB, 0, bytes, 8, 4); Array.Copy(scaleB, 0, bytes, 12, 4); if ((decimal)value < 0) { for (int i = 0; i < 12; i++) { bytes[i] = (byte)~bytes[i]; } bytes[0] += 1; } Array.Reverse(bytes); return(bytes); }
public static object ConvertFromSet(IColumnInfo type_info, byte[] value) { if (type_info is SetColumnInfo) { var list_typecode = (type_info as SetColumnInfo).KeyTypeCode; var list_typeinfo = (type_info as SetColumnInfo).KeyTypeInfo; var value_type = TypeInterpreter.GetTypeFromCqlType(list_typecode, list_typeinfo); int count = BytesToInt16(value, 0); int idx = 2; var openType = typeof(List <>); var listType = openType.MakeGenericType(value_type); object ret = Activator.CreateInstance(listType); var addM = listType.GetMethod("Add"); for (int i = 0; i < count; i++) { var val_buf_len = BytesToInt16(value, idx); idx += 2; byte[] val_buf = new byte[val_buf_len]; Buffer.BlockCopy(value, idx, val_buf, 0, val_buf_len); idx += val_buf_len; addM.Invoke(ret, new object[] { TypeInterpreter.CqlConvert(val_buf, list_typecode, list_typeinfo) }); } return(ret); } throw new DriverInternalError("Invalid ColumnInfo"); }
internal RowSetMetadata(BEBinaryReader reader) { var coldat = new List <ColumnDesc>(); var flags = (FlagBits)reader.ReadInt32(); var numberOfcolumns = reader.ReadInt32(); this._rawColumns = new ColumnDesc[numberOfcolumns]; string gKsname = null; string gTablename = null; if ((flags & FlagBits.GlobalTablesSpec) == FlagBits.GlobalTablesSpec) { gKsname = reader.ReadString(); gTablename = reader.ReadString(); } for (int i = 0; i < numberOfcolumns; i++) { var col = new ColumnDesc(); if ((flags & FlagBits.GlobalTablesSpec) != FlagBits.GlobalTablesSpec) { col.Keyspace = reader.ReadString(); col.Table = reader.ReadString(); } else { col.Keyspace = gKsname; col.Table = gTablename; } col.Name = reader.ReadString(); col.TypeCode = (ColumnTypeCode)reader.ReadUInt16(); col.TypeInfo = GetColumnInfo(reader, col.TypeCode); coldat.Add(col); } _rawColumns = coldat.ToArray(); _columns = new CqlColumn[_rawColumns.Length]; _columnIdxes = new Dictionary <string, int>(); for (int i = 0; i < _rawColumns.Length; i++) { _columns[i] = new CqlColumn() { Name = _rawColumns[i].Name, Keyspace = _rawColumns[i].Keyspace, Table = _rawColumns[i].Table, Type = TypeInterpreter.GetDefaultTypeFromCqlType( _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo), TypeCode = _rawColumns[i].TypeCode, TypeInfo = _rawColumns[i].TypeInfo }; //TODO: what with full long column names? if (!_columnIdxes.ContainsKey(_rawColumns[i].Name)) { _columnIdxes.Add(_rawColumns[i].Name, i); } } }
internal AbstractResponse(ResponseFrame frame) { BEBinaryReader = new BEBinaryReader(frame); if ((frame.FrameHeader.Flags & 0x02) == 0x02) { var buffer = new byte[16]; BEBinaryReader.Read(buffer, 0, 16); TraceID = new Guid(TypeInterpreter.GuidShuffle(buffer)); } }
public void WriteToBatch(BEBinaryWriter wb) { wb.WriteByte(1); //prepared query wb.WriteShortBytes(_id); wb.WriteUInt16((ushort)_queryProtocolOptions.Values.Length); for (int i = 0; i < _metadata.Columns.Length; i++) { byte[] bytes = TypeInterpreter.InvCqlConvert(_queryProtocolOptions.Values[i]); wb.WriteBytes(bytes); } }
public static byte[] InvConvertFromMap(IColumnInfo type_info, object value) { var dicType = GetTypeFromList(type_info); CheckArgument(dicType, value); var key_typecode = (type_info as MapColumnInfo).KeyTypeCode; var key_typeinfo = (type_info as MapColumnInfo).KeyTypeInfo; var value_typecode = (type_info as MapColumnInfo).ValueTypeCode; var value_typeinfo = (type_info as MapColumnInfo).ValueTypeInfo; var key_type = TypeInterpreter.GetTypeFromCqlType(key_typecode, key_typeinfo); var value_type = TypeInterpreter.GetTypeFromCqlType(value_typecode, value_typeinfo); List <byte[]> bufs = new List <byte[]>(); int cnt = 0; int bsize = 2; var kvoType = typeof(KeyValuePair <,>); var kvType = kvoType.MakeGenericType(key_type, value_type); var key_prop = kvType.GetProperty("Key"); var value_prop = kvType.GetProperty("Value"); foreach (var kv in (value as IEnumerable)) { { var obj = key_prop.GetValue(kv, new object[] { }); var buf = TypeInterpreter.InvCqlConvert(obj, key_typecode, key_typeinfo); bufs.Add(buf); bsize += buf.Length; } { var obj = value_prop.GetValue(kv, new object[] { }); var buf = TypeInterpreter.InvCqlConvert(obj, value_typecode, value_typeinfo); bufs.Add(buf); bsize += buf.Length; } cnt++; } var ret = new byte[bsize]; var cntbuf = Int16ToBytes((short)cnt); // short or ushort ? int idx = 0; Buffer.BlockCopy(cntbuf, 0, ret, 0, 2); idx += 2; foreach (var buf in bufs) { Buffer.BlockCopy(buf, 0, ret, idx, buf.Length); idx += buf.Length; } return(ret); }
public static Type GetTypeFromSet(IColumnInfo type_info) { if (type_info is SetColumnInfo) { var list_typecode = (type_info as SetColumnInfo).KeyTypeCode; var list_typeinfo = (type_info as SetColumnInfo).KeyTypeInfo; var value_type = TypeInterpreter.GetTypeFromCqlType(list_typecode, list_typeinfo); var openType = typeof(IEnumerable <>); var listType = openType.MakeGenericType(value_type); return(listType); } throw new DriverInternalError("Invalid ColumnInfo"); }
internal void Write(BEBinaryWriter wb, ConsistencyLevel?extConsistency, byte protocolVersion) { //protocol v1: <id><n><value_1>....<value_n><consistency> //protocol v2: <id><consistency><flags>[<n><value_1>...<value_n>][<result_page_size>][<paging_state>][<serial_consistency>] if ((ushort)(extConsistency ?? Consistency) >= (ushort)ConsistencyLevel.Serial) { throw new InvalidQueryException("Serial consistency specified as a non-serial one."); } if (protocolVersion > 1) { wb.WriteUInt16((ushort)(extConsistency ?? Consistency)); wb.WriteByte((byte)Flags); } if ((Flags & QueryFlags.Values) == QueryFlags.Values) { wb.WriteUInt16((ushort)Values.Length); for (int i = 0; i < Values.Length; i++) { var bytes = TypeInterpreter.InvCqlConvert(Values[i]); wb.WriteBytes(bytes); } } if (protocolVersion == 1) { wb.WriteUInt16((ushort)(extConsistency ?? Consistency)); } else { if ((Flags & QueryFlags.PageSize) == QueryFlags.PageSize) { wb.WriteInt32(PageSize); } if ((Flags & QueryFlags.WithPagingState) == QueryFlags.WithPagingState) { wb.WriteBytes(PagingState); } if ((Flags & QueryFlags.WithSerialConsistency) == QueryFlags.WithSerialConsistency) { if ((ushort)(SerialConsistency) < (ushort)ConsistencyLevel.Serial) { throw new InvalidQueryException("Non-serial consistency specified as a serial one."); } wb.WriteUInt16((ushort)SerialConsistency); } } }
public override IEnumerable <ResponseFrame> Process(byte[] buffer, int size, Stream stream, IProtoBufComporessor compressor) { Init(buffer, size); while (AreMore()) { byte b = GetByte(); switch (ByteIdx) { case 0: TmpFrameHeader.Version = b; break; case 1: TmpFrameHeader.Flags = b; break; case 2: TmpFrameHeader.StreamId = b; break; case 3: TmpFrameHeader.Opcode = b; break; case 4: { TmpFrameHeader.Len[0] = b; } break; case 5: TmpFrameHeader.Len[1] = b; break; case 6: TmpFrameHeader.Len[2] = b; break; case 7: TmpFrameHeader.Len[3] = b; _bodyLen = TypeInterpreter.BytesToInt32(TmpFrameHeader.Len, 0); TmpFrame = TmpFrameHeader.MakeFrame(new BufferedProtoBuf(_bodyLen, ((TmpFrameHeader.Flags & 0x01) == 0x01) ? compressor : null)); yield return(TmpFrame); break; default: { TmpFrame.RawStream.WriteByte(b); } break; } ByteIdx++; if (ByteIdx - 8 >= _bodyLen) { ByteIdx = 0; _bodyLen = int.MaxValue; TmpFrameHeader = new FrameHeader(); } } }
internal AbstractResponse(ResponseFrame frame) { BEBinaryReader = new BEBinaryReader(frame); if (frame.FrameHeader.Version != ResponseFrame.ProtocolResponseVersionByte) { throw new ProtocolErrorException("Invalid protocol version"); } if ((frame.FrameHeader.Flags & 0x02) == 0x02) { var buffer = new byte[16]; BEBinaryReader.Read(buffer, 0, 16); TraceID = new Guid(TypeInterpreter.GuidShuffle(buffer)); } }
virtual public IEnumerable <ResponseFrame> Process(byte[] buffer, int size, Stream stream, IProtoBufComporessor compressor) { Init(buffer, size); int bodyLen = int.MaxValue; while (AreMore()) { byte b = GetByte(); switch (ByteIdx) { case 0: TmpFrameHeader.Version = b; break; case 1: TmpFrameHeader.Flags = b; break; case 2: TmpFrameHeader.StreamId = b; break; case 3: TmpFrameHeader.Opcode = b; break; case 4: { TmpFrameHeader.Len[0] = b; } break; case 5: TmpFrameHeader.Len[1] = b; break; case 6: TmpFrameHeader.Len[2] = b; break; case 7: TmpFrameHeader.Len[3] = b; bodyLen = TypeInterpreter.BytesToInt32(TmpFrameHeader.Len, 0); TmpFrame = TmpFrameHeader.MakeFrame(new StreamProtoBuf(stream, ((TmpFrameHeader.Flags & 0x01) == 0x01) ? compressor : null)); yield return(TmpFrame); break; default: throw new DriverInternalError("Invalid state"); } ByteIdx++; if (ByteIdx >= FrameHeader.Size) { ByteIdx = 0; TmpFrameHeader = new FrameHeader(); } } }
public ResponseFrame MakeFrame(IProtoBuf stream) { var bodyLen = TypeInterpreter.BytesToInt32(Len, 0); if (MaxFrameSize - 8 < bodyLen) { throw new DriverInternalError("Frame length mismatch"); } var frame = new ResponseFrame() { FrameHeader = this, RawStream = stream }; return(frame); }
public static Type GetDefaultTypeFromMap(IColumnInfo type_info) { if (type_info is MapColumnInfo) { var key_typecode = (type_info as MapColumnInfo).KeyTypeCode; var key_typeinfo = (type_info as MapColumnInfo).KeyTypeInfo; var value_typecode = (type_info as MapColumnInfo).ValueTypeCode; var value_typeinfo = (type_info as MapColumnInfo).ValueTypeInfo; var key_type = TypeInterpreter.GetDefaultTypeFromCqlType(key_typecode, key_typeinfo); var value_type = TypeInterpreter.GetDefaultTypeFromCqlType(value_typecode, value_typeinfo); var openType = typeof(IDictionary <,>); var dicType = openType.MakeGenericType(key_type, value_type); return(dicType); } throw new DriverInternalError("Invalid ColumnInfo"); }
public static object ConvertFromMap(IColumnInfo type_info, byte[] value) { if (type_info is MapColumnInfo) { var key_typecode = (type_info as MapColumnInfo).KeyTypeCode; var key_typeinfo = (type_info as MapColumnInfo).KeyTypeInfo; var value_typecode = (type_info as MapColumnInfo).ValueTypeCode; var value_typeinfo = (type_info as MapColumnInfo).ValueTypeInfo; var key_type = TypeInterpreter.GetTypeFromCqlType(key_typecode, key_typeinfo); var value_type = TypeInterpreter.GetTypeFromCqlType(value_typecode, value_typeinfo); int count = BytesToInt16(value, 0); int idx = 2; var openType = typeof(SortedDictionary <,>); var dicType = openType.MakeGenericType(key_type, value_type); object ret = Activator.CreateInstance(dicType); var addM = dicType.GetMethod("Add"); for (int i = 0; i < count; i++) { var key_buf_len = BytesToInt16(value, idx); idx += 2; byte[] key_buf = new byte[key_buf_len]; Buffer.BlockCopy(value, idx, key_buf, 0, key_buf_len); idx += key_buf_len; var value_buf_len = BytesToInt16(value, idx); idx += 2; byte[] value_buf = new byte[value_buf_len]; Buffer.BlockCopy(value, idx, value_buf, 0, value_buf_len); idx += value_buf_len; addM.Invoke(ret, new object[] { TypeInterpreter.CqlConvert(key_buf, key_typecode, key_typeinfo), TypeInterpreter.CqlConvert(value_buf, value_typecode, value_typeinfo) }); } return(ret); } throw new DriverInternalError("Invalid ColumnInfo"); }
internal object ConvertToObject(int i, byte[] buffer, Type cSharpType = null) { return(TypeInterpreter.CqlConvert(buffer, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo, cSharpType)); }
public object ConvertFrom(byte[] decimalBuf) { if (decimalBuf.Length > 16) { throw new ArgumentOutOfRangeException( "this java.math.BigDecimal is too big to fit into System.Decimal. Think about using other TypeAdapter for java.math.BigDecimal (e.g. J#, IKVM,...)"); } var scaleBytes = new byte[4]; for (int i = 0; i < 4; i++) { scaleBytes[i] = decimalBuf[i]; } var bigIntBytes = new byte[decimalBuf.Length - 4]; for (int i = 0; i < bigIntBytes.Length; i++) { bigIntBytes[i] = decimalBuf[i + 4]; } bool isNegative = (bigIntBytes[0] & 0x80) != 0; var bytes = new byte[12]; if (isNegative) { for (int i = 0; i < 12; i++) { bytes[i] = 0xff; } } int offset = 12 - bigIntBytes.Length; for (int i = 0; i < bigIntBytes.Length; i++) { bytes[offset + i] = bigIntBytes[i]; } var lowB = new byte[4]; var midB = new byte[4]; var highB = new byte[4]; Array.Copy(bytes, 8, lowB, 0, 4); Array.Copy(bytes, 4, midB, 0, 4); Array.Copy(bytes, 0, highB, 0, 4); Array.Reverse(lowB); Array.Reverse(midB); Array.Reverse(highB); uint low = BitConverter.ToUInt32(lowB, 0); uint mid = BitConverter.ToUInt32(midB, 0); uint high = BitConverter.ToUInt32(highB, 0); var scale = (byte)TypeInterpreter.BytesToInt32(scaleBytes, 0); if (isNegative) { low = ~low; mid = ~mid; high = ~high; high += (mid == 0xFFFFFFF && low == 0xFFFFFFF) ? 1u : 0; mid += (low == 0xFFFFFFF) ? 1u : 0; low += 1; } return(new decimal((int)low, (int)mid, (int)high, isNegative, scale)); }
public byte[] ConvertTo(object value) { TypeInterpreter.CheckArgument <byte[]>(value); return((byte[])value); }
internal byte[] ConvertFromObject(int i, object o) { return(TypeInterpreter.InvCqlConvert(o, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo)); }
public byte[] ConvertTo(object value) { TypeInterpreter.CheckArgument <BigInteger>(value); return(((BigInteger)value).ToByteArray()); }
public static byte[] InvConvertFromMap(IColumnInfo type_info, object value) { var dicType = GetDefaultTypeFromMap(type_info); CheckArgument(dicType, value); var key_typecode = (type_info as MapColumnInfo).KeyTypeCode; var key_typeinfo = (type_info as MapColumnInfo).KeyTypeInfo; var value_typecode = (type_info as MapColumnInfo).ValueTypeCode; var value_typeinfo = (type_info as MapColumnInfo).ValueTypeInfo; var key_type = TypeInterpreter.GetDefaultTypeFromCqlType(key_typecode, key_typeinfo); var value_type = TypeInterpreter.GetDefaultTypeFromCqlType(value_typecode, value_typeinfo); List <byte[]> kbufs = new List <byte[]>(); List <byte[]> vbufs = new List <byte[]>(); int cnt = 0; int bsize = 2; var key_prop = dicType.GetProperty("Keys"); var value_prop = dicType.GetProperty("Values"); foreach (var obj in key_prop.GetValue(value, new object[] { }) as IEnumerable) { var buf = TypeInterpreter.InvCqlConvert(obj, key_typecode, key_typeinfo); kbufs.Add(buf); bsize += 2; //size of key bsize += buf.Length; cnt++; } foreach (var obj in value_prop.GetValue(value, new object[] { }) as IEnumerable) { var buf = TypeInterpreter.InvCqlConvert(obj, value_typecode, value_typeinfo); vbufs.Add(buf); bsize += 2; //size of value bsize += buf.Length; } var ret = new byte[bsize]; var cntbuf = Int16ToBytes((short)cnt); // short or ushort ? int idx = 0; Buffer.BlockCopy(cntbuf, 0, ret, 0, 2); idx += 2; for (int i = 0; i < cnt; i++) { { var buf = kbufs[i]; var keyval_buf_size = Int16ToBytes((short)buf.Length); Buffer.BlockCopy(keyval_buf_size, 0, ret, idx, 2); idx += 2; Buffer.BlockCopy(buf, 0, ret, idx, buf.Length); idx += buf.Length; } { var buf = vbufs[i]; var keyval_buf_size = Int16ToBytes((short)buf.Length); Buffer.BlockCopy(keyval_buf_size, 0, ret, idx, 2); idx += 2; Buffer.BlockCopy(buf, 0, ret, idx, buf.Length); idx += buf.Length; } } return(ret); }
internal object ConvertToObject(int i, byte[] buffer) { return(TypeInterpreter.CqlConvert(buffer, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo)); }