Beispiel #1
0
        public void Visit_with_drop_foreign_key_operation()
        {
            var model      = new DatabaseModel();
            var column0    = new Column("Foo", typeof(int));
            var column1    = new Column("Bar", typeof(int));
            var table0     = new Table("dbo.T0", new[] { column0 });
            var table1     = new Table("dbo.T1", new[] { column1 });
            var foreignKey = new ForeignKey("FK", new[] { column0 }, new[] { column1 }, cascadeDelete: true);
            var operation  = new DropForeignKeyOperation("dbo.T0", "FK");

            model.AddTable(table0);
            model.AddTable(table1);
            table0.AddForeignKey(foreignKey);

            Assert.Equal(1, table0.ForeignKeys.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(0, table0.ForeignKeys.Count);
        }
Beispiel #2
0
        public void Visit_with_move_table_operation()
        {
            var model     = new DatabaseModel();
            var operation = new MoveTableOperation("dbo.MyTable", "RenamedSchema");

            model.AddTable(new Table("dbo.MyTable"));

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(1, model.Tables.Count);
            Assert.Equal("RenamedSchema.MyTable", model.Tables[0].Name);
        }
Beispiel #3
0
        public void Visit_with_drop_table_operation()
        {
            var model     = new DatabaseModel();
            var operation = new DropTableOperation("dbo.MyTable");

            model.AddTable(new Table("dbo.MyTable"));

            Assert.Equal(1, model.Tables.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(0, model.Tables.Count);
        }
Beispiel #4
0
        public void AddTable_adds_specified_table()
        {
            var database = new DatabaseModel();

            Assert.Equal(0, database.Tables.Count);

            var table = new Table("dbo.MyTable");

            database.AddTable(table);

            Assert.Equal(1, database.Tables.Count);
            Assert.Same(table, database.Tables[0]);
        }
Beispiel #5
0
        public void Visit_with_rename_column_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new RenameColumnOperation("dbo.MyTable", "Foo", "Bar");

            model.AddTable(table);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal("Bar", column.Name);
        }
Beispiel #6
0
        public void Visit_with_drop_column_operation()
        {
            var model     = new DatabaseModel();
            var table     = new Table("dbo.MyTable", new[] { new Column("Foo", typeof(int)) });
            var operation = new DropColumnOperation("dbo.MyTable", "Foo");

            model.AddTable(table);

            Assert.Equal(1, table.Columns.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(0, table.Columns.Count);
        }
Beispiel #7
0
        public void Visit_with_add_default_constraint_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new AddDefaultConstraintOperation("dbo.MyTable", "Foo", 5, "Sql");

            model.AddTable(table);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(5, column.DefaultValue);
            Assert.Equal("Sql", column.DefaultSql);
        }
        public void Generate_when_add_column_operation()
        {
            var database = new DatabaseModel();

            database.AddTable(new Table("dbo.MyTable"));

            var column = new Column("Bar", "int")
            {
                IsNullable = false, DefaultValue = 5
            };

            Assert.Equal(
                @"ALTER TABLE [dbo].[MyTable] ADD [Bar] int NOT NULL DEFAULT 5",
                Generate(new AddColumnOperation("dbo.MyTable", column), database).Sql);
        }
Beispiel #9
0
        public void Visit_with_add_column_operation()
        {
            var model     = new DatabaseModel();
            var table     = new Table("dbo.MyTable");
            var column    = new Column("Foo", typeof(int));
            var operation = new AddColumnOperation("dbo.MyTable", column);

            model.AddTable(table);

            Assert.Equal(0, table.Columns.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(1, table.Columns.Count);
            Assert.Same(column, table.Columns[0]);
        }
Beispiel #10
0
        public void Visit_with_rename_index_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var index     = new Index("IX", new[] { column }, isUnique: true, isClustered: true);
            var operation = new RenameIndexOperation("dbo.MyTable", "IX", "RenamedIndex");

            model.AddTable(table);
            table.AddIndex(index);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(1, table.Indexes.Count);
            Assert.Equal("RenamedIndex", table.Indexes[0].Name);
        }
        public void Database_setter_clones_value()
        {
            var sqlGenerator = (new Mock <MigrationOperationSqlGenerator>(new RelationalTypeMapper())
            {
                CallBase = true
            }).Object;
            var database     = new DatabaseModel();
            var table        = new Table("dbo.MyTable");

            database.AddTable(table);
            sqlGenerator.Database = database;

            Assert.NotSame(database, sqlGenerator.Database);
            Assert.Equal(1, sqlGenerator.Database.Tables.Count);
            Assert.NotSame(table, sqlGenerator.Database.Tables[0]);
            Assert.Equal("dbo.MyTable", sqlGenerator.Database.Tables[0].Name);
        }
        public void Visit_with_drop_unique_constraint_operation()
        {
            var model  = new DatabaseModel();
            var column = new Column("Foo", typeof(int));
            var table  = new Table("dbo.MyTable", new[] { column });

            table.AddUniqueConstraint(new UniqueConstraint("UC", new[] { column }));

            var operation = new DropUniqueConstraintOperation("dbo.MyTable", "UC");

            model.AddTable(table);

            Assert.Equal(1, table.UniqueConstraints.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(0, table.UniqueConstraints.Count);
        }
Beispiel #13
0
        public void Visit_with_drop_default_constraint_operation()
        {
            var model  = new DatabaseModel();
            var column = new Column("Foo", typeof(int))
            {
                DefaultValue = 5, DefaultSql = "Sql"
            };
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new DropDefaultConstraintOperation("dbo.MyTable", "Foo");

            model.AddTable(table);

            Assert.True(column.HasDefault);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.False(column.HasDefault);
        }
Beispiel #14
0
        public void Generate_uses_preprocessor()
        {
            var database = new DatabaseModel();
            var column   = new Column("Id", typeof(string))
            {
                IsNullable = false
            };
            var newColumn = new Column("Id", typeof(int))
            {
                IsNullable = false
            };
            var table
                = new Table("A", new[] { column })
                {
                PrimaryKey = new PrimaryKey("PK", new[] { column })
                };

            database.AddTable(table);

            var operations
                = new MigrationOperation[]
                {
                new AlterColumnOperation(table.Name, newColumn, isDestructiveChange: true)
                };

            var stringBuilder = new StringBuilder();

            foreach (var statement in CreateGenerator(database).Generate(operations))
            {
                stringBuilder.AppendLine(statement.Sql);
            }

            Assert.Equal(
                @"ALTER TABLE ""A"" RENAME TO ""__mig_tmp__A""
CREATE TABLE ""A"" (
    ""Id"" INT NOT NULL,
    CONSTRAINT ""PK"" PRIMARY KEY (""Id"")
)
INSERT INTO ""A"" ( ""Id"" )
    SELECT ""Id"" FROM ""__mig_tmp__A""
DROP TABLE ""__mig_tmp__A""
",
                stringBuilder.ToString());
        }
Beispiel #15
0
        public void Visit_with_drop_primary_key_operation()
        {
            var model  = new DatabaseModel();
            var column = new Column("Foo", typeof(int));
            var table
                = new Table("dbo.MyTable", new[] { column })
                {
                PrimaryKey = new PrimaryKey("PK", new[] { column }, isClustered: false)
                };
            var operation = new DropPrimaryKeyOperation("dbo.MyTable", "PK");

            model.AddTable(table);

            Assert.NotNull(table.PrimaryKey);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Null(table.PrimaryKey);
        }
Beispiel #16
0
        public void Visit_with_add_primary_key_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new AddPrimaryKeyOperation("dbo.MyTable", "PK", new[] { "Foo" }, isClustered: false);

            model.AddTable(table);

            Assert.Null(table.PrimaryKey);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.NotNull(table.PrimaryKey);
            Assert.Equal("PK", table.PrimaryKey.Name);
            Assert.Equal(1, table.PrimaryKey.Columns.Count);
            Assert.Same(column, table.PrimaryKey.Columns[0]);
            Assert.False(table.PrimaryKey.IsClustered);
        }
        public void Generate_uses_preprocessor()
        {
            var database = new DatabaseModel();
            var column   = new Column("Id", typeof(string))
            {
                IsNullable = false
            };
            var newColumn = new Column("Id", typeof(int))
            {
                IsNullable = false
            };
            var table = new Table("A", new[] { column });

            database.AddTable(table);
            table.PrimaryKey = new PrimaryKey("PK", new[] { column });

            var operations
                = new MigrationOperation[]
                {
                new CreateTableOperation(table),
                new AlterColumnOperation(table.Name, newColumn, isDestructiveChange: true)
                };

            var stringBuilder = new StringBuilder();

            foreach (var statement in CreateSqlGenerator(database).Generate(operations))
            {
                stringBuilder.AppendLine(statement.Sql);
            }

            Assert.Equal(
                @"CREATE TABLE [A] (
    [Id] nvarchar(128) NOT NULL,
    CONSTRAINT [PK] PRIMARY KEY ([Id])
)
ALTER TABLE [A] DROP CONSTRAINT [PK]
ALTER TABLE [A] ALTER COLUMN [Id] int NOT NULL
ALTER TABLE [A] ADD CONSTRAINT [PK] PRIMARY KEY ([Id])
",
                stringBuilder.ToString());
        }
