using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using Patcher.DB; namespace Patcher.Data.Command { class ChangeStoredProcedureCommand : AbstractStoredProcedureCommand { private readonly StoredProcedureBody body; private ChangeStoredProcedureCommand(int num, XElement inner) : base(num, inner) { this.body = new StoredProcedureBody( inner.Element("declarations") != null ? inner.Element("declarations").Value : "", inner.Element("body").Value ); } public static ChangeStoredProcedureCommand CreateSpecific(int num, XElement inner) { return new ChangeStoredProcedureCommand(num, inner); } public override IEnumerable Apply(Transaction transaction, bool forceIntegrity) { if(!forceIntegrity) { throw new NotImplementedException("Safe stored procedure change is not implemented yet"); } StoredProcedureBody oldBody = transaction.GetStoredProcedureBody(this.procedure); /*Console.WriteLine(); Console.WriteLine("===OLD DECLARATIONS==="); Console.WriteLine(oldBody.declarations); Console.WriteLine("===OLD BODY==="); Console.WriteLine(oldBody.body); Console.WriteLine("===END===");*/ transaction.ReplaceStoredProcedureBody(this.procedure, this.body); return new[] { new XElement("oldDeclarations", oldBody.declarations), new XElement("oldBody", oldBody.body), }; } public override void Rollback(Transaction transaction, XElement commandRollbackInfo) { transaction.ReplaceStoredProcedureBody( this.procedure, new StoredProcedureBody( commandRollbackInfo.Element("oldDeclarations").Value, commandRollbackInfo.Element("oldBody").Value ) ); } } }