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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
 }
Example #6
0
        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);
        }