/// <summary> /// Query for the metadata for a set of items. /// </summary> /// <param name="request">NoSQL query for items to get</param> /// <returns>Metadata of found items</returns> public async Task <GetResponse> QueryGetAsync(QueryGetRequest request) { var totalTimer = ScopeTiming.StartTiming(); try { var itemValues = new Dictionary <long, object>(); { Select select = new Select(); select.select = new List <string> { "id", "value" }; select.from = request.from; select.where = request.where; select.orderBy = request.orderBy; select.limit = request.limit; select.cmdParams = request.cmdParams; using (var reader = await Ctxt.ExecSelectAsync(select).ConfigureAwait(false)) { while (await reader.ReadAsync().ConfigureAwait(false)) { itemValues.Add(reader.GetInt64(0), reader.GetValue(1)); } } } var responses = new List <Dictionary <string, object> >(itemValues.Count); foreach (var itemId in itemValues.Keys) { var metaIds = await Items.GetItemDataAsync(Ctxt, itemId).ConfigureAwait(false); var metaStrings = await NameValues.GetMetadataValuesAsync(Ctxt, metaIds).ConfigureAwait(false); metaStrings["id"] = (double)itemId; metaStrings["value"] = itemValues[itemId]; responses.Add(metaStrings); } GetResponse response = new GetResponse() { metadata = responses }; return(response); } finally { ScopeTiming.RecordScope("Cmd.QueryGet", totalTimer); } }
/// <summary> /// Get the metadata for a set of items /// </summary> /// <param name="request">List of values to get metadata for</param> /// <returns>Metadata for the items</returns> public async Task <GetResponse> GetAsync(GetRequest request) { var totalTimer = ScopeTiming.StartTiming(); try { var responses = new List <Dictionary <string, object> >(request.values.Count); int tableId = await Tables.GetIdAsync(Ctxt, request.table, noCreate : true).ConfigureAwait(false); foreach (var value in request.values) { long valueId = await Values.GetIdAsync(Ctxt, value).ConfigureAwait(false); long itemId = await Items.GetIdAsync(Ctxt, tableId, valueId, noCreate : true).ConfigureAwait(false); if (itemId < 0) { responses.Add(null); continue; } var metaIds = await Items.GetItemDataAsync(Ctxt, itemId).ConfigureAwait(false); var metaStrings = await NameValues.GetMetadataValuesAsync(Ctxt, metaIds).ConfigureAwait(false); responses.Add(metaStrings); } GetResponse response = new GetResponse() { metadata = responses }; return(response); } finally { ScopeTiming.RecordScope("Cmd.Get", totalTimer); } }