/// <summary>
        /// Performs the database upgrade.
        /// </summary>
        public virtual DatabaseUpgradeResult PerformUpgrade()
        {
            var executed = new List <SqlScript>();

            SqlScript executedScript = null;

            try
            {
                using (configuration.ConnectionManager.OperationStarting(configuration.Log, executed))
                {
                    configuration.Log.WriteInformation("Beginning database upgrade");

                    var scriptsToExecute = GetScriptsToExecuteInsideOperation();

                    if (scriptsToExecute.Count == 0)
                    {
                        configuration.Log.WriteInformation("No new scripts need to be executed - completing.");
                        return(new DatabaseUpgradeResult(executed, true, null, null));
                    }

                    configuration.ScriptExecutor.VerifySchema();

                    foreach (var script in scriptsToExecute)
                    {
                        executedScript = script;

                        configuration.ScriptExecutor.Execute(script, configuration.Variables);

                        OnScriptExecuted(new ScriptExecutedEventArgs(script, configuration.ConnectionManager));

                        executed.Add(script);
                    }

                    configuration.Log.WriteInformation("Upgrade successful");
                    return(new DatabaseUpgradeResult(executed, true, null, null));
                }
            }
            catch (Exception ex)
            {
                if (executedScript != null)
                {
                    ex.Data["Error occurred in script: "] = executedScript.Name;
                }
                configuration.Log.WriteError("Upgrade failed due to an unexpected exception:\r\n{0}", ex.ToString());
                return(new DatabaseUpgradeResult(executed, false, ex, executedScript));
            }
        }
Exemple #2
0
 public ScriptExecutedEventArgs(SqlScript script, IConnectionManager connectionManager)
 {
     Script            = script;
     ConnectionManager = connectionManager;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DatabaseUpgradeResult"/> class.
 /// </summary>
 /// <param name="scripts">The scripts that were executed.</param>
 /// <param name="successful">if set to <c>true</c> [successful].</param>
 /// <param name="error">The error.</param>
 /// <param name="errorScript">The script that was executing when the error occured</param>
 public DatabaseUpgradeResult(IEnumerable <SqlScript> scripts, bool successful, Exception error, SqlScript errorScript)
 {
     this.scripts = new List <SqlScript>();
     this.scripts.AddRange(scripts);
     this.successful  = successful;
     this.error       = error;
     this.errorScript = errorScript;
 }