Beispiel #18
0
        public void Visit_with_alter_column_operation()
        {
            var model  = new DatabaseModel();
            var column = new Column("Foo", typeof(string));
            var table  = new Table("dbo.MyTable", new[] { column });
            var operation
                = new AlterColumnOperation(
                      "dbo.MyTable",
                      new Column("Foo", typeof(int))
            {
                DataType                = "T",
                IsNullable              = false,
                DefaultValue            = "V",
                DefaultSql              = "Sql",
                ValueGenerationStrategy = ValueGenerationOnSave.WhenInsertingAndUpdating,
                IsTimestamp             = true,
                MaxLength               = 4,
                Precision               = 3,
                Scale         = 2,
                IsFixedLength = true,
                IsUnicode     = true
            },
                      isDestructiveChange: true);

            model.AddTable(table);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal("Foo", column.Name);
            Assert.Same(typeof(int), column.ClrType);
            Assert.Equal("T", column.DataType);
            Assert.Equal("V", column.DefaultValue);
            Assert.Equal("Sql", column.DefaultSql);
            Assert.Equal(ValueGenerationOnSave.WhenInsertingAndUpdating, column.ValueGenerationStrategy);
            Assert.True(column.IsTimestamp);
            Assert.Equal(4, column.MaxLength.Value);
            Assert.Equal(3, column.Precision.Value);
            Assert.Equal(2, column.Scale.Value);
            Assert.True(column.IsFixedLength.Value);
            Assert.True(column.IsUnicode.Value);
        }
        public void Visit_with_add_unique_constraint_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new AddUniqueConstraintOperation("dbo.MyTable", "UK", new[] { "Foo" });

            model.AddTable(table);

            Assert.Equal(0, table.UniqueConstraints.Count);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(1, table.UniqueConstraints.Count);

            var uniqueConstraint = table.UniqueConstraints[0];

            Assert.Equal("UK", uniqueConstraint.Name);
            Assert.Equal(1, uniqueConstraint.Columns.Count);
            Assert.Same(column, uniqueConstraint.Columns[0]);
        }