public async Task <string> Get([FromQuery] SearchParams searchParams) { try { AWSXRayRecorder.Instance.BeginSubsegment("Scanning DynamoDB Table"); ScanFilter scanFilter = new ScanFilter(); if (!String.IsNullOrEmpty(searchParams.petcolor)) { scanFilter.AddCondition("petcolor", ScanOperator.Equal, searchParams.petcolor); } if (!String.IsNullOrEmpty(searchParams.pettype)) { scanFilter.AddCondition("pettype", ScanOperator.Equal, searchParams.pettype); } if (!String.IsNullOrEmpty(searchParams.petid)) { scanFilter.AddCondition("petid", ScanOperator.Equal, searchParams.petid); } var scanquery = new ScanRequest { TableName = _configuration["dynamodbtablename"], ScanFilter = scanFilter.ToConditions() }; // This line is intentional. Delays searches if (!String.IsNullOrEmpty(searchParams.pettype) && searchParams.pettype == "bunny") { Thread.Sleep(3000); } AWSXRayRecorder.Instance.AddAnnotation("Query", $"petcolor:{searchParams.petcolor}-pettype:{searchParams.pettype}-petid:{searchParams.petid}"); Console.WriteLine($"[{AWSXRayRecorder.Instance.GetEntity().TraceId}] - {searchParams}"); var response = await ddbClient.ScanAsync(scanquery); AWSXRayRecorder.Instance.EndSubsegment(); return(BuildPets(response.Items)); } catch (Exception e) { return(e.Message); } }
/// <summary> /// Prepares parameters for a scan operation from the list of conditions /// </summary> internal static ScanFilter GetScanFilterForTable(this TranslationResult translationResult, Table tableDefinition) { // the last thing to do is to make a full scan var scanFilter = new ScanFilter(); //TODO: check for BETWEEN operator foreach (var condition in translationResult.Conditions.Flatten()) { bool conditionForThisFieldExistsAlready = scanFilter.ToConditions().ContainsKey(condition.Item1); if (conditionForThisFieldExistsAlready) { throw new InvalidOperationException(string.Format("Multiple conditions for the same {0} field are not supported by AWS SDK. As a workaround, please, use a custom FilterExpression.", condition.Item1)); } if ( (condition.Item2.Values.Length == 1) && (condition.Item2.Values[0] == null) ) { switch (condition.Item2.Operator) { case ScanOperator.Equal: scanFilter.AddCondition(condition.Item1, ScanOperator.IsNull); break; case ScanOperator.NotEqual: scanFilter.AddCondition(condition.Item1, ScanOperator.IsNotNull); break; default: throw new InvalidOperationException(string.Format("You cannot use {0} operator with null value", condition.Item2.Operator)); } } else { scanFilter.AddCondition(condition.Item1, condition.Item2.Operator, condition.Item2.Values); } } return(scanFilter); }
public List <PlanItem> GetPlanByAny(Guid?planUId, string name, string uniqueName, string planFile, bool?planFileIsUri, Guid?planContainerUId, string createdBy, DateTime?createdTime, string modifiedBy, DateTime?modifiedTime) { List <PlanItem> planList = new List <PlanItem>(); if (string.IsNullOrWhiteSpace(PlanTable)) { throw new Exception("Plan table name must be specified."); } try { Table table = Table.LoadTable(_client, PlanTable); ScanFilter scanFilter = new ScanFilter(); if (planUId != null && planUId != Guid.Empty) { scanFilter.AddCondition("UId", ScanOperator.Equal, planUId); } if (!string.IsNullOrWhiteSpace(name)) { scanFilter.AddCondition("Name", ScanOperator.Equal, name); } if (!string.IsNullOrWhiteSpace(uniqueName)) { scanFilter.AddCondition("UniqueName", ScanOperator.Equal, uniqueName); } if (!string.IsNullOrWhiteSpace(planFile)) { scanFilter.AddCondition("PlanFile", ScanOperator.Equal, planFile); } if (planFileIsUri != null) { scanFilter.AddCondition("PlanFileIsUri", ScanOperator.Equal, planFileIsUri); } if (planContainerUId != null && planContainerUId != Guid.Empty) { scanFilter.AddCondition("PlanContainerUId", ScanOperator.Equal, planContainerUId); } if (!string.IsNullOrWhiteSpace(createdBy)) { scanFilter.AddCondition("AuditCreatedBy", ScanOperator.Equal, createdBy); } if (createdTime != null) { scanFilter.AddCondition("AuditCreatedTime", ScanOperator.Equal, createdTime); } if (!string.IsNullOrWhiteSpace(modifiedBy)) { scanFilter.AddCondition("AuditModifiedBy", ScanOperator.Equal, modifiedBy); } if (modifiedTime != null) { scanFilter.AddCondition("AuditModifiedTime", ScanOperator.Equal, modifiedTime); } if (scanFilter.ToConditions().Count == 0) { throw new Exception("At least one filter condition must be specified."); } Search search = table.Scan(scanFilter); do { List <Document> documentList = search.GetNextSet(); if (documentList.Count == 0) { throw new Exception("Plan cannot be found."); } foreach (Document document in documentList) { string json = document.ToJsonPretty(); PlanItem plan = JsonConvert.DeserializeObject <PlanItem>(json, _settings); planList.Add(plan); } } while (!search.IsDone); } catch (Exception ex) { Debug.Write(ex.Message); throw; } return(planList); }