public void ApplyVariablesFailsOnUnknownVariable() { var variables = new Mock <IVariables>(MockBehavior.Strict); variables .Setup(v => v.GetValue(It.IsAny <string>())) .Returns((string)null); var ex = Assert.Throws <InvalidOperationException>(() => TextScript.ApplyVariables("{{Value_1}}", variables.Object)); StringAssert.Contains("Value_1", ex.Message); }
public void ApplyVariables(string sql, string value, string expected) { var variables = new Mock <IVariables>(MockBehavior.Strict); variables .Setup(v => v.GetValue(It.IsAny <string>())) .Returns <string>(name => { if ("value".Equals(name, StringComparison.OrdinalIgnoreCase)) { return(value); } return(null); }); var actual = TextScript.ApplyVariables(sql, variables.Object); Assert.AreEqual(expected, actual); }
public void Execute(IScript script, Version currentVersion, Version targetVersion) { Variables.CurrentVersion = currentVersion.ToString(); Variables.TargetVersion = targetVersion.ToString(); Variables.DatabaseName = new SqlConnectionStringBuilder(ConnectionString).InitialCatalog; var updateVersion = TextScript.ApplyVariables( Configuration.SetCurrentVersionScript, Variables); using (var connection = new SqlConnection(ConnectionString)) using (var command = connection.CreateCommand()) { connection.InfoMessage += OnConnectionInfoMessage; command.CommandTimeout = 0; connection.Open(); using (var transaction = Transaction == TransactionMode.PerStep ? connection.BeginTransaction(IsolationLevel.ReadCommitted) : null) { command.Transaction = transaction; script.Execute(command, Variables, Log); if (!Variables.DatabaseName.Equals(connection.Database, StringComparison.OrdinalIgnoreCase)) { command.CommandText = "USE [{0}]".FormatWith(Variables.DatabaseName); command.ExecuteNonQuery(); } command.CommandText = updateVersion; command.ExecuteNonQuery(); transaction?.Commit(); } } }