/// <summary> /// Removes the entries in executed statements. /// </summary> /// <remarks>IMPORTANT: This will NOT execute any undo diff files.</remarks> public void ReduceVersion() { // ensure that the version is this.UpdateVersion(); var sql = SQLTemplates.RemoveVersion(this.CurrentVersion); this.ExecuteCommandNonQuery(sql); this.UpdateVersion(); }
/// <summary> /// Executes all statements in an transaction. /// </summary> /// <exception cref="TeamworkConnectionException">Is thrown when an error occurred while executing the SQL Statements.</exception> public void ExecuteInTransaction() { try { // execute statements which dont support transaction at the beginning foreach (var statement in this.SQLStatements.Where(s => !s.SupportsTransaction && !s.IsTeamworkSchema)) { statement.Execute(); } var sb = new StringBuilder(); foreach (var statement in this.SQLStatements.Where(s => s.SupportsTransaction && !s.IsTeamworkSchema)) { sb.AppendLine(statement.SQL); } // execute other statements in transaction var sql = sb.ToString(); this.database.ExecuteCommandNonQuery(sql); if (this.FileType == FileType.UndoDiff) { this.database.ExecuteCommandNonQuery(SQLTemplates.RemoveVersion(this.Version)); } this.database.ExecuteCommandNonQuery(SQLTemplates.AddExecutedFileSql(this.Version, this.FileType)); } catch (NpgsqlException ex) { try { this.database.ExecuteCommandNonQuery(SQLTemplates.AddExecutionHistorySql(this.Version, this.FileType, ex.Message)); } catch (Exception innerEx) { Log.Warn("Error while inserting execution history", innerEx); } Log.Warn(string.Format("File {0} contains errors", this.FileName)); throw new TeamworkConnectionException(this, ex.Message, ex); } Log.Info(string.Format("File {0} executed successfully", this.FileName)); }
public void ReduceVersionTest() { var name = "TestDB"; var path = "testpfad"; var fileMock = new Mock <IFileSystemAccess>(); var connectionManagerMock = new Mock <IConnectionManager>(); var processMock = new Mock <IProcessManager>(); var diffCreatorMock = new Mock <IDifferenceCreator>(); var sqlFileTester = new Mock <ISQLFileTester>(); connectionManagerMock.Setup(c => c.ExecuteCommand <int>(It.IsAny <IDatabase>(), It.IsAny <string>())).Returns(new List <int>() { 0 }); connectionManagerMock.Setup(c => c.ExecuteCommand <ExecutedFile>(It.IsAny <IDatabase>(), It.IsAny <string>())).Returns(new List <ExecutedFile>()); // UpdateData is called internally when bool is set to true var database = new Database(name, path, new List <string>(), connectionManagerMock.Object, fileMock.Object, processMock.Object, diffCreatorMock.Object, sqlFileTester.Object, initializeData: false) { CurrentVersion = DatabaseVersion.StartVersion, }; connectionManagerMock.Setup(c => c.ExecuteCommandNonQuery(It.IsAny <IDatabase>(), SQLTemplates.RemoveVersion(database.CurrentVersion))).Verifiable(); database.ReduceVersion(); connectionManagerMock.VerifyAll(); }