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>())); }
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); } }
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)); }
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);
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)); }
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)); }
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)); }
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 }
public UpdateExpression <T> UpdateExpression <T>(object hash, object range = null) { return(new UpdateExpression <T>(this, DynamoMetadata.GetTable <T>(), hash, range)); }