/// <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();
        }
Пример #2
0
        /// <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();
        }