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)); }
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; }))); }); }
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>())))); }
internal Task RangeRetrieve(byte[] start, byte[] end, TypedRetrieveCallback <TableRow> callback) { return(RetrieveDirect(GenerateKey(start), GenerateKey(end), callback)); }