Ejemplo n.º 1
0
        public IEnumerable <T> GetRelatedItems <T>(object hash)
        {
            var table = DynamoMetadata.GetTable <T>();

            var argType = hash.GetType();
            var dbType  = Converters.GetFieldType(argType);
            var request = new QueryRequest(table.Name)
            {
                Limit = PagingLimit,
                KeyConditionExpression    = $"{table.HashKey.Name} = :k1",
                ExpressionAttributeValues = new Dictionary <string, AttributeValue> {
                    { ":k1", Converters.ToAttributeValue(this, argType, dbType, hash) }
                }
            };

            return(Query(request, r => r.ConvertAll <T>()));
        }
Ejemplo n.º 2
0
        public void DeleteItems <T>(IEnumerable <DynamoId> ids)
        {
            var table        = DynamoMetadata.GetTable <T>();
            var remainingIds = ids.ToList();

            while (remainingIds.Count > 0)
            {
                var batchSize = Math.Min(remainingIds.Count, MaxWriteBatchSize);
                var nextBatch = remainingIds.GetRange(0, batchSize);
                remainingIds.RemoveRange(0, batchSize);

                var deleteItems = nextBatch.Map(id => new WriteRequest(
                                                    new DeleteRequest(Converters.ToAttributeKeyValue(this, table, id))));

                ExecBatchWriteItemResponse <T>(table, deleteItems);
            }
        }
Ejemplo n.º 3
0
        public Table GetTableSchema(Type type)
        {
            var table = DynamoMetadata.GetTable(type);

            return(Exec(() =>
            {
                try
                {
                    Table.TryLoadTable(DynamoDb, table.Name, out var awsTable);
                    return awsTable;
                }
                catch (ResourceNotFoundException)
                {
                    return null;
                }
            }, throwNotFoundExceptions));
        }
Ejemplo n.º 4
0
        public async Task <T> UpdateItemNonDefaultsAsync <T>(T value, bool returnOld = false, CancellationToken token = default)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new UpdateItemRequest
            {
                TableName        = table.Name,
                Key              = Converters.ToAttributeKey(this, table, value),
                AttributeUpdates = Converters.ToNonDefaultAttributeValueUpdates(this, value, table),
                ReturnValues     = returnOld ? ReturnValue.ALL_OLD : ReturnValue.NONE,
            };

            var response = await ExecAsync(async() =>
                                           await DynamoDb.UpdateItemAsync(request, token).ConfigAwait()).ConfigAwait();

            if (response.Attributes.IsEmpty())
            {
                return(default);
Ejemplo n.º 5
0
        public T DeleteItem <T>(object hash, object range, ReturnItem returnItem = ReturnItem.None)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new DeleteItemRequest
            {
                TableName    = table.Name,
                Key          = Converters.ToAttributeKeyValue(this, table, hash, range),
                ReturnValues = returnItem.ToReturnValue(),
            };

            var response = Exec(() => DynamoDb.DeleteItem(request));

            if (response.Attributes.IsEmpty())
            {
                return(default(T));
            }

            return(Converters.FromAttributeValues <T>(table, response.Attributes));
        }
Ejemplo n.º 6
0
        public T PutItem <T>(T value, bool returnOld = false)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new PutItemRequest
            {
                TableName    = table.Name,
                Item         = Converters.ToAttributeValues(this, value, table),
                ReturnValues = returnOld ? ReturnValue.ALL_OLD : ReturnValue.NONE,
            };

            var response = Exec(() => DynamoDb.PutItem(request));

            if (response.Attributes.IsEmpty())
            {
                return(default(T));
            }

            return(Converters.FromAttributeValues <T>(table, response.Attributes));
        }
Ejemplo n.º 7
0
        public async Task <T> PutItemAsync <T>(T value, bool returnOld = false, CancellationToken token = default)
        {
            var table   = DynamoMetadata.GetTable <T>();
            var request = new PutItemRequest
            {
                TableName    = table.Name,
                Item         = Converters.ToAttributeValues(this, value, table),
                ReturnValues = returnOld ? ReturnValue.ALL_OLD : ReturnValue.NONE,
            };

            var response = await ExecAsync(async() =>
                                           await DynamoDb.PutItemAsync(request, token).ConfigAwait()).ConfigAwait();

            if (response.Attributes.IsEmpty())
            {
                return(default(T));
            }

            return(Converters.FromAttributeValues <T>(table, response.Attributes));
        }
Ejemplo n.º 8
0
        public async Task <List <T> > GetRelatedItemsAsync <T>(object hash, CancellationToken token = default)
        {
            var table = DynamoMetadata.GetTable <T>();

            var argType = hash.GetType();
            var dbType  = Converters.GetFieldType(argType);
            var request = new QueryRequest(table.Name)
            {
                Limit = PagingLimit,
                KeyConditionExpression    = $"{table.HashKey.Name} = :k1",
                ExpressionAttributeValues = new Dictionary <string, AttributeValue> {
                    { ":k1", Converters.ToAttributeValue(this, argType, dbType, hash) }
                }
            };

#if NET472 || NETCORE
            return(await QueryAsync(request, r => r.ConvertAll <T>(), token).ToListAsync(token));
#else
            return(await QueryAsync(request, r => r.ConvertAll <T>(), token).ConfigAwait());
#endif
        }
Ejemplo n.º 9
0
 public UpdateExpression <T> UpdateExpression <T>(object hash, object range = null)
 {
     return(new UpdateExpression <T>(this, DynamoMetadata.GetTable <T>(), hash, range));
 }