示例#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);
        }
示例#2
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);
        }
示例#4
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);
                }
            }
        }
示例#5
0
 internal byte[] ConvertFromObject(int i, object o)
 {
     return(TypeInterpreter.InvCqlConvert(o, _rawColumns[i].TypeCode, _rawColumns[i].TypeInfo));
 }
        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);
        }