in code/Server/CTStore/ExecutionManager.cs [430:532]
private Operation GetPostOperation(Operation operation, Result preResult, Result result)
{
Table table = operation.Table;
OperationType operationType = operation.OperationType;
Entity entity = operation.Entity;
Operation postOperation = null;
if (table is ObjectTable)
{
switch (operationType)
{
case OperationType.Insert:
postOperation = Operation.Insert(table as ObjectTable, operation.PartitionKey, operation.Key, entity as ObjectEntity);
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Replace:
case OperationType.InsertOrReplace:
postOperation = Operation.Replace(table as ObjectTable, operation.PartitionKey, operation.Key, entity as ObjectEntity);
postOperation.Entity.ETag = preResult.ETag;
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Delete:
case OperationType.DeleteIfExists:
case OperationType.Merge:
case OperationType.InsertOrMerge:
ObjectEntity deleteEntity = new ObjectEntity();
deleteEntity.ETag = preResult.ETag;
return Operation.Delete(table as ObjectTable, operation.PartitionKey, operation.Key, deleteEntity);
}
}
else if (table is FixedObjectTable)
{
switch (operationType)
{
case OperationType.Insert:
postOperation = Operation.Insert(table as FixedObjectTable, operation.PartitionKey, operation.Key, entity as ObjectEntity);
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Replace:
case OperationType.InsertOrReplace:
postOperation = Operation.Replace(table as FixedObjectTable, operation.PartitionKey, operation.Key, entity as ObjectEntity);
postOperation.Entity.ETag = preResult.ETag;
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Delete:
case OperationType.DeleteIfExists:
ObjectEntity deleteEntity = new ObjectEntity();
deleteEntity.ETag = preResult.ETag;
return Operation.Delete(table as FixedObjectTable, operation.PartitionKey, operation.Key, deleteEntity);
}
}
else if (table is FeedTable)
{
if (preResult.EntitiesAffected == 0)
{
return null;
}
switch (operationType)
{
case OperationType.Insert:
case OperationType.Replace:
case OperationType.InsertOrReplace:
postOperation = Operation.Replace(table as FeedTable, operation.PartitionKey, operation.Key, operation.ItemKey, entity as FeedEntity);
postOperation.Entity.ETag = preResult.ETag;
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Delete:
case OperationType.DeleteIfExists:
FeedEntity deleteEntity = new FeedEntity();
deleteEntity.ETag = preResult.ETag;
return Operation.Delete(table as FeedTable, operation.PartitionKey, operation.Key, operation.ItemKey, deleteEntity);
}
}
else if (table is CountTable)
{
switch (operationType)
{
case OperationType.Insert:
postOperation = Operation.Insert(table as CountTable, operation.PartitionKey, operation.Key, (entity as CountEntity).Count);
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Replace:
case OperationType.InsertOrReplace:
postOperation = Operation.Replace(table as CountTable, operation.PartitionKey, operation.Key, entity as CountEntity);
postOperation.Entity.ETag = preResult.ETag;
postOperation.Entity.CustomETag = result.ETag;
return postOperation;
case OperationType.Increment:
case OperationType.InsertOrIncrement:
postOperation = Operation.Replace(table as CountTable, operation.PartitionKey, operation.Key, new CountEntity() { Count = (double)result.Value });
postOperation.Entity.ETag = preResult.ETag;
postOperation.Entity.CustomETag = result.ETag;
break;
case OperationType.Delete:
case OperationType.DeleteIfExists:
CountEntity deleteEntity = new CountEntity();
deleteEntity.ETag = preResult.ETag;
return Operation.Delete(table as CountTable, operation.PartitionKey, operation.Key, deleteEntity);
}
}
return postOperation;
}