示例#1
0
        public void Generate(IEnumerable<MigrationVersion> versions, TextWriter output, ScriptGenerationOptions options)
        {
            if (options.UseTransaction)
            {
                GenerateScriptForBeginTransaction(output);
            }

            if (options.TrackVersions)
            {
                GenerateScriptForVersionTrackingStorage(options.VersionTableName, output);
            }

            foreach (var version in versions)
            {
                if (options.TrackVersions)
                {
                    GenerateScriptForVersionContinuityChecks(version, options.VersionTableName, options.UseTransaction, output);
                }

                bool hasSkipCondition = !String.IsNullOrEmpty(version.SkipCondition);

                if (hasSkipCondition)
                {
                    GenerateScriptForSkipCondition(version, options, output);
                }

                GenerateScriptForApplyingVersionScript(version, options, output);
                GenerateScriptForDetectingFailedUpgrade(version, options, output);

                if (hasSkipCondition)
                {
                    output.WriteLine("END");
                }

                if (options.TrackVersions)
                {
                    GenerateScriptToTrackVersion(version, options, output);
                    output.WriteLine("END");
                }
            }

            if (options.UseTransaction)
            {
                GenerateScriptForCommitTransaction(output);
            }
        }
示例#2
0
        protected virtual void GenerateScriptForApplyingVersionScript(MigrationVersion version, ScriptGenerationOptions options, TextWriter output)
        {
            output.WriteLine("PRINT N'Applying version {0} to schema {1}'", Escape(version.Version), Escape(version.Schema));

            if (options.ProcessBatchedScripts)
            {
                string[] scriptParts = GetScriptParts(version.Script, options.BatchTerminator);

                foreach (string scriptPart in scriptParts)
                {
                    output.WriteLine("exec sp_executesql N'{0}'", Escape(scriptPart));
                }
            }
            else
            {
                output.WriteLine(version.Script);
            }
        }
示例#3
0
 protected virtual void GenerateScriptToTrackVersion(MigrationVersion version, ScriptGenerationOptions options, TextWriter output)
 {
     output.WriteLine(@"INSERT INTO [{0}] ([Schema], [Version], [NumericVersion], [Checksum], [Description], [DateAdded])
         VALUES (N'{1}', N'{2}', {3}, '{4}', N'{5}', getutcdate())",
         options.VersionTableName, Escape(version.Schema), Escape(version.Version), version.NumericVersion, Escape(version.Checksum), Escape(version.Description));
 }
示例#4
0
 protected virtual void GenerateScriptForSkipCondition(MigrationVersion version, ScriptGenerationOptions options, TextWriter output)
 {
     output.WriteLine(@"IF ({0})
     BEGIN
     PRINT N'Skipping version {1} on schema {2} due to a matched skip condition'
     END
     ELSE
     BEGIN
     ", version.SkipCondition, Escape(version.Version), Escape(version.Schema));
 }
示例#5
0
        protected virtual void GenerateScriptForDetectingFailedUpgrade(MigrationVersion version, ScriptGenerationOptions options, TextWriter output)
        {
            output.WriteLine(@"IF @@ERROR <> 0 BEGIN");

            output.Write("PRINT N'Error occured while applying version {0} to schema {1}", Escape(version.Version), Escape(version.Schema));

            if (options.UseTransaction)
            {
                output.WriteLine(", rolling back transaction'");
                output.WriteLine("ROLLBACK TRANSACTION");
            }
            else
            {
                output.WriteLine("'");
            }

            output.WriteLine("RETURN");
            output.WriteLine("END");
        }
 public GenerateMigrationScript()
 {
     MigrationScriptOptions = new MigrationScriptOptions();
     ScriptGenerationOptions = new ScriptGenerationOptions();
 }