Exemplo n.º 1
0
        private void PushDummyMigrationHistoryMessage()
        {
            var migrationHistoryRow = new MigrationHistoryRow {
                Prefix = "test"
            };

            migrationHistoryRow.AppliedMigrations.Add(new MigrationHistoryRowDetails
            {
                Name           = "001_TestMigration",
                Hash           = "a0b87bef6d840b00ac344eb2a204442760794512bb8bc0873b63d8c7d5849e9f",
                DownOperations = new List <BaseOperation>
                {
                    new DeleteQueueOperation().SetName("bar"),
                    new DeleteExchangeOperation().SetName("foo")
                }
            });
            var migrationHistory = new MigrationHistory();

            migrationHistory.AllMigrations.Add(migrationHistoryRow);

            using (var connection = _connectionFactory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    var messageBody = JsonConvertHelper.SerializeObjectToByteArray(migrationHistory);
                    channel.BasicPublish("", Constants.HistoryQueue, false, null, messageBody);
                }
        }
Exemplo n.º 2
0
        public void RunDeploymentScript(DeploymentScript script)
        {
            try
            {
                if (_db.Exists <MigrationHistory>(script.Name))
                {
                    Log.Debug($"Migration {script.Name} has already been executed");
                    return;
                }

                Log.Info($"Processing migration {script.Name}");

                _db.BeginTransaction();

                var migration = new MigrationHistory
                {
                    ScriptName    = script.Name,
                    Completed     = false,
                    DateProcessed = DateTime.Now
                };

                _db.Insert(migration);
                _db.CompleteTransaction();

                _db.Execute(script.Sql);
                migration.Completed = true;
                _db.Save(migration);
            }
            catch (Exception ex)
            {
                _db.AbortTransaction();
                Log.Error($"Failed to run deployment migration {script.Name}", ex);
                throw;
            }
        }
        private MigrationHistory LoadMigrationHistory()
        {
            var ids = ExecuteSqlQuery($"SELECT database_id FROM master.sys.databases WHERE name = '{_databaseName}'",
                                      row => (int)row["database_id"]);

            if (ids.Any())
            {
                var rows = ExecuteSqlQuery($@"SELECT h.[Type], h.[HashCode], h.[Attributes], j.[Role], p.[HashCode] AS [PrerequisiteHashCode]
                        FROM [{_databaseName}].[dbo].[__MergableMigrationHistory] h
                        LEFT JOIN [{_databaseName}].[dbo].[__MergableMigrationHistoryPrerequisite] j
                          ON h.MigrationId = j.MigrationId
                        LEFT JOIN [{_databaseName}].[dbo].[__MergableMigrationHistory] p
                          ON j.PrerequisiteMigrationId = p.MigrationId
                        ORDER BY h.MigrationId, j.Role, p.MigrationId",
                                           row => new MigrationHistoryRow
                {
                    Type                 = LoadString(row["Type"]),
                    HashCode             = LoadBigInteger(row["HashCode"]),
                    Attributes           = LoadString(row["Attributes"]),
                    Role                 = LoadString(row["Role"]),
                    PrerequisiteHashCode = LoadBigInteger(row["PrerequisiteHashCode"])
                });

                return(MigrationHistory.LoadMementos(LoadMementos(rows)));
            }
            else
            {
                return(new MigrationHistory());
            }
        }
Exemplo n.º 4
0
        public void IsMigrationItemEqualsToHistory()
        {
            //arrange
            var step = new TestStep(ExecutionResult.Success);
            var positiveCaseStepName = MigrationHandler.StepIdentity(step);
            var positiveCaseVersion  = new Version("1.2.3.4");
            var negativeCaseVersion  = new Version("4.3.2.1");
            var migrationItem        = new MigrationItem(positiveCaseVersion, new TestStep(ExecutionResult.Success));
            var migrationHistory     = new MigrationHistory
            {
                Name    = positiveCaseStepName,
                Version = positiveCaseVersion.ToString()
            };

            //act
            var positiveCase = MigrationHandler.IsMigrationItemEqualsToHistory(migrationItem, migrationHistory);

            migrationHistory.Version = negativeCaseVersion.ToString();
            var negativeCase1 = MigrationHandler.IsMigrationItemEqualsToHistory(migrationItem, migrationHistory);

            migrationHistory.Version = positiveCaseVersion.ToString();
            migrationHistory.Name    = String.Empty;
            var negativeCase2 = MigrationHandler.IsMigrationItemEqualsToHistory(migrationItem, migrationHistory);

            //assert
            Assert.True(positiveCase && !negativeCase1 && !negativeCase2);
        }
