private Operation GetPostOperation()

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;
        }