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