Exemplo n.º 5
0
        public static MigrationHistoryViewModel MapDbModelToViewModel(MigrationHistory dbModel)
        {
            var viewModel = new  MigrationHistoryViewModel();

            viewModel.MigrationId    = dbModel.MigrationId;
            viewModel.ContextKey     = dbModel.ContextKey;
            viewModel.Model          = dbModel.Model;
            viewModel.ProductVersion = dbModel.ProductVersion;
            return(viewModel);
        }
Exemplo n.º 6
0
        public void Create(string name, Version version)
        {
            var migrationHistory = new MigrationHistory
            {
                Name       = name,
                Version    = version.ToString(),
                CreateDate = DateTime.Now
            };

            _migrationHistoryRepository.Add(migrationHistory);
        }
Exemplo n.º 7
0
        public async Task CreateHistoryAsync(MigrationHistory history, CancellationToken cancellationToken = default)
        {
            var prepare = await this.session.PrepareAsync("INSERT INTO migrations (major, minor, time) VALUES (?, ?, ?)");

            var statement = prepare.Bind(
                Convert.ToInt16(history.Version.Major),
                Convert.ToInt16(history.Version.Minor),
                history.AppliedTime.ToUniversalTime());

            await this.session.ExecuteAsync(statement);
        }
Exemplo n.º 8
0
        public async Task <bool> HasHistory(IAppMigration migrationInfo)
        {
            if (TryTestForTable(_historyTableName) == false)
            {
                return(false);
            }

            // else
            return(await MigrationHistory.AnyAsync(x =>
                                                   x.Id == migrationInfo.Id &&
                                                   x.Migration == migrationInfo.Migration
                                                   ));
        }
Exemplo n.º 9
0
        public static MigrationHistory MapInsertModelToDbModel(MigrationHistoryViewModel model, MigrationHistory newDomainModel = null)
        {
            if (newDomainModel == null)
            {
                newDomainModel = new MigrationHistory();
            }

            newDomainModel.MigrationId    = model.MigrationId;
            newDomainModel.ContextKey     = model.ContextKey;
            newDomainModel.Model          = model.Model;
            newDomainModel.ProductVersion = model.ProductVersion;

            return(newDomainModel);
        }
Exemplo n.º 10
0
 public MigrationHistory Migrate(Session session)
 {
     History = new MigrationHistory {
         FromRevision = From,
         ToRevision = To,
         Applied = DateTime.UtcNow,
     };
     Session = session;
     var docs = Session.ListDocuments();
     foreach (var d in docs)
     {
         Migrate(d);
     }
     return History;
 }
Exemplo n.º 11
0
        public void LogHistory(IAppMigration migrationInfo, MigrationResult result, DateTime started, DateTime finished)
        {
            var migrationRecord = new MigrationRecord()
            {
                Id         = migrationInfo.Id,
                Migration  = migrationInfo.Migration,
                Executed   = started,
                Duration   = finished.Subtract(started).Milliseconds,
                Result     = result.Status.ToString(),
                StatusCode = (int)result.Status,
                Message    = result.Message
            };

            MigrationHistory.Add(migrationRecord);
        }
Exemplo n.º 12
0
        public MigrationHistory Migrate(Session session)
        {
            History = new MigrationHistory {
                FromRevision = From,
                ToRevision   = To,
                Applied      = DateTime.UtcNow,
            };
            Session = session;
            var docs = Session.ListDocuments();

            foreach (var d in docs)
            {
                Migrate(d);
            }
            return(History);
        }
