public void ConditionalUpdate <T>(T tObject, string condAttribute, object expectedValue) { var splittedAttributes = condAttribute.Split('.'); var specificAttributeToCheck = condAttribute; string first = ""; string last = condAttribute; if (splittedAttributes.Length > 1) { last = splittedAttributes.Last(); first = condAttribute.Remove(condAttribute.Length - last.Length); } Expression expr = new Expression(); expr.ExpressionStatement = first + "#Cond = :Cond"; expr.ExpressionAttributeNames["#Cond"] = last; if (expectedValue.GetType() == typeof(int)) { expr.ExpressionAttributeValues[":Cond"] = (int)expectedValue; } if (expectedValue.GetType() == typeof(string)) { expr.ExpressionAttributeValues[":Cond"] = (string)expectedValue; } UpdateItemOperationConfig config = new UpdateItemOperationConfig() { ConditionalExpression = expr, ReturnValues = ReturnValues.AllNewAttributes }; dynamoDBTable.UpdateItem(AWSDocumentConverter.ToDocument(tObject), config); }
private UpdateItemOperationConfig GetUpdateItemOperationConfigForConditionalUpdate(string condAttribute, object expectedValue) { var splittedAttributes = condAttribute.Split('.'); var specificAttributeToCheck = condAttribute; string first = ""; string last = condAttribute; if (splittedAttributes.Length > 1) { last = splittedAttributes.Last(); first = condAttribute.Remove(condAttribute.Length - last.Length); } Expression expr = new Expression(); expr.ExpressionStatement = first + "#Cond = :Cond"; expr.ExpressionAttributeNames["#Cond"] = last; if (expectedValue.GetType() == typeof(int)) { expr.ExpressionAttributeValues[":Cond"] = (int)expectedValue; } if (expectedValue.GetType() == typeof(string)) { expr.ExpressionAttributeValues[":Cond"] = (string)expectedValue; } UpdateItemOperationConfig config = new UpdateItemOperationConfig() { ConditionalExpression = expr, ReturnValues = ReturnValues.None }; return(config); }
/// <summary> /// Initiates a Search object to Query a DynamoDB table, with the /// specified hash primary key and expression. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="hashKey">Value of the hash key for the query operation.</param> /// <param name="filterExpression">Expression to use.</param> /// <returns>Resultant Search container.</returns> public Search Query(Primitive hashKey, Expression filterExpression) { string hashKeyName = this.HashKeys[0]; QueryFilter hashKeyFilter = new QueryFilter(); hashKeyFilter.AddCondition(hashKeyName, QueryOperator.Equal, hashKey); QueryOperationConfig config = new QueryOperationConfig { Filter = hashKeyFilter, FilterExpression = filterExpression }; return Query(config); }
/// <summary> /// Initiates a Search object to Scan a DynamoDB table, with the /// specified expression. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="filterExpression">Expression to apply to the scan.</param> /// <returns>Resultant Search container.</returns> public Search Scan(Expression filterExpression) { ScanOperationConfig config = new ScanOperationConfig { FilterExpression = filterExpression }; return Scan(config); }
/// <summary> /// Allows to specify custom FilterExpression for DynamoDb queries and scans /// </summary> public static IQueryable <T> WithFilterExpression <T>(this IQueryable <T> source, Amazon.DynamoDBv2.DocumentModel.Expression expression) { source.AsQuery().UpdateCustomizationHooks(hooks => hooks.CustomFilterExpression = expression); return(source); }
internal static void ApplyExpression(QueryRequest request, DynamoDBEntryConversion conversion, Expression keyExpression, Expression filterExpression) { if (keyExpression == null) keyExpression = new Expression(); if (filterExpression == null) filterExpression = new Expression(); if (!keyExpression.IsSet && !filterExpression.IsSet) return; if (keyExpression.IsSet) request.KeyConditionExpression = keyExpression.ExpressionStatement; if (filterExpression.IsSet) request.FilterExpression = filterExpression.ExpressionStatement; var kean = keyExpression.ExpressionAttributeNames; var fean = filterExpression.ExpressionAttributeNames; var combinedEan = Common.Combine(kean, fean, StringComparer.Ordinal); request.ExpressionAttributeNames = combinedEan; var keav = new Document(keyExpression.ExpressionAttributeValues).ForceConversion(conversion); var feav = new Document(filterExpression.ExpressionAttributeValues).ForceConversion(conversion); var combinedEav = Common.Combine(keav, feav, null); request.ExpressionAttributeValues = ConvertToAttributeValues(combinedEav, conversion); }