Beispiel #1
0
        public Task Retrieve(IEnumerable <object> keys, TypedRetrieveCallback <TableRow> callback)
        {
            //Compute direct keys
            List <byte[]> directKeys = keys.Select(m => m.GetType() == typeof(byte[]) ? m as byte[] : m.Serialize()).Select(m =>
            {
                return(GenerateKey(m));
            }).ToList();

            return(RetrieveDirect(directKeys, callback));
        }
Beispiel #2
0
        async Task RetrieveDirect(byte[] start, byte[] end, TypedRetrieveCallback <TableRow> callback)
        {
            await db.Retrieve(start, end, elems => {
                return(callback(elems.Select(m => {
                    byte[] newkey = new byte[m.Key.Length - tableName.Length];
                    Buffer.BlockCopy(m.Key, tableName.Length, newkey, 0, newkey.Length);
                    m.Key = newkey;

                    TableRow retval = new TableRow();
                    BinaryReader mreader = new BinaryReader(new MemoryStream(m.Value));
                    retval.Key = m.Key;
                    while (mreader.BaseStream.Position != mreader.BaseStream.Length)
                    {
                        retval[mreader.ReadNullTerminatedString()] = DataFormats.Deserialize(mreader);
                    }
                    return retval;
                })));
            });
        }
Beispiel #3
0
 public Task Retrieve <T>(IEnumerable <object> keys, TypedRetrieveCallback <T> callback) where T : class, new()
 {
     return(Retrieve(keys, rows => callback(rows.Select(m => m.As <T>()))));
 }
Beispiel #4
0
 internal Task RangeRetrieve(byte[] start, byte[] end, TypedRetrieveCallback <TableRow> callback)
 {
     return(RetrieveDirect(GenerateKey(start), GenerateKey(end), callback));
 }