Exemplo n.º 13
0
        private void PushDummyMigrationHistoryMessage()
        {
            var migrationHistoryRow = new MigrationHistoryRow {
                Prefix = "test"
            };
            var migrationHistory = new MigrationHistory {
                Version = 3
            };

            migrationHistory.AllMigrations.Add(migrationHistoryRow);

            using (var connection = _connectionFactory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    var messageBody = JsonConvertHelper.SerializeObjectToByteArray(migrationHistory);
                    channel.BasicPublish("", Constants.HistoryQueue, false, null, messageBody);
                }
        }
        private void PushDummyMigrationHistoryMessage()
        {
            var migrationHistoryRow = new MigrationHistoryRow {
                Prefix = "test"
            };

            migrationHistoryRow.AppliedMigrations.Add("001_TestMigration");
            var migrationHistory = new MigrationHistory();

            migrationHistory.AllMigrations.Add(migrationHistoryRow);

            using (var connection = _connectionFactory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    var messageBody = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(migrationHistory));
                    channel.BasicPublish("", Constants.HistoryQueue, false, null, messageBody);
                }
        }
        internal static MigrationHistory UpdateMigrationHistory([NotNull] this ICassandraMigrator self, [NotNull] Table <MigrationHistory> table, [NotNull] IMigrator migration)
        {
            Check.NotNull(self, $"the argument [Cassandra Migrator]");
            Check.NotNull(table, $"the argument [Migration History]");
            Check.NotNull(migration, $"the argument [Migration]");

            var result = new MigrationHistory
            {
                Name        = migration.Name,
                Version     = migration.Version.ToString(),
                CreatedAt   = DateTime.UtcNow,
                Description = migration.Description,
            };

            table
            .Insert(result)
            .Execute();

            return(result);
        }
Exemplo n.º 16
0
        public void CanGenerateSql()
        {
            var migrations       = new Genome();
            var migrationHistory = new MigrationHistory();
            var sql = WhenGenerateSql(migrations, migrationHistory);

            sql.Should().Contain(@"CREATE TABLE [Mathematicians].[dbo].[Mathematician](
    [MathematicianId] INT IDENTITY (1,1) NOT NULL,
    CONSTRAINT [PK_Mathematician] PRIMARY KEY CLUSTERED ([MathematicianId]),
    [Name] NVARCHAR(100) NOT NULL,
    [BirthYear] INT NOT NULL,
    [DeathYear] INT NULL)");
            sql.Should().Contain(@"CREATE TABLE [Mathematicians].[dbo].[Contribution](
    [ContributionId] INT IDENTITY (1,1) NOT NULL,
    CONSTRAINT [PK_Contribution] PRIMARY KEY CLUSTERED ([ContributionId]),
    [MathematicianId] INT NOT NULL,
    [Description] NVARCHAR(500) NOT NULL,
    INDEX [IX_Contribution_MathematicianId] NONCLUSTERED ([MathematicianId]),
    CONSTRAINT [FK_Contribution_MathematicianId] FOREIGN KEY ([MathematicianId])
        REFERENCES [Mathematicians].[dbo].[Mathematician] ([MathematicianId]))");
        }
Exemplo n.º 17
0
        private static string[] WhenGenerateRollbackSql(IGenome migrations, MigrationHistory migrationHistory)
        {
            var sqlGenerator = new SqlGenerator(migrations, migrationHistory);

            return(sqlGenerator.GenerateRollbackSql("Mathematicians"));
        }
 public SqlGenerator(IGenome migrations, MigrationHistory migrationHistory)
 {
     _migrations       = migrations;
     _migrationHistory = migrationHistory;
 }
Exemplo n.º 19
0
 private MigrationHistory WhenLoadMigrationHistory(MigrationMemento[] mementos)
 {
     return(MigrationHistory.LoadMementos(mementos));
 }