public void FilterOperations_preserves_add_foreign_key_when_no_create_table()
        {
            var addForeignKey = new AddForeignKeyOperation(
                "Pony",
                "BFFK",
                new[] { "FriendId" },
                "Pony",
                new[] { "Id" },
                false);
            var operations = new MigrationOperation[] { addForeignKey };
            var generator = CreateGenerator();

            var result = generator.FilterOperations(operations);

            Assert.Equal(new[] { addForeignKey }, result);
        }
        public void Create_migration_metadata()
        {
            var targetModel = new Metadata.Model();
            var upgradeOperations = new MigrationOperation[0];
            var downgradeOperations = new MigrationOperation[0];

            var migration
                = new MigrationMetadata("000000000000001_Name")
                    {
                        TargetModel = targetModel,
                        UpgradeOperations = upgradeOperations,
                        DowngradeOperations = downgradeOperations,
                    };

            Assert.Equal("000000000000001_Name", migration.MigrationId);
            Assert.Same(targetModel, migration.TargetModel);
            Assert.Same(upgradeOperations, migration.UpgradeOperations);
            Assert.Same(downgradeOperations, migration.DowngradeOperations);
        }
        public void FilterOperations_preserves_add_foreign_key_when_create_table_but_no_fk()
        {
            var createTable = new CreateTableOperation(
                new Table(
                    "Pony",
                    new[] { new Column("Id", typeof(long)), new Column("FriendId", typeof(long)) }));
            var addForeignKey = new AddForeignKeyOperation(
                "Pony",
                "BFFK",
                new[] { "FriendId" },
                "Pony",
                new[] { "Id" },
                false);
            var operations = new MigrationOperation[] { createTable, addForeignKey };
            var generator = CreateGenerator();

            var result = generator.FilterOperations(operations);

            Assert.Equal(new MigrationOperation[] { createTable, addForeignKey }, result);
        }
        public void FilterOperations_removes_add_foreign_key_when_corresponding_create_table()
        {
            var friendId = new Column("FriendId", typeof(long));
            var id = new Column("Id", typeof(long));
            var pony = new Table("Pony", new[] { id, friendId });
            pony.AddForeignKey(new ForeignKey("BFFK", new[] { friendId }, new[] { id }));
            var createTable = new CreateTableOperation(pony);
            var addForeignKey = new AddForeignKeyOperation(
                "Pony",
                "BFFK",
                new[] { "FriendId" },
                "Pony",
                new[] { "Id" },
                false);
            var operations = new MigrationOperation[] { createTable, addForeignKey };
            var generator = CreateGenerator();

            var result = generator.FilterOperations(operations);

            Assert.Equal(new[] { createTable }, result);
        }
 private string Generate(MigrationOperation operation)
 {
     return CreateGenerator().Generate(new[] { operation }).First().Sql;
 }
        private static SqlStatement Generate(MigrationOperation migrationOperation)
        {
            var sqlGenerator = new Mock<MigrationOperationSqlGenerator>(new RelationalTypeMapper()) { CallBase = true };

            return sqlGenerator.Object.Generate(new[] { migrationOperation }).Single();
        }
        private static SqlStatement Generate(MigrationOperation migrationOperation)
        {
            var sqlGenerator = new SqlServerMigrationOperationSqlGenerator(new SqlServerTypeMapper());

            return sqlGenerator.Generate(new[] { migrationOperation }).Single();
        }
        private IEnumerable<SqlStatement> CreateCreateOperations()
        {
            // TODO Check DbConnection.Database always gives us what we want
            var databaseName = _connection.DbConnection.Database;

            var operations = new MigrationOperation[]
                {
                    new CreateDatabaseOperation(databaseName)
                };

            var masterCommands = _sqlGenerator.Generate(operations);
            return masterCommands;
        }
        private IEnumerable<SqlStatement> CreateDropCommands()
        {
            var operations = new MigrationOperation[]
                {
                    // TODO Check DbConnection.Database always gives us what we want
                    new DropDatabaseOperation(_connection.DbConnection.Database)
                };

            var masterCommands = _sqlGenerator.Generate(operations);
            return masterCommands;
        }