Ejemplo n.º 1
0
        public void NizzleName()
        {
            // this is how 'feature-something' will get to execute the migrations - first his own migrations
            _migrator.Execute(Migrations(0, 1, 2).InRandomOrder());

            // then he merges his own stuff into master
            _migrator.Execute(Migrations(0, 1, 2, 5).InRandomOrder());

            // the the 'feature-anotherthing' branch gets merged
            _migrator.Execute(AllMigrations.InRandomOrder());
        }
Ejemplo n.º 2
0
        void Try(int numberOfThreads, int numberOfMigrations)
        {
            var tablesToCreate = Enumerable.Range(0, numberOfMigrations)
                                 .Select(n => new
            {
                Number    = n,
                TableName = $"Table{n:000}"
            })
                                 .ToList();

            var migrations = tablesToCreate
                             .Select(a => new TestMigration(a.Number, "test", $"CREATE TABLE [{a.TableName}] ([Id] INT)"))
                             .ToList();

            var threads = Enumerable.Range(0, numberOfThreads)
                          .Select(_ => new Thread(() => { _migrator.Execute(migrations); }))
                          .ToList();

            threads.ForEach(t => t.Start());

            threads.ForEach(t => t.Join(TimeSpan.FromSeconds(20)));

            var tableNames = GetTableNames();

            Assert.That(tableNames, Is.EqualTo(tablesToCreate.Select(a => a.TableName)));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Executes the given migrations on the specified database.
        /// </summary>
        /// <param name="connectionStringOrConnectionStringName">Specifies a connection string or the name of a connection string in the current application configuration file to use.</param>
        /// <param name="migrations">Supplies the migrations to be executed.</param>
        /// <param name="options">Optionally specifies some custom options to use.</param>
        public static void Migrate(string connectionStringOrConnectionStringName, Migrations migrations,
                                   Options options = null)
        {
            options = options ?? new Options();

#if NET45
            var connectionString = ConfigurationManager.ConnectionStrings[connectionStringOrConnectionStringName]
                                   ?.ConnectionString
                                   ?? connectionStringOrConnectionStringName;
#else
            var connectionString = connectionStringOrConnectionStringName;
#endif

            var writer = options.GetWriter();

            var migrator = new DatabaseMigratorCore(connectionString, options, GetDatabase());

            //var migrator = new DatabaseMigratorCore(
            //    db: GetDatabase(),
            //    migrationTableName: options.MigrationTableName,
            //    writer: writer,
            //    connectionString: connectionString);

            var executableSqlMigrations = migrations.GetMigrations();

            migrator.Execute(executableSqlMigrations);
        }
Ejemplo n.º 4
0
        public void DoesItInTheRightOrder()
        {
            _migrator.Execute(AllMigrations);

            using (var connection = new SqlConnection(TestConfig.ConnectionString))
            {
                connection.Open();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT [Number] FROM [Table] ORDER BY [Id]";

                    var actualNumbers = new List <int>();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            actualNumbers.Add((int)reader["Number"]);
                        }
                    }
                    //var actualNumbers = connection
                    //    .Select<int>("Number", "SELECT [Number] FROM [Table] ORDER BY [Id]")
                    //    .ToArray();

                    var expectedNumbers = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

                    Assert.That(actualNumbers, Is.EqualTo(expectedNumbers),
                                $"Expected {string.Join(", ", expectedNumbers)} but got {string.Join(", ", actualNumbers)}");
                }
            }
        }
Ejemplo n.º 5
0
        public void CanHandleMigrationWithGo_Trivial()
        {
            const string sql        = @"

CREATE TABLE [Table1] ([Id] int)

GO

CREATE TABLE [Table2] ([Id] int)
";
            var          migrations = new[] { new TestMigration(1, "test", sql) };

            _migrator.Execute(migrations);

            var tableNames = GetTableNames();

            Assert.That(tableNames, Is.EqualTo(new[] { "Table1", "Table2" }));
        }
Ejemplo n.º 6
0
        public void GivesNiceErrorMessage()
        {
            const string failSql = "THIS ONE CANNOT BE EXECUTED!";

            var migrations = new[]
            {
                new TestMigration(1, "test", "CREATE TABLE [Table1] ([Id] int)"),
                new TestMigration(2, "test", failSql)
            };

            var ex = Assert.Throws <MigrationException>(() => _migrator.Execute(migrations));

            Assert.That(ex.Message, Contains.Substring("2-test"));
            Assert.That(ex.Message, Contains.Substring(failSql));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Executes the given migrations on the specified database.
        /// </summary>
        /// <param name="connectionString">Specifies a connection string or the name of a connection string in the current application configuration file to use.</param>
        /// <param name="migrations">Supplies the migrations to be executed.</param>
        /// <param name="options">Optionally specifies some custom options to use.</param>
        public static void Migrate(string connectionString, Migrations migrations, Options options = null)
        {
            options = options ?? new Options();

            //var writer = options.GetWriter();

            var migrator = new DatabaseMigratorCore(connectionString, options, GetDatabase());

            //var migrator = new DatabaseMigratorCore(
            //    db: GetDatabase(),
            //    migrationTableName: options.MigrationTableName,
            //    writer: writer,
            //    connectionString: connectionString);

            var executableSqlMigrations = migrations.GetMigrations();

            migrator.Execute(executableSqlMigrations);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Executes the given migrations on the specified database.
        /// </summary>
        /// <param name="connectionStringOrConnectionStringName">Specifies a connection string or the name of a connection string in the current application configuration file to use.</param>
        /// <param name="migrations">Supplies the migrations to be executed.</param>
        /// <param name="options">Optionally specifies some custom options to use.</param>
        public static void Migrate(string connectionStringOrConnectionStringName, Migrations migrations, Options options = null)
        {
            options = options ?? new Options();

            var connectionString = ConfigurationManager.ConnectionStrings[connectionStringOrConnectionStringName]?.ConnectionString
                                ?? connectionStringOrConnectionStringName;

            var writer = options.GetWriter();

            var migrator = new DatabaseMigratorCore(
                db: GetDatabase(),
                migrationTableName: options.MigrationTableName,
                writer: writer,
                connectionString: connectionString);

            var executableSqlMigrations = migrations.GetMigrations();

            migrator.Execute(executableSqlMigrations);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Executes the given migrations on the specified database.
        /// </summary>
        /// <param name="connectionStringOrConnectionStringName">Specifies a connection string or the name of a connection string in the current application configuration file to use.</param>
        /// <param name="migrations">Supplies the migrations to be executed.</param>
        /// <param name="options">Optionally specifies some custom options to use.</param>
        public static void Migrate(string connectionStringOrConnectionStringName, Migrations migrations, Options options = null)
        {
            options = options ?? new Options();

            var connectionString = ConfigurationManager.ConnectionStrings[connectionStringOrConnectionStringName]?.ConnectionString
                                   ?? connectionStringOrConnectionStringName;

            var writer = options.GetWriter();

            var migrator = new DatabaseMigratorCore(
                db: GetDatabase(),
                migrationTableName: options.MigrationTableName,
                writer: writer,
                connectionString: connectionString);

            var executableSqlMigrations = migrations.GetMigrations();

            migrator.Execute(executableSqlMigrations);
        }
Ejemplo n.º 10
0
 public void DoesNothingWhenExecutingEmptyListOfMigrations()
 {
     _migrator.Execute(Enumerable.Empty <IExecutableSqlMigration>());
 }