Exemple #1
0
        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);
        }
Exemple #3
0
 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");
 }
Exemple #4
0
        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);
                }
            }
        }
Exemple #5
0
 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));
     }
 }
Exemple #6
0
 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);
        }
Exemple #8
0
 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");
 }
Exemple #9
0
        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));
            }
        }
Exemple #12
0
        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();
                }
            }
        }
Exemple #13
0
        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");
        }
Exemple #16
0
 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));
        }
Exemple #18
0
 public byte[] ConvertTo(object value)
 {
     TypeInterpreter.CheckArgument <byte[]>(value);
     return((byte[])value);
 }
Exemple #19
0
 internal byte[] ConvertFromObject(int i, object o)
 {
     return(TypeInterpreter.InvCqlConvert(o, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo));
 }
Exemple #20
0
 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);
        }
Exemple #22
0
 internal object ConvertToObject(int i, byte[] buffer)
 {
     return(TypeInterpreter.CqlConvert(buffer, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo));
 }