public async Task Execute(params string[] args) { var parsed = DeleteRowsArguments.Parse(args); if (!parsed.Valid) { Console.Out.WriteLine("Must give target table, partitionkey, and rowid(s)."); return; } Console.Out.WriteLine( "Deleting rows \r\n{0}\r\n from environment table {1}:{2}.", string.Join("\r\n", parsed.RowIds), parsed.Target.Environment, parsed.Target.TableName); var targetTable = new EnvironmentClient(parsed.Target.Environment) .GetTable(parsed.Target.TableName); if (!await targetTable.ExistsAsync()) { Console.Out.WriteLine("Target table does not exist, exiting."); return; } var deleteOperations = parsed.RowIds .Select(rowId => new DynamicTableEntity(parsed.PartitionKey, rowId, "*", new Dictionary <string, EntityProperty>())) .Select(entity => targetTable.ExecuteAsync(TableOperation.Delete(entity))).ToList(); await Task.WhenAll(deleteOperations); }
public async Task Execute(params string[] args) { var parsedArguments = ChangePartitionKeyArguments.Parse(args); if (!parsedArguments.Valid) { Console.WriteLine("Must give source table, row id, and both current and new partition keys."); return; } Console.Out.WriteLine("Changing partition key to {4} for row {0}:{1} {2}-{3}.", parsedArguments.Source.Environment, parsedArguments.Source.TableName, parsedArguments.Partition, parsedArguments.Id, parsedArguments.NewPartition); var sourceTable = new EnvironmentClient(parsedArguments.Source.Environment).GetTable(parsedArguments.Source.TableName); if (!await sourceTable.ExistsAsync()) { Console.Out.WriteLine("Source table does not exist, exiting."); return; } var retrieveRow = TableOperation.Retrieve(parsedArguments.Partition, parsedArguments.Id); // TODO: Could use some error handling var rowToChange = (DynamicTableEntity)(await sourceTable.ExecuteAsync(retrieveRow)).Result; await sourceTable.ExecuteAsync(TableOperation.Delete(rowToChange)).ContinueWith( (Task t) => { rowToChange.PartitionKey = parsedArguments.NewPartition; return(sourceTable.ExecuteAsync(TableOperation.Insert(rowToChange))); }); }